CircleCI에서 Firebase Test Lab 로봇 테스트 자동화

CircleCI에서 Android apk를 빌드할 때 Firebase Test Lab에 테스트를 던지고 싶을 때의 방법입니다.

대부분은 CircleCI 공식 페이지의 h tps : // / rc ぇ시. 이 m / 두 cs / 2.0 / ㅁ ㅁㅜㅜㅜㅜㅜㅜㅜ에 실려 있는 흐름입니다.

개요


  • 빌드된 apkgcloud 명령을 사용하여 던져
  • 결과가 출력될 때까지 기다린다
  • 결과가 Google Cloud Storage 버킷에 저장됨
  • 결과를 버킷에서 검색하고 Artifact로 저장

  • 라는 흐름이 됩니다.

    CircleCI의 Android 빌드용 이미지에는 Test Lab을 실행하는 데 필요한 gcloud 명령이 포함되어 있으므로
    이것을 사용하고 있는 경우는 다른 이미지를 사용하거나 할 필요는 없습니다. 일반 빌드에서 사용하고 있습니다 config.ymlTest Lab에 보낼 작업을 추가하면 괜찮습니다.

    전제



    먼저 릴리스 빌드를 수행하는 작업이 다음과 같이 보입니다.

    .circleci/config.yml
    jobs:
    
      buildRelease:
        <<: *defaults
        steps:
          - attach_workspace:
              at: ~/code
          - deploy:
              name: Build Release Apk
              command: ./gradlew :app:assembleRelease
          - store_artifacts:
              path: app/build/outputs/apk/
          - persist_to_workspace:
              root: ~/code
              paths:
                - app/build/outputs/apk
    

    나중에 다른 작업에서 Test Lab에 apk를 보낼 수 있도록
    여기서 persist_to_workspace 를 해서 빌드한 apk 를 작업공간에서 공통으로 참조할 수 있도록 해 두는 것이 필요합니다.

    Test Lab 작업 추가



    그런 다음 Test Lab에서 테스트할 작업을 추가합니다.

    .circleci/config.yml
    jobs:
    
      runRoboTest:
        <<: *defaults
        steps:
          - attach_workspace:
              at: ~/code
          - run:
              name: Authorize with gcloud
              command: |
                echo ${GCLOUD_SERVICE_KEY} | sudo gcloud auth activate-service-account --key-file=-
                sudo gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
          - run:
              name: Invoke Robo Test on Firebase Test Lab
              command: >
                sudo gcloud firebase test android run \
                  --app app/build/outputs/apk/release/app-release.apk \
                  --type robo \
                  --device model=hwALE-H,version=21,locale=ja,orientation=portrait \
                  --device model=j1acevelte,version=22,locale=ja,orientation=portrait \
                  --device model=shamu,version=23,locale=ja,orientation=portrait \
                  --device model=lucye,version=24,locale=ja,orientation=portrait \
                  --device model=sailfish,version=25,locale=ja,orientation=portrait \
                  --device model=sailfish,version=26,locale=ja,orientation=portrait \
                  --device model=walleye,version=27,locale=ja,orientation=portrait \
                  --device model=walleye,version=28,locale=ja,orientation=portrait \
                  --results-bucket cloud-test-${GOOGLE_PROJECT_ID} \
                  --timeout 5m
          - run:
              name: Collect Artifacts
              command: |
                sudo pip install -U crcmod
                sudo mkdir test_lab_results
                sudo gsutil \
                    -m cp \
                    -r -U `sudo gsutil ls gs://cloud-test-${GOOGLE_PROJECT_ID} | tail -1` test_lab_results/ \
                    | true
          - store_artifacts:
              path: test_lab_results/
    

    인증하고 테스트를 실행하고 결과를 Artifacts로 저장하는 작업입니다.

    여기서 ${GCLOUD_SERVICE_KEY} 야라 ${GOOGLE_PROJECT_ID} 그렇다면 수수께끼의 환경 변수가 등장하고 있네요.

    이는 사전에 자격 증명으로 Firebase 인증 키 JSON 및 Google Cloud Platform 프로젝트 ID를
    CircleCI 프로젝트 환경 변수를 콘솔에서 설정해야합니다.


    GOOGLE_PROJECT_ID는 GCP의 프로젝트 ID를, GCLOUD_SERVICE_KEY에는 자격 증명의 JSON을 넣습니다.

    그런 다음 Google Developer Console에서 Cloud Testing APICloud Tools Results API를 활성화하십시오.



    결과



    일단 설정이 끝나면 빌드를 실행하십시오 :



    인증 후 Test Lab을 실행하는 작업이 실행 중인지 확인할 수 있습니다.

    실행 중에도 작업 로그에 나열된 Firebase Test Lab 세부 정보 페이지에서 확인할 수 있습니다.
    ( Test results will be streamed to [...] 로 표시된 URL입니다).

    테스트 종료 후 결과는 세부 정보 페이지 외에도 Artifacts로 저장됩니다.



    주의점



    Test Lab의 작업 명령 중
    --device model=<MODEL_ID>,... --device model=<MODEL_ID>,...
    의 부분으로 테스트 대상의 디바이스를 복수 지정할 수 있습니다만, 여기의 MODEL_ID 의 확인 방법은 gcloud firebase test android models list 커멘드로 취득할 수 있는 MODEL_ID 입니다.

    예를 들어 Pixel 2에서도 물리적 장치의 MODEL_IDwalleye이고 가상 장치는 Pixel2이거나 합니다. Pixel2 그렇다고 결정해 가면, 이 커멘드의 결과를 보지 않으면 절대 모르기 때문에 주의입니다.
    gcloud 주위의 사용법에 대해서는 htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / st-b / an d-roi d / goman d-u 를 참조하는 것이 좋을 것입니다.

    테스트에 시간이 걸리거나 수수께끼에 실패하는 단말기도 있으므로, 여기는 한 번 시험해 시행착오할 필요가 있을 것 같습니다.

    좋은 웹페이지 즐겨찾기