1. HOME
  2. ブログ
  3. IT技術
  4. [Flutter] integration test でiOS/Androidアプリのテストを自動化!(導入編)

[Flutter] integration test でiOS/Androidアプリのテストを自動化!(導入編)

はじめに

皆さん、テスト、書いてますか。

ユニットテストならぼちぼち、E2Eテストは全く未経験!な自分が
Flutter integration testでFlutterアプリのE2Eテストを自動化してみました。
・どうやって導入する?
・実際どんな感じ?
を纏めて見たので、結合テストの自動化に興味がある方はぜひ参考にしてみてください!

初めてでも”理解る”E2Eテスト

ユニットテストでは機能単位でテストを行いますが、
E2Eテストは、全システムを結合した状態で入力を行うことで、システム全体のテストを行います

Flutter integration testでは、E2Eテスト(もちろん結合テストでも)の入力にあたるFlutterアプリのユーザー操作部分を自動化することができます!

Flutter integration test とは

FlutterSDKに含まれている、Flutter標準のテスト機能(flutter公式ドキュメント)です。
以下は、他にもいくつか自動テストツールを試した上での感触です。

メリット案外Flutterに正式対応している自動テストツールは少ない(2023年7月現在)ので、公式なのは保守を考えても嬉しい…!
同じテストコードでiOS/android両方のテストが可能。UI要素の取得も容易です!
デメリットDartで記述を行うため、非技術者がテストを書くのはかなり難しい
integration_testから、Flutterアプリ以外の他アプリやOS機能を触れないため、色々と回避策が必要

導入方法

今回は、Flutter公式のサンプルアプリに導入して、iOS/Androidエミュレータでテストを成功させることを目標にします。
もちろん既存のアプリにも導入可能ですが、色んな機能が実装されているアプリでテストを通すためにはなかなか大変なので…ぜひ一度、サンプルアプリでどんな風に動くのか見てみてください!

※flutter driverパッケージを利用する方法もありますが、flutter driverはintegration_testパッケージができる前に使われていたもので、基本的にはintegration_testに置き換わっています

flutterプロジェクトを準備

好きなディレクトリで以下コマンドを実行して、プロジェクトを準備します

上で作ったFlutterプロジェクトのpubspec.yamlファイルを開き、
dev_dependenciesの項目にintegration_testパッケージを追加します。

※integration_testパッケージは元々FlutterSDKに含まれているので、追加でインストールなどは不要です
ここで依存関係を追加しておくだけで使用できます!

テストファイルの追加

flutter integration testは「integration_testフォルダ内の、<test name>_test.dartという命名のファイル」をテストファイルとして認識します

ですので、プロジェクトフォルダの直下にintegration_testフォルダを作成し、その中にテストファイルを作成します。

テストコードを書く

サンプルアプリに対応したテストコードもサンプルとして用意されているので、こちらを利用します。
テストシナリオとしては、「最初0と表示されていたカウンターが、インクリメントボタンを押したあと1になっているか」を確認します。

3行目のimport 'package:introduction/main.dart';は自分のプロジェクトのmain.dartを指定するように修正します

テスト実行

iOSシュミレータ、Androidエミュレータを起動した状態で下記コマンドを実行すると、
アプリのビルド、エミュレータへのインストール、テストの実行まですべて自動で行われます

ターミナル上で All tests passed! が表示されれば成功です!

まとめ

導入自体は思った以上にシンプルに終わりました。
ですが、実際のケース作成や保守が大変なのがテスト…次回は、integration testのテスト作成のポイントをまとめます!

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア