CircleCI в настоящее время не поддерживает эмуляторы Android.По моему опыту, даже когда есть тот, который работает, он не будет работать очень долго.(Ссылка от 17 января 2018 г.).
С учетом вышесказанного, хорошим средством, с помощью которого вы все еще можете получить охват интеграционных тестов, является использование Firebase Test Lab .
Существует множество ресурсов для того, как на самом деле запускать ваши тесты, используя CircleCI и Firebase Test Lab .
После того, как вы настроите проект для запуска ваших тестов в Firebase Test Lab, выдолжен иметь возможность редактировать проект следующим образом:
Вам необходимо обновить задачу Firebase Testing вашего файла config.yml.Обратите внимание, что я использую CIRCLE_BRANCH
и CIRCLE_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}
После (или до вашего выбора) интеграционных тестов вы запуститехотите запустить свои юнит-тесты.
- После того, как юнит-тесты будут выполнены, вам нужно будет запустить задачу комбинированного отчета Jacoco, чтобы объединить отчеты о покрытии модульных тестов с отчетами о покрытии интеграционных тестов.
Заключительное примечание. Чтобы отчеты выводились на тестовое устройство во время работы в Firebase, мне пришлось добавить манифест отладки, включающий разрешение WRITE_EXTERNAL_STORAGE.Это связано с тем, что мое приложение не использует это разрешение в сборках выпуска. Если ваше приложение уже использует это разрешение, нет необходимости добавлять манифест отладки.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />