Интеграционные тесты Flutter с Travis CI - PullRequest
0 голосов
/ 02 марта 2020

1. Краткое описание проблемы

Я бы хотел установку CI Travis, которая позволила бы мне запускать flutter driver тесты в средах Android и iOS. Чтобы это произошло, я ожидаю, что мне как-то придется установить Flutter Android и iOS в разных средах.

2. Что у меня есть

Большинство постов, которые я смог найти в этой топи c, ужасно устарели или содержат невероятно сложные настройки. Некоторые из тех, которые продолжают появляться в моих поисках:

3. Эскиз того, что я имею в виду

Шаги script и install в примере, который я упоминал ранее, можно заменить на jobs на stage s. Таким образом, каждый этап будет представлять один вид шага. Этапы Unit и Widget на одном, интеграционные тесты на Android и iOS на двух других, что похоже на то, что показывают образцы Мориса МакКейба и Флаттера. Например:

jobs:
  include:
    - stage: Flutter Test
      language: dart
      os: linux
      install: git clone $FLUTTER_GITHUB -b stable
      before_script:
        - ./flutter/bin/flutter doctor
      script: 
        - ./flutter/bin/flutter test
    - stage: Integration Test on Android
      os: linux
      dist: trusty
      language: android
      android: # the things here are what probably needs to be fixed
        components:
          - build-tools-28.0.3
          - android-28
      install: git clone $FLUTTER_GITHUB -b stable
      before_script:
        - ./flutter/bin/flutter doctor
      script: 
        - ./flutter/bin/flutter drive --target=test_driver/app.dart

Если бы я мог создать stage для задачи dartfmt, что также было бы неплохо с точки зрения организации.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы можете взглянуть на этот проект

Я думаю, что он имеет все компоненты ты ищешь. Это пакет Dart, в решении которого есть пример интеграционного проекта для Flutter.

Конвейер CI построен для Travis CI (в основном на основе статьи Мориса МакКейба ). Возможно, файл travis.yml содержит все необходимые разделы.

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

1. Обзор

Спасибо @MirceaMatei и Морису МакКейбу за помощь в этом.

  1. Я еще не смог заставить Android Интеграционные тесты работать (последний stage кода ниже), но по крайней мере iOS работает.
    • Android гораздо сложнее понять из-за разных версий и лицензий, что Apple делает намного лучше.
  2. Код, который вы найдете ниже, является частью Настройка моно репо, над которой я работаю.
    • Структура папок состоит из папок app и packages.
  3. Я еще не сегментировал покрытие кода этими двумя папками, поэтому в данный момент эта настройка перезаписывает покрытие кода из одной папки в другую.
  4. Использование верхнего уровня Секция install заставляет Трэвиса повторить эту настройку для каждого этапа, чтобы избежать необходимости повторять эту процедуру для каждого этапа.

Я поделюсь своей текущей (хотя и неполной) настройкой ниже, , но с помощью этого Github Gist будет происходить постоянное улучшение, которое является гораздо лучшим способом взаимодействия с сообществом для улучшения кода, чем StackOverflow - это не его цель.

В целом, я думаю, что Travis CI действительно бросает мяч, когда дело доходит до Флаттера - и, возможно, Android в целом. Более простая альтернатива, которая была раскручена многими практикующими, с которыми я недавно общался, это Codemagi c, которая также предлагает подписывание кода и автоматическое развертывание в магазинах приложений iOS и Android.

2. Полезные ресурсы

Мне не очень понравилась документация Travis для интеграционных тестов. Люди, создающие чистые Android приложения, сталкивались с подобными проблемами.

В любом случае, вот некоторые полезные ресурсы, которые я нашел во время моих поисков:

  1. Комментарий к проблеме "Ошибка: Идентификатор цели недействителен. Используйте 'android список целей ", чтобы получить идентификаторы цели."
  2. «Неверный --abi armeabi-v7a для выбранной цели» с API Google
  3. Есть ли способ запустить android эмулятор в сборке Travis CI?
  4. Travis-CI Android 28 licenses have not been accepted
  5. Образцы флаттера Настройка Travis
  6. @ Рекомендация по настройке МирчиМатея
  7. Здание Travis Android Документация по проектам
  8. Единичные и интеграционные тесты Мориса МакКейба со статьей Трэвиса на Medium

3. Код

Пожалуйста, не публикуйте здесь предложения по улучшению кода, но в Github Gist . я буду обновлять код yaml под собой каждый раз время полезной итерации.

language: dart

env:
  global:
    - DARTSDK=./flutter/bin/cache/dart-sdk/bin
    - DARTFMT=$DARTSDK/dartfmt
    - FLUTTER=./flutter/bin/flutter
    - FLUTTER_UP=../flutter/bin/flutter
    - FLUTTER_GITHUB=https://github.com/flutter/flutter.git
    - CODECOV=https://codecov.io/bash
    - PACKAGES=packages
    - APP=app
    - ANDROID_API=28

install:
  - git clone $FLUTTER_GITHUB -b stable --depth 1
  - $FLUTTER doctor
  - $FLUTTER pub get

jobs:
  include:
    - stage: Formatting
      script:
        - $DARTFMT -n $PACKAGES --set-exit-if-changed

    - stage: Packages Flutter Test
      script:
        - $FLUTTER test --coverage $PACKAGES
      after_success:
        - bash <(curl -s $CODECOV)

    - stage: App Flutter Test
      script:
        - cd $APP
        - $FLUTTER_UP test --coverage
      after_success:
        - bash <(curl -s $CODECOV)

    - stage: iOS Integration Tests
      os: osx
      osx_image: xcode11
      before_script:
        - open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
        - export HOMEBREW_NO_AUTO_UPDATE=1
        - brew install libimobiledevice
        - brew install ideviceinstaller
        - brew install ios-deploy
        - brew install cocoapods || echo 'ignore exit(1)'
        - brew link --overwrite cocoapods
      script:
        - cd $APP
        - $FLUTTER_UP driver --target=test_driver/app.dart77

    - stage: Android Integration Tests
      language: android
      dist: trusty
      android:
        components:
          - tools
          - platform-tools
          - build-tools-25.0.3
          - android-24
          - android-22
          - extra-google-google_play_services
          - extra-google-m2repository
          - extra-android-m2repository
          - sys-img-armeabi-v7a-android-22
      licenses:
        - 'android-sdk-preview-license-52d11cd2'
        - 'android-sdk-license-.+'
        - 'google-gdk-license-.+'
      before_install:
        - yes | sdkmanager "platforms;android-28"
        - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a -c 32M
        - emulator -avd test -no-audio -no-window &
        - android-wait-for-emulator
        - adb devices
        - adb shell input keyevent 82 &
      script:
        - $FLUTTER --version
        - $FLUTTER doctor
        - cd $APP
        - $FLUTTER_UP devices
        - $FLUTTER_UP driver --target=test_driver/app.dart
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...