Os testes que você especificar no arquivo buildspec são executados durante a compilação. Este exemplo mostra como usar a AWS CLI para incorporar testes em compilações no CodeBuild. Você pode usar JUnit para criar testes de unidade ou usar outra ferramenta para criar testes de configuração. Depois, você pode avaliar os resultados do teste para corrigir problemas ou otimizar seu aplicativo.
É possível usar a API do CodeBuild ou o console do AWS CodeBuild para acessar os resultados do teste. Este exemplo mostra como configurar seu relatório para que seus resultados de teste sejam exportados para um bucket do S3.
Executar o exemplo de relatório de teste
Use as etapas a seguir para executar o exemplo de relatório de teste.
Tópicos
Pré-requisitos
-
Criar seus casos de teste. Este exemplo é escrito partindo-se do pressuposto de que você tem casos de teste para incluir em seu relatório de teste de amostra. Especifique o local dos arquivos de teste no arquivo buildspec.
Os seguintes formatos de arquivo de relatório de teste são compatíveis:
-
Cucumber JSON (.json)
-
JUnit XML (.xml)
-
NUnit XML (.xml)
-
NUnit3 XML (.xml)
-
TestNG XML (.xml)
-
Visual Studio TRX (.trx)
-
Visual Studio TRX XML (.xml)
Crie seus casos de teste com qualquer framework de trabalho de teste que possa criar arquivos de relatório em um desses formatos (por exemplo, Surefire JUnit plugin, TestNG ou Cucumber).
-
-
Crie um bucket do S3 e anote seu nome. Para obter mais informações, consulte How do I create an S3 bucket? no Guia do usuário do Amazon S3.
-
Crie um perfil do IAM e anote o ARN. É necessário o ARN ao criar seu projeto de compilação.
-
Se sua função não tiver as seguintes permissões, adicione-as.
{ "Effect": "Allow", "Resource": [ "*" ], "Action": [ "codebuild:CreateReportGroup", "codebuild:CreateReport", "codebuild:UpdateReport", "codebuild:BatchPutTestCases" ] }
Para obter mais informações, consulte Permissões para operações de relatórios de testes.
Etapa 1: criar um grupo de relatórios
-
Crie um arquivo chamado
CreateReportGroupInput.json
. -
Crie uma pasta no bucket do S3 onde os resultados do teste são exportados.
-
Copie o seguinte em
CreateReportGroupInput.json
. Em
, use o nome do bucket do S3. Em<bucket-name>
, insira o caminho para a pasta no bucket do S3.<path-to-folder>
{ "name": "
<report-name>
", "type": "TEST", "exportConfig": { "exportConfigType": "S3", "s3Destination": { "bucket": "<bucket-name>
", "path": "<path-to-folder>
", "packaging": "NONE" } } } -
Execute o comando a seguir no diretório que contenha
CreateReportGroupInput.json
.aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
A saída é semelhante à seguinte. Anote o ARN do
reportGroup
. Use-o ao criar um projeto que use esse grupo de relatórios.{ "reportGroup": { "arn": "arn:aws:codebuild:us-west-2:123456789012:report-group/
<report-name>
", "name": "<report-name>
", "type": "TEST", "exportConfig": { "exportConfigType": "S3", "s3Destination": { "bucket": "<s3-bucket-name>
", "path": "<folder-path>
", "packaging": "NONE", "encryptionKey": "arn:aws:kms:us-west-2:123456789012:alias/aws/s3" } }, "created": 1570837165.885, "lastModified": 1570837165.885 } }
Etapa 2: configurar um projeto com um grupo de relatórios
Para executar um relatório, crie primeiro um projeto de compilação do CodeBuild configurado com o grupo de relatórios. Os casos de teste especificados para o grupo de relatórios são executados quando você executa uma compilação.
-
Crie um arquivo buildspec chamado
buildspec.yml
. -
Use o seguinte YAML como modelo para o seu arquivo
buildspec.yml
. Inclua os comandos que executam seus testes. Na seçãoreports
, especifique os arquivos que contêm os resultados dos seus casos de teste. Esses arquivos armazenam os resultados do teste que você pode acessar com o CodeBuild. Eles expiram 30 dias após sua criação. Esses arquivos são diferentes dos arquivos de resultado de caso de teste bruto exportados para um bucket do S3.version: 0.2 phases: install: runtime-versions: java: openjdk8 build: commands: - echo Running tests -
<enter commands to run your tests>
reports:<report-name-or-arn>
: #test file information files: - '<test-result-files>
' base-directory: '<optional-base-directory>
' discard-paths: false #do not remove file paths from test result filesnota
Em vez do ARN de um grupo de relatórios existente, você também pode especificar um nome para um grupo de relatórios que não foi criado. Se você especificar um nome em vez de um ARN, o CodeBuild criará um grupo de relatórios quando ele executar uma compilação. O nome dele contém o nome do projeto e o nome que você especificar no arquivo buildspec, neste formato:
project-name-report-group-name
. Para obter mais informações, consulte Criar relatórios de teste e Nomenclatura do grupo de relatórios. -
Crie um arquivo chamado
project.json
. Este arquivo contém entrada para o comando create-project. -
Copie o seguinte JSON em
project.json
. Emsource
, insira o tipo e o local do repositório que contém os arquivos de origem. EmserviceRole
, especifique o ARN da função que você está usando.{ "name": "test-report-project", "description": "sample-test-report-project", "source": { "type": "CODECOMMIT|CODEPIPELINE|GITHUB|S3|BITBUCKET|GITHUB_ENTERPRISE|NO_SOURCE", "location": "
<your-source-url>
" }, "artifacts": { "type": "NO_ARTIFACTS" }, "cache": { "type": "NO_CACHE" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "small" }, "serviceRole": "arn:aws:iam::<your-aws-account-id>
:role/service-role/<your-role-name>
" } -
Execute o comando a seguir no diretório que contenha
project.json
. Isso cria um projeto chamadotest-project
.aws codebuild create-project --cli-input-json file://project.json
Etapa 3: executar e visualizar resultados de um relatório
Nesta seção, você executa uma compilação do projeto criado anteriormente. Durante o processo de compilação, o CodeBuild cria um relatório com os resultados dos casos de teste. O relatório está contido no grupo de relatórios especificado.
-
Para iniciar uma compilação, execute o comando a seguir.
test-report-project
é o nome do projeto de compilação criado acima. Anote o ID de compilação que aparece na saída.aws codebuild start-build --project-name test-report-project
-
Execute o comando a seguir para obter informações sobre sua compilação, incluindo o ARN do seu relatório. Em
, especifique seu ID de compilação. Anote o ARN do relatório na propriedade<build-id>
reportArns
da saída.aws codebuild batch-get-builds --ids
<build-id>
-
Execute o comando a seguir para obter detalhes sobre o relatório. Em
, especifique o ARN do relatório.<report-arn>
aws codebuild batch-get-reports --report-arns
<report-arn>
A saída é semelhante à seguinte. Essa saída de exemplo mostra quantos testes foram bem-sucedidos, falharam, foram ignorados, resultaram em erro ou retornaram um status desconhecido.
{ "reports": [ { "status": "FAILED", "reportGroupArn": "
<report-group-arn>
", "name": "<report-group-name>
", "created": 1573324770.154, "exportConfig": { "exportConfigType": "S3", "s3Destination": { "bucket": "<amzn-s3-demo-bucket>", "path": "<path-to-your-report-results>", "packaging": "NONE", "encryptionKey": "<encryption-key>" } }, "expired": 1575916770.0, "truncated": false, "executionId": "arn:aws:codebuild:us-west-2:123456789012:build/<name-of-build-project>
:2c254862-ddf6-4831-a53f-6839a73829c1", "type": "TEST", "arn": "<report-arn>
", "testSummary": { "durationInNanoSeconds": 6657770, "total": 11, "statusCounts": { "FAILED": 3, "SKIPPED": 7, "ERROR": 0, "SUCCEEDED": 1, "UNKNOWN": 0 } } } ], "reportsNotFound": [] } -
Execute o seguinte comando para listar informações sobre casos de teste para seu relatório. Em
, especifique o ARN do seu relatório. No parâmetro opcional<report-arn>
--filter
, você pode especificar um resultado de status (SUCCEEDED
,FAILED
,SKIPPED
,ERROR
, ouUNKNOWN
).aws codebuild describe-test-cases \ --report-arn
<report-arn>
\ --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWNA saída é semelhante à seguinte.
{ "testCases": [ { "status": "FAILED", "name": "Test case 1", "expired": 1575916770.0, "reportArn": "
<report-arn>
", "prefix": "Cucumber tests for agent", "message": "A test message", "durationInNanoSeconds": 1540540, "testRawDataPath": "<path-to-output-report-files>
" }, { "status": "SUCCEEDED", "name": "Test case 2", "expired": 1575916770.0, "reportArn": "<report-arn>
", "prefix": "Cucumber tests for agent", "message": "A test message", "durationInNanoSeconds": 1540540, "testRawDataPath": "<path-to-output-report-files>
" } ] }