簡體   English   中英

使用 Jacoco 和 Circle CI 生成測試覆蓋失敗

[英]Generate test coverage with Jacoco and Circle CI fails

我正在嘗試使用此文件config.yml在 Circle CI 中生成測試覆蓋率,但構建失敗並顯示沒有連接的設備。 以下是 Circle CI 上生成的錯誤:

在此處輸入圖片說明

根據我所讀到的,Circle CI 目前不支持 Emulators。

下面是我的config.yml文件:

version: 2
jobs:
  build:
    working_directory: ~/ConvergeLevelApp
    docker:
      - image: circleci/android:api-25-alpha
    environment:
      JVM_OPTS: -Xmx3200m
      CC_TEST_REPORTER_ID: 403xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ADB_INSTALL_TIMEOUT: 60
    steps:
      - checkout
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Download Dependencies
          command: ./gradlew androidDependencies

      - save_cache:
          paths:
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}

      - run:
          name: Setup Code Climate test-reporter
          command: |
                  curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
                  chmod +x ./cc-test-reporter

      - run:
          name: Run Tests
          command: ./gradlew lint test

      - store_artifacts:
          path: app/build/reports
          destination: reports

      - store_test_results:
          path: app/build/test-results

      - run:
          name: Generate JaCoCo report
          command: ./gradlew jacocoTestReport
      - run:
          name: Upload coverage to code climate
          command: |
                  export JACOCO_SOURCE_PATH=app/src/main/java
                  ./cc-test-reporter format-coverage app/build/reports/coverage/debug/report.xml -t jacoco
                  ./cc-test-reporter upload-coverage

CircleCI 目前不支持Android 模擬器。 根據我的經驗,即使有一種有效的方法,它也不會起作用很長時間。 (鏈接自 2018 年 1 月 17 日)。

話雖如此,您仍然可以收集集成測試覆蓋率的一個好方法是利用Firebase 測試實驗室

有關如何使用CircleCI 和 Firebase 測試實驗室實際運行測試的資源組合。

設置項目以在 Firebase 測試實驗室上運行測試后,您應該能夠按如下方式編輯項目:

  1. 您需要更新 config.yml 文件的 Firebase 測試任務。 請注意,我使用CIRCLE_BRANCHCIRCLE_BUILD_NUM來確保結果保存在每次構建的結果存儲桶中的特定位置。 您需要將YOUR_LOCATION替換為您的實際存儲桶位置,並將DEVICE替換為您正在運行 Firebase 測試的設備。

    您還需要將LOCATION_OF_ANDROID_TESTS替換為用於運行您的儀器測試的 Jacoco 命令(您可以通過在本地運行您的儀器測試然后查找此名稱來找到它。) gsutil命令設置為從存儲桶中提取覆蓋文件它們被流式傳輸,然后刪除存儲桶中的文件夾。 如果您使用gsutil -m -o命令,則可以更快地完成此操作。

    值得一提的是,這會將失敗構建的結果保留在存儲桶中(因此您可能需要將該命令移出以確保您的存儲桶不會塞滿數據)。

     sudo pip install -U crcmod sudo gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json sudo gcloud --quiet config set project ${GOOGLE_PROJECT_ID} sudo gcloud firebase test android run \\ --type instrumentation \\ --app PATH_TO_APK \\ --test PATH_TO_TEST_APK \\ --device DEVICE_OF_YOUR_CHOOSING \\ --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec" \\ --directories-to-pull=/sdcard \\ --results-dir=${CIRCLE_BRANCH}_${CIRCLE_BUILD_NUM} sudo gsutil -m cp -r -U gs://test-lab-YOUR_LOCATION/${CIRCLE_BRANCH}_${CIRCLE_BUILD_NUM}/DEVICE/artifacts/coverage.ec app/build/outputs/code_coverage/LOCATION_OF_ANDROID_TESTS/connected/coverage.ec sudo gsutil rm -r gs://test-lab-YOUR_LOCATION/${CIRCLE_BRANCH}_${CIRCLE_BUILD_NUM}
  2. 在集成測試運行之后(或之前),您需要運行單元測試。

  3. 單元測試運行后,您需要運行合並報告 Jacoco 任務,以便將單元測試覆蓋率報告與集成測試覆蓋率報告合並。

最后說明:為了在 Firebase 上的測試設備上輸出報告,我必須添加一個包含 WRITE_EXTERNAL_STORAGE 權限的調試清單。 這是因為我的應用程序在發布版本中沒有使用此權限。如果您的應用程序已在使用此權限,則無需添加調試清單。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

最近 CircleCI 提供了可用於運行 Android (UI) 測試的 Android 機器映像。 官方文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM