View a markdown version of this page

Integrar o XCTest UI para iOS ao Device Farm - AWS Device Farm

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 na biblioteca de desenvolvedor do iOS.

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.

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:

  1. Crie um diretório denominado Payload.

  2. Adicione o diretório da sua aplicação ao diretório da carga útil.

  3. Arquive o diretório Carga útil em um arquivo .zip e 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.

  1. Faça login no console Device Farm em https://console.aws.amazon.com/devicefarm.

  2. No painel de navegação, escolha Teste para dispositivos móveis e Projetos.

  3. 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.

  4. Escolha Criar execução.

  5. Em Selecionar aplicativo e tipo de execução, na seção Tipo de execução, escolha Aplicativo iOS.

  6. 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.

  7. 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.

  8. Em Configurar teste, na seção Selecionar framework de teste, escolha XCTest UI. Depois, selecione Escolher arquivo em Fazer upload de aplicação.

  9. Procure e selecione o arquivo .ipa ou .zip que contém o executor de testes do XCTest UI para iOS.

  10. (Opcional) Para configurar propriedades em nível de execução, atualize a seção Configurações de execução:

    1. 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:

      1. Seus testes devem gerar um .xcresult pacote Xcode e gravá-lo nele. $DEVICEFARM_DERIVED_DATA_PATH Por exemplo, passe -derivedDataPath $DEVICEFARM_DERIVED_DATA_PATH paraxcodebuild. 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).

  11. 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.

  12. Escolha Criar execução. O Device Farm executa o teste e mostra os resultados no console.

Exibir um relatório de teste (console)

  1. Faça login no console Device Farm em https://console.aws.amazon.com/devicefarm.

  2. No painel de navegação, escolha Teste para dispositivos móveis e Projetos.

  3. Escolha o projeto que contém a execução que você deseja inspecionar.

  4. Escolha a execução concluída para abrir seus detalhes.

  5. 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.

O primeiro conjunto de colunas na guia Relatório de teste para um trabalho de interface do usuário do XCTest concluído.
As colunas restantes na guia Relatório de teste para um trabalho de interface do usuário do XCTest concluído.

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.

A guia Relatório de teste com testes agrupados por classe, mostrando cada classe expandida para seus testes individuais.

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.

Os resultados do trabalho de um trabalho de interface do usuário do XCTest concluído sem os insights de teste ativados, mostrando as guias padrão e nenhuma guia do relatório de teste.

Exibir um relatório de teste (AWS CLI)

Execute get-job e especifique o ARN do trabalho:

aws devicefarm get-job --arn arn: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, jobArn

A versão do esquema do relatório e o ARN do trabalho.

deviceName, deviceArn, deviceOsVersion

O nome e o ARN do dispositivo que executou a tarefa e sua versão do sistema operacional.

metrics

Resultados 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, testClass

O nome do método de teste e sua classe de teste.

result, frameworkResult

O resultado do Device Farm para o teste e a sequência de resultados que a estrutura XCTest relatou. O Device Farm mapeia frameworkResult para o result campo normalizado.

durationSeconds, startTimestamp, endTimestamp

A duração do teste em segundos e os horários em que ele começou e terminou.

testBundle, nodeIdentifier

O pacote de teste ao qual o teste pertence e o identificador do nó xcresult para o caso de teste.

testArguments

Para uma invocação de teste parametrizada, o rótulo do argumento para a invocação.

stackTrace

Para um teste que falhou, o rastreamento de pilha da falha.