As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Integrar o XCTest UI para iOS ao Device Farm
O Device Farm comporta o framework de teste do XCTest UI. Especificamente, o Device Farm oferece suporte aos testes de interface do usuário do XCTest escritos tanto em Swift Objective-C quanto em Swift.
O framework do XCTest UI permite testes de interface do usuário no desenvolvimento para iOS, construído com base no XCTest. Para obter mais informações, consulte Teste da interface do usuário
Para acessar informações gerais sobre testes no Device Farm, consulte Frameworks de teste e testes integrados no AWS Device Farm.
Use as instruções a seguir para integrar o Device Farm ao framework de teste do XCTest UI para iOS.
Tópicos
Preparação dos testes do XCTest UI para iOS
Você pode fazer upload de um arquivo .ipa ou .zip para seu pacote de testes XCTEST_UI.
Arquivo .ipa é um arquivo de aplicação que contém a aplicação iOS Runner em formato de pacote. Arquivos adicionais não podem ser incluídos no arquivo .ipa.
Se você fizer upload de um arquivo .zip, ele poderá conter diretamente a aplicação iOS Runner ou um arquivo .ipa. Você também poderá incluir outros arquivos no arquivo .zip se quiser usá-los durante os testes. Por exemplo, é possível incluir arquivos, como .xctestrun, .xcworkspace ou .xcodeproj em um arquivo .zip para executar planos de teste XCUI no farm de dispositivos. Instruções detalhadas sobre como executar planos de teste estão disponíveis no arquivo de especificação de teste padrão para o tipo de teste XCUI.
Opção 1: criar um pacote .ipa do XCTest UI
O seu AppName UITest-Runner.app pacote é produzido pelo Xcode quando você constrói seu projeto para teste. Ele pode ser encontrado no diretório Products do projeto.
Para criar um arquivo .ipa:
-
Crie um diretório denominado
Payload. -
Adicione o diretório da sua aplicação ao diretório da carga útil.
-
Arquive o diretório Carga útil em um arquivo
.zipe mude a extensão do arquivo para.ipa.
A estrutura de pastas a seguir mostra como um exemplo de aplicativo chamado my-project-nameUITest-Runner.app seria empacotado como um .ipa arquivo:
. └── my-project-nameUITest.ipa └── Payload (directory) └── my-project-nameUITest-Runner.app
Opção 2: criar um pacote .zip do XCTest UI
O Device Farm gera automaticamente um arquivo .xctestrun para você executar seu pacote completo de testes do XCTest UI. Se quiser usar seu próprio arquivo .xctestrun no Device Farm, compacte seus arquivos .xctestrun e o diretório da aplicação em um arquivo .zip. Se você já tem um .ipa arquivo para seu pacote de teste, você pode incluí-lo aqui em vez de*-Runner.app.
. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── SampleTestPlan_2.xctestrun ├── SampleTestPlan_1.xctestrun └── (any other files)
Se quiser executar um plano de teste do Xcode para seus testes XCUI no Device Farm, você pode criar um zip contendo seu arquivo my-project-name UITest-Runner.app ou my-project-name e os arquivos de código-fonte do xcode necessários para executar o XCTEST_UI com planos de teste, incluindo um UITest.ipa arquivo ou. .xcworkspace .xcodeproj
Aqui está um exemplo de zip usando um arquivo .xcodeproj:
. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── (any directory) └──SampleXcodeProject.xcodeproj├── Testplan_1.xctestplan ├── Testplan_2.xctestplan └── (any other source code files created by xcode with .xcodeproj)
Aqui está um exemplo de zip usando um arquivo .xcworkspace:
. └──swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa └── (any directory) │ ├── SampleXcodeProject.xcodeproj │ ├── Testplan_1.xctestplan │ ├── Testplan_2.xctestplan | └── (any other source code files created by xcode with .xcodeproj) └──SampleWorkspace.xcworkspace└── contents.xcworkspacedata
nota
Garanta que você não tenha um diretório chamado “Carga útil” dentro do pacote .zip do XCTest UI.
Execute testes de interface do usuário do iOS XCTest (console)
Use o console do Device Farm para carregar seus testes.
Faça login no console Device Farm em https://console.aws.amazon.com/devicefarm
. -
No painel de navegação, escolha Teste para dispositivos móveis e Projetos.
-
Na lista de projetos, escolha o projeto para o qual deseja carregar seus testes.
dica
Você pode usar a barra de pesquisa para filtrar a lista de projetos por nome.
Para criar um projeto, siga as instruções em Criar um projeto no AWS Device Farm.
-
Escolha Criar execução.
-
Em Selecionar aplicativo e tipo de execução, na seção Tipo de execução, escolha Aplicativo iOS.
-
Na seção Selecionar aplicativo, em Opções de seleção de aplicativo, selecione Carregar próprio aplicativo. Depois, selecione Escolher arquivo em Fazer upload de aplicação.
-
Procure e escolha o arquivo de seu aplicativo iOS. O arquivo deve ser .ipa.
nota
Confirme se o arquivo .ipa foi desenvolvido para um dispositivo iOS e não para um simulador.
-
Em Configurar teste, na seção Selecionar framework de teste, escolha XCTest UI. Depois, selecione Escolher arquivo em Fazer upload de aplicação.
-
Procure e selecione o arquivo .ipa ou .zip que contém o executor de testes do XCTest UI para iOS.
-
(Opcional) Para configurar propriedades em nível de execução, atualize a seção Configurações de execução:
-
Para que o Device Farm gere um relatório do Test Insights após a conclusão da execução, ative Gerar relatório de teste. Essa opção está disponível somente em um ambiente de teste personalizado.
Os seguintes pré-requisitos se aplicam:
-
Seus testes devem gerar um
.xcresultpacote Xcode e gravá-lo nele.$DEVICEFARM_DERIVED_DATA_PATHPor exemplo, passe-derivedDataPath $DEVICEFARM_DERIVED_DATA_PATHparaxcodebuild. A especificação de teste padrão do XCTest UI produz e armazena esse pacote automaticamente se você mantiver a configuração padrão.
Para obter mais informações sobre como visualizar seu relatório, consulteExibir um relatório de teste (console).
-
-
-
Conclua as etapas restantes no processo de criação do projeto. Selecione os dispositivos nos quais você deseja testar e, opcionalmente, especifique uma configuração adicional.
-
Escolha Criar execução. O Device Farm executa o teste e mostra os resultados no console.
Exibir um relatório de teste (console)
Faça login no console Device Farm em https://console.aws.amazon.com/devicefarm
. -
No painel de navegação, escolha Teste para dispositivos móveis e Projetos.
-
Escolha o projeto que contém a execução que você deseja inspecionar.
-
Escolha a execução concluída para abrir seus detalhes.
-
Escolha um dos trabalhos concluídos para abrir os resultados desse dispositivo.
Com os insights de teste ativados
Os resultados do trabalho incluem uma guia de relatório de teste. Escolha-o para ver um resumo dos resultados do teste, incluindo o número total de testes, quantos foram aprovados e reprovados, o tempo total de execução do teste e o tempo médio de execução do teste. Abaixo do resumo, a tabela de testes mostra um detalhamento por teste.
Cada linha na tabela Testes inclui as seguintes colunas:
-
Resultado — se o teste foi aprovado, reprovado ou ignorado.
-
Classe de teste — a classe à qual o teste pertence.
-
Nome do teste — o nome do método de teste.
-
Stack trace — para um teste que falhou, um link para o stack trace da falha.
-
Duração — quanto tempo o teste levou para ser executado.
-
Hora de início e hora de término — quando o teste começou e terminou.
-
Resultado da estrutura — a string de resultado que a estrutura XCTest relatou para o teste.
-
Pacote de teste — o pacote de teste ao qual o teste pertence.
-
Identificador de nó — o identificador de nó resultante para o caso de teste.
Você pode pesquisar um teste por nome, classe ou status. Para escolher quais colunas serão exibidas, escolha o ícone Configurações. Nas configurações, você pode selecionar as colunas a serem exibidas e ativar ou desativar Agrupar por turma. O grupo por classe está ativado por padrão, o que agrupa os testes por sua classe de teste. Expanda uma classe para ver seus testes individuais, conforme mostrado na captura de tela a seguir.
Para baixar o relatório de teste completo como um arquivo JSON, escolha Baixar resumo completo na parte superior dos detalhes do trabalho.
Sem os insights de teste ativados
Os resultados do trabalho mostram a saída de teste padrão e os artefatos, como as guias Suítes , Registros e Capturas de tela, mas nenhuma guia Relatório de teste. Para gerar um relatório de teste, agende uma nova execução com os insights de teste ativados.
Exibir um relatório de teste (AWS CLI)
Execute get-job e especifique o ARN do trabalho:
aws devicefarm get-job --arnarn:aws:devicefarm:us-west-2:123456789012:job:PROJECT_ID/RUN_ID/00000
Sem os insights de teste ativados
Se você não habilitou os insights de teste, a resposta conterá os campos de trabalho padrão, como status do trabalho, resultado, contadores e dispositivo:
{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "name": "Example Apple iPhone", "created": "2026-08-05T14:26:56.959000-07:00", "status": "COMPLETED", "result": "PASSED", "counters": { "total": 3, "passed": 3, "failed": 0, "warned": 0, "errored": 0, "stopped": 0, "skipped": 0 }, "message": "Successful test lifecycle of Setup Test", "device": { "arn": "arn:aws:devicefarm:us-west-2::device:EXAMPLEDEVICEID", "name": "Example Apple iPhone", "platform": "IOS", "os": "18", "formFactor": "PHONE", "fleetType": "PUBLIC" }, "deviceMinutes": { "total": 1.38, "metered": 0.0, "unmetered": 1.13 }, "videoCapture": true } }
Com os insights de teste ativados
Se você ativou os insights de teste, a resposta também inclui um insights objeto que contém o status do relatório de teste, métricas de alto nível e uma URL pré-assinada para o relatório detalhado:
{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "status": "COMPLETED", "result": "PASSED", "counters": { ... }, "device": { ... }, "deviceMinutes": { ... }, "videoCapture": true, "insights": { "status": "COMPLETED", "testReport": { "message": "Results: 2 Executed | 2 passed, Median test duration: 3.214 seconds.", "metrics": { "testsTotal": 2, "testsPassed": 2, "testsFailed": 0, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 100.0 }, "testDetailsUrl": "https://EXAMPLE-PRESIGNED-URL" } } } }
O testDetailsUrl campo é um URL pré-assinado para o relatório de teste completo JSON. Faça o download para obter o detalhamento por teste:
curl -o test-report.json "PRESIGNED_URL"
Veja a seguir um exemplo de relatório de teste para um trabalho de interface do usuário do XCTest:
{ "version": "1.0", "jobArn": "arn:aws:devicefarm:us-west-2:123456789012:job:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE/a1b2c3d4-e5f6-4a7b-8c9d-67890EXAMPLE/00000", "deviceName": "Apple iPhone 15", "deviceArn": "arn:aws:devicefarm:us-west-2::device:A1B2C3D4E5F60718293A4B5C6D7E8F90", "deviceOsVersion": "17.5", "metrics": { "testsTotal": 3, "testsPassed": 2, "testsFailed": 1, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 66.67, "totalTestExecutionDurationSeconds": 6.914, "medianTestExecutionDurationSeconds": 2.062 }, "testDetails": [ { "testName": "test_execute()", "testClass": "AlertsTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 2.062, "startTimestamp": "2026-07-31T16:58:26.646000Z", "endTimestamp": "2026-07-31T16:58:28.708000Z", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "AlertsTest/test_execute()" }, { "testName": "test_login()", "testClass": "LoginTest", "frameworkResult": "Failed", "result": "FAILED", "durationSeconds": 3.541, "startTimestamp": "2026-07-31T16:58:29.000000Z", "endTimestamp": "2026-07-31T16:58:32.541000Z", "stackTrace": "LoginTest.swift:88: XCTAssertEqual failed: (\"Welcome\") is not equal to (\"Error\")\nLoginTest.swift:91: XCTAssertTrue failed", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "LoginTest/test_login()" }, { "testName": "test_themeRendering()", "testClass": "ThemeTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 1.311, "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "ThemeTest/test_themeRendering()", "testArguments": "Dark Appearance, Portrait" } ] }
O relatório contém os seguintes campos de nível superior:
version,jobArnA versão do esquema do relatório e o ARN do trabalho.
deviceName,deviceArn,deviceOsVersionO nome e o ARN do dispositivo que executou a tarefa e sua versão do sistema operacional.
metricsResultados agregados do trabalho: o número total de testes (
testsTotal) e quantos foram aprovados (testsPassed), reprovados (testsFailed), foram ignorados (testsSkipped), errados () ou tiveram outro resultado (testsErrored), junto com a taxa de aprovação (testsOther), a duração total do teste (testsPassedPercentage) e a duração média do teste (totalTestExecutionDurationSeconds).medianTestExecutionDurationSeconds
Cada entrada em testDetails contém os seguintes campos:
testName,testClassO nome do método de teste e sua classe de teste.
result,frameworkResultO resultado do Device Farm para o teste e a sequência de resultados que a estrutura XCTest relatou. O Device Farm mapeia
frameworkResultpara oresultcampo normalizado.durationSeconds,startTimestamp,endTimestampA duração do teste em segundos e os horários em que ele começou e terminou.
testBundle,nodeIdentifierO pacote de teste ao qual o teste pertence e o identificador do nó xcresult para o caso de teste.
testArgumentsPara uma invocação de teste parametrizada, o rótulo do argumento para a invocação.
stackTracePara um teste que falhou, o rastreamento de pilha da falha.