

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# '를 사용한 테스트 보고서 AWS CLI' 샘플
<a name="sample-test-report-cli"></a>

buildspec 파일에 지정한 테스트는 빌드 중에 실행됩니다. 이 샘플은를 사용하여 CodeBuild의 빌드에 테스트를 AWS CLI 통합하는 방법을 보여줍니다. JUnit을 사용하여 단위 테스트를 만들거나, 다른 도구를 사용하여 구성 테스트를 만들 수 있습니다. 그런 다음 테스트 결과를 평가하여 문제를 해결하거나 애플리케이션을 최적화할 수 있습니다.

CodeBuild API 또는 AWS CodeBuild 콘솔을 사용하여 테스트 결과에 액세스할 수 있습니다. 이 샘플에서는 테스트 결과를 S3 버킷으로 내보내도록 보고서를 구성하는 방법을 보여줍니다.

**Topics**
+ [테스트 보고서 샘플 실행](#sample-test-report-cli-run)

## 테스트 보고서 샘플 실행
<a name="sample-test-report-cli-run"></a>

다음 단계에 따라 테스트 보고서 샘플을 실행합니다.

**Topics**
+ [사전 조건](#sample-test-report-cli-prerequisites)
+ [1단계: 보고서 그룹 생성](#sample-test-report-cli-create-report)
+ [2단계: 보고서 그룹을 사용하여 프로젝트 구성](#sample-test-report-cli-create-project-with-report)
+ [3단계: 보고서 실행 및 결과 보기](#sample-test-report-cli-run-and-view-report-results)

### 사전 조건
<a name="sample-test-report-cli-prerequisites"></a>
+ 테스트 케이스를 만듭니다. 이 샘플은 샘플 테스트 보고서에 포함할 테스트 케이스가 있다는 것을 전제로 작성된 것입니다. buildspec 파일에서 테스트 파일의 위치를 지정합니다.

  지원되는 테스트 보고서 파일 형식은 다음과 같습니다.
  + Cucumber JSON(.json)
  + JUnit XML(.xml)
  + NUnit XML(.xml)
  + NUnit3 XML(.xml)
  + TestNG XML(.xml)
  + Visual Studio TRX(.trx)
  + Visual Studio TRX XML(.xml)

  이러한 형식 중 하나로 보고서 파일을 만들 수 있는 테스트 프레임워크로 테스트 케이스를 만듭니다(예: Surefire JUnit plugin, TestNG, Cucumber).
+ S3 버킷을 만들고 이름을 기록해 둡니다. 자세한 내용을 알아보려면 Amazon S3 사용 설명서의 [S3 버킷을 생성하는 방법](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)을 참조하세요.**
+ IAM 역할을 생성하고 해당 ARN을 기록해 둡니다. 빌드 프로젝트를 만들 때 ARN이 필요합니다.
+ 역할에 다음 권한이 없는 경우 권한을 추가합니다.

  ```
  {
      "Effect": "Allow",
      "Resource": [
          "*"
      ],
      "Action": [
          "codebuild:CreateReportGroup",
          "codebuild:CreateReport",
          "codebuild:UpdateReport",
          "codebuild:BatchPutTestCases"
      ]
  }
  ```

   자세한 내용은 [테스트 보고 작업에 대한 권한](test-permissions.md#test-permissions-related-to-reporting) 단원을 참조하십시오.

### 1단계: 보고서 그룹 생성
<a name="sample-test-report-cli-create-report"></a>

1. `CreateReportGroupInput.json`이라는 이름의 파일을 만듭니다.

1. S3 버킷에 테스트 결과를 내보낼 폴더를 만듭니다.

1. 다음을 `CreateReportGroupInput.json`에 복사합니다. `<bucket-name>`는 S3 버킷의 이름을 사용합니다. `<path-to-folder>`은 S3 버킷의 폴더 경로를 입력합니다.

   ```
   {
     "name": "<report-name>",
     "type": "TEST",
     "exportConfig": {
       "exportConfigType": "S3",
       "s3Destination": {
         "bucket": "<bucket-name>",
         "path": "<path-to-folder>",
         "packaging": "NONE"
       }
     }
   }
   ```

1. `CreateReportGroupInput.json`을 포함하는 디렉터리에서 다음 명령을 실행합니다.

   ```
   aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
   ```

   출력은 다음과 같습니다. `reportGroup`의 ARN을 기록해 둡니다. 이 보고서 그룹을 사용하는 프로젝트를 만들 때 사용합니다.

   ```
   {
     "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
     }
   }
   ```

### 2단계: 보고서 그룹을 사용하여 프로젝트 구성
<a name="sample-test-report-cli-create-project-with-report"></a>

보고서를 실행하려면 먼저 보고서 그룹으로 구성된 CodeBuild 빌드 프로젝트를 만듭니다. 보고서 그룹에 지정된 테스트 케이스는 빌드를 실행할 때 실행됩니다.

1. 이름이 `buildspec.yml`인 buildspec 파일을 만듭니다 

1. 다음 YAML을 `buildspec.yml` 파일의 템플릿으로 사용합니다. 테스트를 실행하는 명령이 포함되어야 합니다. `reports` 섹션에서는 테스트 케이스 결과가 포함된 파일을 지정합니다. 이러한 파일에는 CodeBuild로 액세스할 수 있는 테스트 결과가 저장됩니다. 작성되고 30일 후에 만료됩니다. 이러한 파일은 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 files
   ```
**참고**  
기존 보고서 그룹의 ARN 대신, 생성되지 않은 보고서 그룹의 이름을 지정할 수도 있습니다. ARN 대신 이름을 지정하면 CodeBuild에서 빌드를 실행할 때 보고서 그룹을 만듭니다. 이름에는 프로젝트 이름과 buildspec 파일에 지정한 이름이 `project-name-report-group-name` 형식으로 포함되어 있습니다. 자세한 내용은 [테스트 보고서 생성](report-create.md) 및 [보고서 그룹 이름 지정](test-report-group-naming.md) 섹션을 참조하세요.

1. `project.json`이라는 이름의 파일을 만듭니다. 이 파일에는 **create-project** 명령에 대한 입력이 들어 있습니다.

1. 다음 JSON을 `project.json`에 복사합니다. `source`는 소스 파일이 들어있는 저장소의 유형과 위치를 입력합니다. `serviceRole`은 사용 중인 역할의 ARN을 지정합니다.

   ```
   {
     "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>"
   }
   ```

1. `project.json`을 포함하는 디렉터리에서 다음 명령을 실행합니다. 이렇게 하면 이름이 `test-project`인 프로젝트가 생성됩니다.

   ```
   aws codebuild create-project --cli-input-json file://project.json
   ```

### 3단계: 보고서 실행 및 결과 보기
<a name="sample-test-report-cli-run-and-view-report-results"></a>

이 섹션에서는 이전에 만든 프로젝트의 빌드를 실행합니다. 빌드 프로세스 중에 CodeBuild에서는 테스트 케이스의 결과가 포함된 보고서를 생성합니다. 보고서는 지정한 보고서 그룹에 포함되어 있습니다.

1. 빌드를 시작하려면 다음 명령을 실행합니다. `test-report-project`는 위에서 만든 빌드 프로젝트의 이름입니다. 출력에 나타나는 빌드 ID를 기록해 둡니다.

   ```
   aws codebuild start-build --project-name test-report-project
   ```

1. 다음 명령을 실행하여 보고서의 ARN을 포함하여 빌드에 대한 정보를 가져옵니다. `<build-id>`은 빌드 ID를 지정합니다. 출력의 `reportArns` 속성에 보고서 ARN을 기록해 둡니다.

   ```
   aws codebuild batch-get-builds --ids <build-id>
   ```

1. 보고서에 대한 세부 정보를 가져오려면 다음 명령을 실행합니다. `<report-arn>`은 보고서 ARN을 지정합니다.

   ```
   aws codebuild batch-get-reports --report-arns <report-arn>
   ```

   출력은 다음과 같습니다. 이 샘플 출력은 성공했거나, 실패했거나, 건너뛰었거나, 오류가 발생했거나, 알 수 없는 상태를 반환하는 테스트 수를 보여 줍니다.

   ```
   {
     "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": []
   }
   ```

1. 보고서의 테스트 케이스에 대한 정보를 나열하려면 다음 명령을 실행합니다. `<report-arn>`은 보고서의 ARN을 지정합니다. 선택 사항인 `--filter` 매개변수의 경우 하나의 상태 결과(`SUCCEEDED`, `FAILED`, `SKIPPED`, `ERROR` 또는 `UNKNOWN`)를 지정할 수 있습니다.

   ```
   aws codebuild describe-test-cases \
       --report-arn <report-arn> \
       --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWN
   ```

    출력은 다음과 같습니다.

   ```
   {
     "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>"
       }
     ]
   }
   ```