flutter_extreme_test_sample

Flutter Advent Calendar 2021 | Calendar2 day15

はじめに

このドキュメントは、Flutter Advent Calendar 2021 のカレンダー2の day15 です。

DevFest Kyoto 2021 - Flutterテスト講座 の セッション テスト設計できるようになろう
Widget testで状態プロパティを参照する - エクストリームテストサンプルプロジェクト をベースに、
GitHub Actions を使い、Pull requestイベントで flutter test test/を実行するようにしたレポートです。
セッション内容については、スライド資料を御参照ください。

Flutterプロジェクト-リポジトリの GitHub Actions 対応については、
flutter github actions でググれば、既に多くの方々が資料を公開されていますので、
レポートでは、主に nektos/act を使ったローカルでの GitHub Actions ワークフロー実行について紹介します。

act pull request
act によるローカル GitHub Actions ワークフロー実行例

GitHub Actions 設定

Quickstart for GitHub Actions - GitHub Docs に従い、GitHub Actions ワークフローを作ります。

  1. GitHubのリポジトリに .github/workflows ディレクトリを作成します。

  2. yaml 形式でタスクを記述する任意名のワークフローファイルを追加します。
    Widget testを実行させるので extreme_widget_test.yml としました。

  3. ワークフローファイルに CI/CD ⇒ 継続的インテグレーション/継続的デリバリーのタスクを記述します。
    Pull Requestイベントで、flutter環境を構築してflutter test test/を実行するタスクを記述しました。

  4. その他、GitHub Actionsの詳細については、Learn GitHub Actions - GitHub Docs を参照下さい。

name: extreme widget test

on:
  pull_request:
    types: [opened, synchronize]
jobs:
  extreme_widget_test:
    name: flutter extreme widget test
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: set up repository
        uses: actions/checkout@v2
      - name: set up java
        uses: actions/setup-java@v2
        with:
          distribution: 'zulu'
          java-version: '11'
      - name: set up flutter
        uses: subosito/flutter-action@v1
        with:
          channel: 'stable'
          flutter-version: '2.8.0'
      - name: flutter pub get
        run: flutter pub get

      # 全てのエクストリームWidgetテストを実行
      - name: flutter exstreme widget test
        run: flutter test test/

pull request で flutter test test/ が実行されるかチェック

GitHub (GitHub Actions)

ローカルでの GitHub Actions ワークフロー実行

act とは何か

docker インストール (act をインストールする前に)

上記の資料に従った、Ubuntuへの docker-ce インストール手順

1. Uninstall old versions  
   $ sudo apt-get remove docker docker-engine docker.io containerd runc  

2. Set up the repository  
   $ sudo apt-get update  
   $ sudo apt-get install ca-certificates curl gnupg lsb-release  

3. Add Docker’s official GPG key:
   $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 安定版リポジトリを選択
   $ echo \
     "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. Install Docker Engine
   $ sudo apt-get update
   $ sudo apt-get install docker-ce docker-ce-cli containerd.io

6. インストール確認
   $ docker --version
   Docker version 20.10.11, build dea9396

各プラットフォーム用の act インストールコマンド。

# インストール確認
$ act --version
act version 0.2.25

$ which act
/usr/local/bin/act

act コマンドを使ってみる。

~/.actrcファイルの設定例

-P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest
-P ubuntu-20.04=ghcr.io/catthehacker/ubuntu:act-20.04
-P ubuntu-18.04=ghcr.io/catthehacker/ubuntu:act-18.04
# グループへのユーザー所属のない状況で、sudo なしで実行
$ docker images
# permission denied とされてエラーになる。

# docker グループ確認(ユーザーの所属なし)
$ getent group docker
docker:x:998:

# docker グループにユーザー(robo)を所属させる。(実行時にパスワード入力が求められます)
$ sudo gpasswd -a robo docker

# docker グループ確認(ユーザー所属あり)
$ getent group docker
docker:x:998:robo

# PC再起動後に実行
$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

# 注意)docker グループに自分を所属させるためセキュリティ的に問題があります。
# gpasswd コマンドの詳細や、ユーザーをグループから外すには下記を参照下さい。
#【 gpasswd 】コマンド――ユーザーが所属するグループを管理する
# https://atmarkit.itmedia.co.jp/ait/articles/1612/12/news016.html

act によるローカル GitHub Actions ワークフロー実行

act pull request

エクストリームテストについて

希望的観測

まとめ

セッション テスト設計できるようになろう
Widget testで状態プロパティを参照する - エクストリームテストサンプルプロジェクト をベースに、
GitHub Actionsnektos/act を使い、Pull requestイベントで flutter test test/を実行するようにしたレポートは以上です。

謝辞