Куток Ігоря

Додаємо тести Флаттер застосунку в Гітлаб пайплайн

Опубліковано

Результати Флатер тестів в Гітлабі

Сподіваюсь цей сніпет збереже Вам і мені майбутьному 5 хвилин при наступному сетапі флатер додатку.

зд;нч?🤔

В .gitlab-ci.yml

image: instrumentisto/flutter:latest
stages:
  - test
test:
  stage: test
  before_script:
    - export PATH="$PATH":"$HOME/.pub-cache/bin"
    - flutter pub get
    - flutter clean
    - flutter pub global activate junitreport
    - flutter pub global activate cobertura
  script:
    - flutter test --coverage --machine | tojunit -o report.xml
    - genhtml coverage/lcov.info --output=coverage
    - cobertura convert
  coverage: '/^\s*lines\.+: (\d+\.\d+)% .*/'
  artifacts:
    when: always
    paths:
      - report.xml
      - coverage/
    reports:
      junit:
        - report.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura.xml
    expire_in: 1 week

Трошки пояснень

- export PATH="$PATH":"$HOME/.pub-cache/bin" - Потрібно аби дати змогу скрипту викликати додатки які ми встановлюємо глобально нижче.

- flutter pub get - Скоріш за все тобі потрібні твої пакети аби запустити тести.

- flutter pub global activate junitreport - Бібліотека що зконвертує результати дартовських тестів в junit формат зрозумілий Гітлабу.

- flutter pub global activate cobertura - Бібліотека що зконвертує звіт покриття формату lcov, який використовується Дартом, в cobertura.xml зрозумілий Гітлабу.

| tojunit -o report.xml - власне сама конвертація тестів. Звіт, за замовчанням, буде в %project_root%/report.xml, ви, звичайно ж, можете змінити це, але не забудьте тоді підправити і artifacts.

- genhtml coverage/lcov.info --output=coverage - Конвертація Дартовського звіту покриття в xml звіт. За замовчанням Дарт генерує звіт в coverage/lcov.info. Команда genhtml ж зконвертує lcov.info в xml зрозумілий cobertura`і. Для цього вам буде потрібен застосунок lcov. Я використовую докер імідж instrumentisto/flutter який вже містить цей застосунок.

cobertura convert - Генерає кінцевий результат. Cobertura згенерує файл під назвою cobertura.xml в теці вказаній в команді, в нашому випадку це %project_root/coverage/.

coverage: '/^\s*lines\.+: (\d+\.\d+)% .*/' - Регулярка яка парсить лог и відтягує звідти загальний відсоток покриття проекту. Ця цифра буде вказана в результатах пайплайну і в графіку покриття на сторінці аналітики репозиторію. (Див. зображення нижче, але не саму цифру. Прошу 🫠) Відсоток покриття в джобі Відсоток покриття в аналітиці репозиторію

В artifacts ми пояснюємо гітлабу де знайти попередньо згенеровані звіти та що кожен з них містить. Зміни імена файлів тут якщо змінював їх в самих командах.

В результаті ви отримуєте результати кожного тесту окремо в пайплайні, з розбивкою по часу який кожен тест виконується. Ну і покриття буде підсвічуватись в РМ діфі і в пайплайні також.