Olá pessoal!
Outra novidade na lista de nossos cursos:
“iOS Developer” , o que significa que chegou a hora das peças interessantes que encontramos durante a preparação do curso. Neste artigo, o autor analisa como gravar e reproduzir solicitações de API para testes de interface do usuário.

Vamos lá
Recentemente, integrei o
Embassy e o
Succulent nos meus testes de interface do usuário. Se você precisar executar testes de interface do usuário para um aplicativo que use essas APIs, este guia poderá oferecer uma alternativa ao mock / stub.
Os problemas:
- O aplicativo usa os dados da API para preencher a interface do usuário;
- O uso de stubs pode exigir a gravação e manutenção de um grande número de arquivos;
- Ao usar zombarias, a lógica do aplicativo pode diferir da chamada de rede real;
- Usando esta API de conexão - EXCLUSIVAMENTE EXCLUÍDA, muitas variáveis e falhas
Solução Embassy + SucculentA solução é criar um servidor local para o qual seu aplicativo é direcionado (usando o Embassy) e gravar / atender chamadas de rede (usando o Succulent).
Na primeira vez em que você executa o teste, as chamadas de rede padrão serão feitas e gravadas no arquivo de rastreamento.
Da próxima vez, essas mesmas chamadas de rede serão atendidas automaticamente. Legal, não é? Não há necessidade de escrever zombarias, você pode simular atrasos e erros, e tudo isso é executado dentro da máquina de compilação, dentro do XCtest!
Como usá-lo?1. Baixe e instale em Succulent. No momento da redação deste artigo, não havia pod em cocoapods.com, portanto, você precisa fazer o download da fonte e adicioná-la ao seu subarquivo da seguinte maneira:
target “UI Tests” do inherit! :search_paths pod 'Succulent', :path => 'Succulent/' end
O Succulent é exigido pela Embassy e será instalado automaticamente.
2. Crie um novo arquivo de interface do usuário de teste e copie as instruções do
Succulent GitHub . Como resultado, você deve obter este arquivo:
import Succulent @testable import TestAppUITests class SucculentTestUITest: XCTestCase { private var succulent: Succulent! var session: URLSession! var baseURL: URL! /// The name of the trace file for the current test private var traceName: String { return self.description.trimmingCharacters(in: CharacterSet(charactersIn: "-[] ")).replacingOccurrences(of: " ", with: "_") } /// The URL to the trace file for the current test when running tests private var traceUrl: URL? { let bundle = Bundle(for: type(of: self)) return bundle.url(forResource: self.traceName, withExtension: "trace", subdirectory: "Traces") } /// The URL to the trace file for the current test when recording private var recordUrl: URL { let bundle = Bundle(for: type(of: self)) let recordPath = bundle.infoDictionary!["TraceRecordPath"] as! String return URL(fileURLWithPath: "\(recordPath)/\(self.traceName).trace") } override func setUp() { super.setUp() continueAfterFailure = false if let traceUrl = self.traceUrl { // Replay using an existing trace file succulent = Succulent(traceUrl: traceUrl) } else { // Record to a new trace file succulent = Succulent(recordUrl: self.recordUrl, baseUrl: URL(string: "https//base-url-to-record.com/")!) } succulent.start() let app = XCUIApplication() app.launchEnvironment["succulentBaseURL"] = "http://localhost:\(succulent.actualPort)/" app.launch() } override func tearDown() { super.tearDown() } }
Ao iniciar o Succulent, você pode especificar o URL base, graças ao qual todas as solicitações, incluindo o URL base, serão registradas e todas as outras serão ignoradas.
3. Adicione a seguinte linha ao destino Info.plist da sua interface de usuário de teste:
<key>TraceRecordPath</key> <string>$(PROJECT_DIR)/Succulent/Traces</string>
4. Direcione o aplicativo para o servidor local.
Para fazer isso dentro do aplicativo principal, é necessário verificar se a variável de ambiente “succulentBaseURL” existe e se está configurada.
Ele mostra o URL do servidor da web local e está configurado na função setUp, que foi copiada acima na etapa 2.
Isso é tudo, talvez!
Agora, quando você executa um teste simples e o executa, o Succulent grava uma solicitação de API e cria um arquivo .trace na pasta Traces do diretório de destino do seu teste de interface do usuário. Na próxima vez em que você executar o mesmo teste, ele verificará se o arquivo existe e o executará.
Você pode abrir arquivos .trace diretamente do Xcode, assistir a todas as solicitações de rede e modificá-las conforme necessário.
Espero que o artigo tenha sido útil, aqui está a pizza:

O FIM
Como sempre, estamos aguardando comentários, perguntas etc. aqui ou você pode ver o
Open Day e fazer uma pergunta ao
professor de lá.