我正在尝试使用此文件config.yml
在Circle CI中生成测试覆盖率,但是构建失败,并且显示“没有连接的设备”。
以下是在Circle CI上生成的错误:
据我了解,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
答案 0 :(得分:3)
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
。
您还希望将LOCATION_OF_ANDROID_TESTS
替换为用于运行仪器测试的Jacoco命令(您可以通过在本地运行仪器测试然后查找此名称来找到它。)gsutil
命令设置为从存储流的存储桶中提取coverage文件,然后删除存储桶中的文件夹。如果使用gsutil -m -o
命令,则可以更快地完成此操作。
值得一提的是,这将使构建失败的结果保留在存储桶中(因此,您可能需要移出该命令,以确保存储桶中不会出现数据过多的情况)。< / strong>
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}
在集成测试运行之后(或之前,您需要进行选择),您将需要运行单元测试。
最终注意:为了在Firebase上将报告输出到测试设备上,我必须添加一个包含WRITE_EXTERNAL_STORAGE权限的调试清单。这是因为我的应用程序未在发行版本中使用此权限。如果您的应用程序已在使用此权限,则无需添加调试清单。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
最近 CircleCI 提供了可用于运行 Android (UI) 测试的 Android 机器映像。 Official documentation