ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-使用Jacoco和Circle CI生成测试覆盖率失败

2019-11-08 11:34:22  阅读:269  来源: 互联网

标签:jacoco circleci java android


我正在尝试使用此文件config.yml在Circle CI中生成测试覆盖率,但是构建失败,并且显示无连接的设备.
以下是在Circle CI上生成的错误:

enter image description here

而且据我了解,Circle CI目前不支持仿真器.

以下是我的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 does not currently support Android模拟器.根据我的经验,即使有一个可行的方法,也不会长期有效. (链接从2018年1月17日开始).

话虽如此,仍然可以通过使用Firebase Test Lab来收集集成测试覆盖率的一个好方法.

关于如何实际使用CircleCI and Firebase Test Lab运行测试的资源多种多样.

设置项目以在Firebase Test Lab上运行测试后,您应该可以按照以下方式编辑项目:

>您将需要更新config.yml文件的Firebase测试任务.注意,我使用CIRCLE_BRANCH和CIRCLE_BUILD_NUM来确保结果在每次构建时都保存在结果存储区中的特定位置.您将要用实际的存储区位置替换YOUR_LOCATION,并用运行Firebase测试的设备替换DEVICE.

您还将需要用用于运行仪器测试的Jacoco命令替换LOCATION_OF_ANDROID_TESTS(您可以通过在本地运行仪器测试然后寻找此名称来找到它.)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}

>在集成测试运行之后(或之前,您可以选择),您将需要运行单元测试.
>单元测试运行后,您将需要运行合并报告Jacoco任务,以将单元测试覆盖率报告与集成测试覆盖率报告合并.

最后说明:为了在Firebase上将报告输出到测试设备上,我必须添加一个包含WRITE_EXTERNAL_STORAGE权限的调试清单.这是因为我的应用程序未在发行版本中使用此权限.如果您的应用程序已在使用此权限,则无需添加调试清单.

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

标签:jacoco,circleci,java,android
来源: https://codeday.me/bug/20191108/2007829.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有