Olá Habr! Apresento a você a tradução do artigo
"WWDC19: Introdução ao Plano de Teste para o XCTest", de Shashikant Jagtap.

Na última conferência da
WWDC , a Apple apresentou novos recursos interessantes para os desenvolvedores. O Xcode 11 também adiciona alguns recursos impressionantes. Você pode ler sobre eles nas
notas de versão . Uma das ferramentas mais significativas anunciadas este ano é o Plano de Teste para os testes XCTest e Xcode UI. Neste artigo, examinaremos em detalhes como a funcionalidade do Plano de Teste funcionará com o XCTest. Se você quiser saber mais detalhes, assista ao vídeo da sessão
"Testing on Xcode".Plano de teste do Xcode
Antes do Xcode 11, a configuração de teste fazia parte dos esquemas do Xcode. Se os desenvolvedores quisessem configurar diferentes suítes de teste para diferentes condições, eles criaram um novo circuito ou editaram o existente para necessidades específicas de teste. A configuração do teste estava intimamente relacionada aos esquemas do Xcode, então tive que criar muitos esquemas para diferentes tarefas durante o teste.
A nova funcionalidade do Xcode 11 permite que desenvolvedores e engenheiros de controle de qualidade personalizem testes para atender às suas necessidades. O plano de teste permite determinar:
- quais testes executar na montagem;
- como executar esses testes (por exemplo, em ordem aleatória ou alfabética);
- Como gerenciar artefatos de teste (por exemplo, anexos e capturas de tela);
- como usar ferramentas de tempo de execução como parte do teste.
Com o Xcode Test Plan, você pode configurar os conjuntos de testes independentemente dos esquemas do Xcode. Esta é uma melhoria significativa na tecnologia de teste que pode levar seus testes para o próximo nível. Agora, vamos dar uma olhada no plano de teste do Xcode em ação.
O script
Suponha que criemos um plano de teste para testes funcionais com os seguintes requisitos:
- Os testes funcionais devem incluir kits para testes de fumaça e regressão;
- Testes de fumaça devem ser realizados em Londres (Reino Unido) e testes de regressão em San Francisco (EUA);
- Os testes de fumaça devem ser executados em ordem alfabética e os testes de regressão devem ser executados em ordem aleatória para detectar problemas entre os testes.
Criaremos este plano de teste para o Xcode para várias plataformas da Apple.
Criando um plano de teste no Xcode
O Xcode 11 nos permite definir esses requisitos no Plano de Teste. O Xcode permite criar um plano de teste a partir da configuração atual do esquema. Quando você edita o circuito e prossegue para as etapas de teste atuais, o Xcode exibe uma opção para criar um Plano de Teste. Você pode criar um plano de teste com as seguintes configurações:
- Plano de teste em branco : cria um modelo vazio e permite que você faça seu próprio plano;
- Plano de teste do esquema : toma uma configuração de circuito e cria um plano de teste;
- Escolha Plano de teste : se você já possui um plano de teste, é possível selecioná-lo e adicioná-lo ao gráfico.
Para se familiarizar, crie um Plano de Teste a partir da configuração do circuito.

Você precisa nomear Plano de Teste e especificar o destino de teste correto. Quando um plano de teste é criado, ele é anexado ao circuito. No entanto, o esquema pode substituir qualquer plano de teste criado após o uso do sinalizador quando o comando Xcodebuild é chamado. Após criar um plano de teste, você pode anexá-lo a um destino específico. Vamos adicionar o plano atual ao destino com testes de interface do usuário e dar um nome a ele.

Você encontrará um novo arquivo com a extensão functional.xctestplan. Este é o seu plano de teste. Pode ser editado se necessário. Você pode fazer um plano de teste composto no mesmo destino, dependendo das necessidades dos testes. Neste ponto, temos um plano de teste disponível para o nosso destino com testes de interface do usuário.
Arquivo de plano de teste
O arquivo Plano de Teste é um arquivo simples de configuração semelhante a json que contém informações sobre como configurar seus testes para serem executados independentemente de qualquer circuito. Aqui estão as várias definições de configuração de teste disponíveis no Plano de Teste. O plano de teste básico contém três elementos principais:
- Configurações
- Alvos de teste
- Configurações
Cada configuração no Plano de Teste contém um conjunto de testes vinculados a ela com configurações diferentes. De acordo com os requisitos do nosso plano de teste, precisaremos de duas configurações: uma para testes de fumaça e outra para testes de regressão.
Agora vamos abrir o arquivo functional.xctestplan no Xcode e renomear configuration1 para smoke-uk, depois clicar no botão “+” na parte superior do plano e adicionar outra configuração de regressão-usa.
Agora, temos duas configurações no Plano de Teste e o Plano de Teste já está vinculado a um destino com testes de UI. Adicione algumas configurações a cada configuração. Quando a configuração smoke-uk é selecionada, podemos alterar o local para Londres e fazer outras alterações nas configurações. Da mesma forma, altere a configuração de regression-usa. É assim que o Plano de Teste será acionado para uma regressão:

