Сгенерировать тестовое покрытие с ошибками Jacoco и Circle CI - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сгенерировать тестовое покрытие в Circle CI с этим файлом config.yml, но сборка завершается неудачно и появляется сообщение Нет подключенных устройств.Ниже приведена ошибка, сгенерированная на 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

1 Ответ

0 голосов
/ 18 апреля 2019

CircleCI в настоящее время не поддерживает эмуляторы Android.По моему опыту, даже когда есть тот, который работает, он не будет работать очень долго.(Ссылка от 17 января 2018 г.).

С учетом вышесказанного, хорошим средством, с помощью которого вы все еще можете получить охват интеграционных тестов, является использование Firebase Test Lab .

Существует множество ресурсов для того, как на самом деле запускать ваши тесты, используя CircleCI и Firebase Test Lab .

После того, как вы настроите проект для запуска ваших тестов в Firebase Test Lab, выдолжен иметь возможность редактировать проект следующим образом:

  1. Вам необходимо обновить задачу 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}
    
  2. После (или до вашего выбора) интеграционных тестов вы запуститехотите запустить свои юнит-тесты.

  3. После того, как юнит-тесты будут выполнены, вам нужно будет запустить задачу комбинированного отчета Jacoco, чтобы объединить отчеты о покрытии модульных тестов с отчетами о покрытии интеграционных тестов.

Заключительное примечание. Чтобы отчеты выводились на тестовое устройство во время работы в Firebase, мне пришлось добавить манифест отладки, включающий разрешение WRITE_EXTERNAL_STORAGE.Это связано с тем, что мое приложение не использует это разрешение в сборках выпуска. Если ваше приложение уже использует это разрешение, нет необходимости добавлять манифест отладки.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...