Configurações disponíveis no Plano de Teste:
- Argumentos - permite substituir os argumentos de lançamento e o ambiente de lançamento para testes;
- Localização - permite configurar testes para várias localizações geográficas, localidades e idiomas. Essa é uma configuração muito legal para testar a internacionalização e localização;
- Teste de UI / Anexo / Execução de Teste / Cobertura de Código - opções específicas para teste de UI e artefatos de teste. Você pode decidir se deseja deixar artefatos ou excluí-los o mais rápido possível. Você também pode escolher a ordem na qual os testes são executados e o cálculo da cobertura do código;
- Ferramentas de diagnóstico de código Xcode - Várias ferramentas de diagnóstico de código Xcode, como o Address Sanitizer ou Thread Sanitizer, estão disponíveis para procurar erros de tempo de execução. Você também pode usar outras opções que ajudam a procurar vazamentos de memória, etc.
Criando um plano de teste do zero
Se você não deseja criar um Plano de Teste usando o esquema Xcode, sempre pode criar um novo Plano de Teste através do Xcode → Produto → Plano de Teste.

Tendo criado o Plano de Teste dessa maneira, anexá-lo-emos a algum destino de teste adicionando testes a ele. No exemplo abaixo, criamos um novo plano de teste e adicionamos testes a ele.

Criando um plano de teste a partir da fonte
Como mencionado anteriormente, o Xcode Test Plan é apenas um arquivo de configuração, onde instalamos todas as configurações definidas. Em nosso cenário, criamos o functional.xctestplan, e o código-fonte se parece com isso:
{ "configurations" : [ { "name" : "smoke-uk", "options" : { "language" : "en-GB", "locationScenario" : { "identifier" : "London, England", "referenceType" : "built-in" }, "region" : "GB", "testExecutionOrdering" : "lexical" } }, { "name" : "Regression-usa", "options" : { "addressSanitizer" : { "enabled" : true }, "language" : "en", "locationScenario" : { "identifier" : "San Francisco, CA, USA", "referenceType" : "built-in" }, "region" : "US", "testExecutionOrdering" : "random" } } ], "defaultOptions" : { "codeCoverage" : false }, "testTargets" : [ { "target" : { "containerPath" : "container:XCTestPlan.xcodeproj", "identifier" : "9B0E393A22A6EB5400F666A1", "name" : "XCTestPlanUITests" } } ], "version" : 1 }
Você pode criar a configuração dessa maneira e salvá-la em um arquivo com a extensão .xctestplan no Xcode 11.
Iniciar plano de teste
Agora entendemos o processo de criação de um arquivo de plano de teste no Xcode. Vamos ver como executar o Plano de Teste e obter relatórios no Xcode. Você pode executar testes através do Xcode -> Produto -> Teste como de costume, executando os Planos de Teste anexados no esquema. No nosso caso, isso iniciará as duas configurações de teste - fumaça e regressão.
Existem várias opções de linha de comando no Xcodebuild para exibir e executar Planos de Teste. Você pode executar o seguinte comando:
$ Xcodebuild -showTestPlans -scheme YOUR_SCEME
Ele exibirá todos os planos de teste para o circuito atual. Você também pode executar um teste separado:
$ Xcodebuild -project XCTestPlan.Xcodeproj/ -scheme XCTestPlan -destination 'platform=iOS Simulator,OS=13.0,name=iPhone XR' test -testPlan functional
Este script executará o teste usando a configuração do Plano de Teste.
Relatórios do plano de teste
Depois de executar os testes para um plano de teste específico, você pode ver os bons relatórios gerados no Xcode. Os relatórios são gerados separadamente para cada configuração.

No Xcode, na seção Navegador de teste, você pode filtrar relatórios por Planos de teste. Os relatórios do Plano de teste do Xcode podem ser configurados no servidor Xcode.
Código fonte de demonstração disponível no Github: XCTestPlanPlano de Teste do Xcode: Aplicação
Brevemente sobre onde o Plano de Teste do Xcode pode ser usado e como ele muda dependendo da configuração do circuito. Aqui estão alguns exemplos de como usar o Plano de Teste do Xcode:
- Vários tipos de teste, como foi mostrado na demonstração: fumaça, regressão, etc;
- Testando a internacionalização e localização do aplicativo, por exemplo, se você deseja testar seu aplicativo para vários idiomas, é possível criar várias configurações;
- Executando testes pesados, como testes de desempenho e estresse, e separando-os de testes funcionais. Você pode configurar testes para trabalhar junto com ferramentas de diagnóstico de código ou outros testes não funcionais.
Muitos outros cenários também são possíveis nos quais os Planos de Teste do Xcode podem ajudar a expandir o processo de teste.
Conclusão
Com o Xcode Test Plan, o XCTest pode ser levado para o próximo nível, com a capacidade de gerenciar sua configuração e executar seus testes. O Xcode Test Plans oferece um melhor controle sobre a plataforma de teste baseada na Apple.