インテグレーションテストについて

Flutter公式のドキュメント

https://docs.flutter.dev/testing/integration-tests

はじめに、テスト対象とするOSのバージョンとデバイスを決めてください。

デバイスやOSバージョンの普及率などから、テスト範囲を決められるといいと思います。

https://developer.apple.com/jp/support/app-store/

packages/skimie/integration_test/test_setting.dart

上記のファイルのコメントアウトを外すことで、テスト対象とすることができます。

iOSの場合

XcodeのインストールされているPCで行ってください。

テストの流れ

  1. 利用可能なエミュレータの情報を取得し、Mapに変換する

  2. テストに必要なデバイスがインストールされているかをチェックし、なければ追加する

  3. エミュレーターを起動し、テストする

  4. エミュレーターを終了し、キャッシュを削除する

  5. 3. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す

1. 利用可能なエミュレータの情報を取得し、Mapに変換する

final result = await Process.run('xcrun', ['simctl', 'list']);


上記のコードで、使用可能なエミュレーターの一覧の文字列が取得できるの、正規表現を使って、

Mapに変換する

2. テストに必要なデバイスがインストールされているかをチェックし、なければ追加する


test_setting.dart でテスト対象にしているOSバージョンのデバイスが 1. で作成したMapに存在するかをチェックする。

ない場合は、インストールする必要があるので、

final result = await Process.run(
  'xcrun',
  [
    'simctl',
    'create',
    targetDevice,
    targetDevice,
    'com.apple.CoreSimulator.SimRuntime.iOS-$major-$miner'
  ],
);


上記のコードで、追加する。

3. エミュレーターを起動し、テストする

// エミュレーター起動
await Process.run('xcrun', ['simctl', 'boot', device.id]);


上記のコードで、エミュレーターを起動する。

// テスト開始
final result = await Process.run(
  'flutter',
  [
    'test',
    'integration_test/app_test.dart',
    '--dart-define=FLAVOR=stg',
    '--dart-define=INTEGRATION_TEST=true',
    '-d',
    device.id,
  ],
);


上記のコードで、テストを開始する。

packages/skimie/integration_test/app_test.dart に書かれているテストが実行される。

4. エミュレーターを終了し、キャッシュを削除する

// シミュレーター終了
print('Test Device Shut Down');
await Process.run('xcrun', ['simctl', 'shutdown', device.id]);

// キャッシュの削除
await Process.run('xcrun', ['--kill-cache']);


上記のコードで、エミュレーターを終了し、念のため、キャッシュを削除しておく。

5. 3. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す

3〜5の操作をFor in で回しているので、指定されたテスト範囲が終了するまで、テストを回す。

Androidの場合


Android Studioをインストールしてある、PCで行ってください。

iOSの場合とテストの流れは、大きくは変わりません。

テストの流れ

  1. 利用可能なエミュレータの情報を取得し、Mapに変換する

  2. テストに使用するPCのCPUアーキテクチャを確認します

  3. テストに必要なデバイスがインストールされているかをチェックし、なければ追加する

  4. 必要なシステムイメージがインストールされているかチェックする、なければ追加する

  5. エミュレーターを起動し、テストする

  6. エミュレーターを終了する。

  7. 5. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す

1. 利用可能なエミュレータの情報を取得し、Mapに変換する

 final result = await Process.run('emulator', ['-list-avds']);


上記のコードで、使用可能なエミュレーターの一覧の文字列が取得できるの、正規表現を使って、

Mapに変換する

2. テストに使用するPCのCPUアーキテクチャを確認します

// CPUアーキテクチャを判別して、インストールするsystem imageを選択
Future<String> getSystemStringImagesType() async {
  if (Platform.isMacOS) {
    final result =
        await Process.run('sysctl', ['-n', 'machdep.cpu.brand_string']);
    if ((result.stdout as String).contains('Apple')) {
      return 'arm64-v8a';
    }
    return 'x86_64';
  }
  return 'x86_64';
}


Widndowの場合は、'x86_64'になり、Macは、Apple Silicon(M1など)の場合があるので確認が必要。

エミュレーターをインストールするときに指定する必要がある。

3. テストに必要なデバイスがインストールされているかをチェックし、なければ追加する


テストの対象になっているOSバージョンのエミュレーターがない場合は、インストールする。

await Process.run(
  'avdmanager',
  [
    'create',
    'avd',
    '-n',
    id,
    '-k',
    'system-images;android-$targetApi;google_apis_playstore;$systemImageType',
    '-d',
    targetDevice.deviceSetup,
  ],
);


上記のコードで、エミュレーターがインストールされる。

4. 必要なシステムイメージがインストールされているかチェックする、なければ追加する


テストの対象になっているシステムイメージのチェックをする

final result = await Process.run('sdkmanager', ['--list']);


上記のコードで、インストールされているシステムイメージのリストが取得できる。

正規表現を使用して、文字列を加工し、テストに必要なシステムイメージがあれば、インストールする

 // テストに必要なsystem-imageをインストール
  for (final systemImage in filteredLines) {
    await Process.run('sdkmanager', [systemImage]);
  }

5. エミュレーターを起動し、テストする

// エミュレーター起動
final process = await Process.start(
  'emulator',
  ['-avd', device.id, '-no-snapshot'],
);


上記のコードで、エミュレーターを起動。

// テスト開始
final result = await Process.run(
  'flutter',
  [
    'test',
    'integration_test/app_test.dart',
    '--dart-define=FLAVOR=stg',
    '--dart-define=INTEGRATION_TEST=true',
    '--device-id',
    deviceId
  ],
);


上記のコードで、テストを開始する。

packages/skimie/integration_test/app_test.dart に書かれているテストが実行される。

6. エミュレーターを終了する

await Process.run(
  'adb',
  ['-s', deviceId, 'emu', 'kill'],
);


上記のコードで、エミュレーターを終了。

7. 5. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す

5〜6の操作をFor in で回しているので、指定されたテスト範囲が終了するまで、テストを回す。

インテグレーションテストの追加


繰り返しているテストは、packages/skimie/integration_test/app_test.dart に書かれているので、

テストはこのファイルに追加する。

intro_test や email_test の様にそれぞれのテストをディレクトリで分けて、追加していくと、

可読性が良いかと思います。

import 'package:authenticator/authenticator.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:integration_test/integration_test.dart';
import 'package:skimie/main.dart' as app;

import 'login_page/email_login_test.dart' as email_login;
import 'intro_page/intro_test.dart' as intro_test;

// Test実行
// dart integration_test/test.dart

// 実機やエミュレーターでテストする場合は、localeに気をつけてください。
// エミュレーターの場合、'en'になっていることが多いかと思います。

void main() async {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();

  testWidgets('Integration Test', (
    WidgetTester tester,
  ) async {
    // アプリ起動
    await app.main();
    await tester.pumpAndSettle();

    // ログアウトしておく
    final container = ProviderContainer();
    final authenticator = container.read(authenticatorProvider);
    await authenticator.signOut();
    await tester.pumpAndSettle();

    // イントロ画面の動作確認
    await intro_test.test(tester);
    // Emailログインのテスト
    await email_login.test(tester);
  });
}
1

Game Up Your Life.

Skimieアプリをダウンロードして、タスク管理をゲーム化しよう

Skimieは、仕事や勉強にゲーミフィケーションを取り入れ、モチベーションアップをサポートする情報管理サービスです。

新着記事

誰もいない…?

一番上の投稿が3ヶ月前…

『ワードカスケード』って知ってますか?

ブックマークの整理をしていた際に、以下のサイトが目に留まりました。だいぶ前になるのですが、気になってブックマークしたのを思い出しました。https://river.tango-gacha.com/Cascade(カスケード)とは小滝・階段状に連続する滝のことを意味するようです。アイディア出しや頭の中を整理する時に、しばらく眺めるのは効果ありそうですね。クリックすると背景色が変わったり、しばらくすると左下にXへ遷移できるアイコンが出てきたりとする楽しい動きも良いですね!

Stable Diffusion オススメアプリと使い方

初心者から上級者まで、無料でもアニメ系のイラストを描きやすい、個人的にオススメなStable Diffusionベースアプリです。 【DaysAI】 レベルアップ報酬が手に入るようになったことで、無料〜ゴールド課金で充分使えるアプリです。 (プレミアム課金は費用対効果的によほど使い倒さない限り他のアプリの年額と同時に使った方が良いです) 「うちの子」と付くアプリだけあり、作成したキャラをベースに描いてくれるので、髪型、表情、服装の一部を修正もできます。 日本語、ポジティブプロンプトやしきい値対応。有料会員になればネガティブプロンプトにも対応します。 「(全身)、上から、ビューアを見る」とかでいけます。

Skimie のバトルのお気に入りパーティ

みなさんのお気に入りのキャラクターはなんですか? 自分は ・タダシ ・ヴァール ・羽柴シバ です。 ![](https://skimie.com/uploads/u/IEozBO1uEfWNYUwdTgAeADBUU4F3/img/090938062c2ca448d931523f898d4b4a229dc0f3833b087fe.png)

Days AI 7/27 挑戦分

使用アプリ:Days AI テーマ:「夏の温泉」 テーマに組み込まれているはずの浴衣が吹っ飛びました。多分、表情や髪型描き込み過ぎました…。 このアプリの仕様上、キャラの雛形はあるしので、髪の纏め方も「花の髪飾り」と「まとめ上げたポニーテール」くらいで良かったんだろうと反省…。 夏の温泉で足湯&冷酒呑んで酔っ払ってる、オッサン寄りな亜人種イケオジを描きたかっただけなんです…。

使い方がわからない!助けて!

使う練習であげてみました。 このアプリまだ使い方が わからないので ヒントをもらえると嬉しいです。

本日も毎日1筆です♪

![](https://skimie.com/uploads/u/8N0K1D3KdpeWs9IUaBbNTtqmjmv2/img/072628348c2ca448d931523f898d4b4a229dc0f3833b087fe.png) ゲーム、OMORIのファンアートです。

生成AI検索『Perplexity』とは?

『Perplexity』というサービスを耳にして、とても気になったので調べてみました。検索に利用できるサービスで、Google検索よりも便利とか、、、実際に利用してみた感じ、とても便利そうです!『Perplexity』とは?AI チャットボットを活用した調査および会話型検索エンジンのこと。「Perplexity AI」は、元Google AI研究者らによって提供されるAIアシスタントです。参考ページhttps://www.sbbit.jp/article/cont1/134482https://meet.acesinc.co.jp/blog/perplexityai/運営元:Perplexity AI, Inc.設立:2022年8月所在地: アメリカ合衆国に拠点事業内容:会話型人工知能(AI)を専門とするソフトウェア会社会話型AIを用いた回答エンジンを提供。Perplexity AIの特徴情報源がわかる自動で情報源が表示される。検索範囲を絞ることができる「YouTubeから」「学術論文から」など、検索範囲をプラットフォームやカテゴリに絞ってリサーチができる。目的により最適な情報源を選ぶことが可能です。自動で要約してくれる返答の文章を箇条書き形式で端的にまとめて生成がされる。最新データを基にした回答が可能インターネット上の情報から回答を生成するブラウジング機能が搭載されている。日本語にも対応しているスマホアプリで利用ができる『Perplexity』のURLhttps://www.perplexity.ai/

色覚検定3級クイズについて

何問かは伏せますが、「敵を警戒させる色」で、誤入力かと思いますが、同じ回答が2つあります。 正解は上の方です。これは問題側にミスがあるのでネタバレしていいかと思い描きました。 普段私は、短編小説(SS)、小説、AI生成イラストで自分のキャラクターの可視化などしています。

お気に入りの謎解きイベント

西武線沿線の駅周辺を散策しながら謎を解き明かしていく周遊型の謎解き宝探しイベントがやっていて、ここ3年くらい参加しています。Webページを確認すると、2019年より毎年開催しているとのことです。こちらイベントですが参加は無料!※ただし、西武線沿線でたくさん駅を乗り降りするため、西武線全線を自由に乗り降りできる切符を購入する必要があります。【2024年】WEST CODE 第六弾 見知らぬ絵日記と約束の列車期間:2024.4.26~9.16https://www.seiburailway.jp/newsroom/news/20240417_WESTCODE/西武線の色々な駅を知れる良い機会で、子供を含めて家族で参加しています。駅で冊子が配られているので、シーズンの休日は多くの参加者を目にするイベントです。謎のレベルは高めで、去年はゴールできなかったので、今年こそはクリアしたいです!

LINE新機能「スタンプアレンジ機能」とは?

5/8より、複数のLINEスタンプを組み合わせて送信できる機能がスタートしました!簡単に利用が出来て楽しいです。参考ページhttps://news.yahoo.co.jp/articles/695c6ea72b6a7a6746a0af4fd8376c8f34dfdd43やり方はとても簡単で、スタンプを長押しすると複数を選択できるモードになります。組み合わせたいスタンプを選択し、後は自由にレイアウトして送るだけです。以下、注意点です。スタンプアレンジできる物とできない物があるパソコンは、送信も表示もできない

私なりの Skimie の使い方。ゲーミフィケーションで楽しく日々のタスク管理や備忘録。

Skimie というこのサービス。まだ、色々な機能が成熟してないようだがゲーミフィケーションとタスク管理の組み合わせは面白いなと思って使ってみています。主な使い方は・タスク管理機能日々のタスクを管理するのはもちろん。買い物リストなどとしても活用しています。iPhone でいうリマンイダーみたいな使い方。・ナレッジ機能思いついたことなど備忘録をつらつらとメモするのに活用しています。基本的には非公開にして、自分用のメモです。今回はみなさんが活用するヒントになればと思い、ナレッジを一般公開してみます。タスクをこなしたり、ナレッジを書き溜めるとコインがもらえるので、それを使ってとりあえずキャラクターを育てるために日々コツコツと続けてます。Skimie を使うヒントになれば幸いです。

複数の写真を1つにする方法が知りたい

Xで投稿する際に、やりたいと思ったので調べてみました。意外と簡単な方法が見つからなかったので、もう少し調べたり、周りに聞こうと思います。とりあえずは、Androidユーザーの私が一番簡単にできそうな方法をご紹介します。参考サイトhttps://support.google.com/photos/answer/12637115?hl=ja&co=GENIE.Platform%3DAndroidツール「Googleフォト」アプリ機能「コラージュ」という機能を利用します。手順は参考サイトに記載ありますが、とても簡単です。テンプレートは無料なのは4つほどです。私のスマホにあるラーメン画像だとこんな感じ。

イオンクレジットカードの付帯保険「ショッピングセーフティ保険」が気になる

最近、イオンクレジットカードの広告を見て、気になる内容があったのでピックアップします。それは、イオンクレジットカードの付帯保険で「ショッピングセーフティ保険」のサービスです。とてもお得なサービスなので、他のクレジットカードなどにも同様のサービスがないか調べたいです。また、スマホやパソコンなどWeb購入する機会もあるので、ぜひ利用したいと思います。▶公式サイトhttps://www.aeon.co.jp/service/safety/イオンクレジットカードの「ショッピングセーフティ保険」はどんなサービスこちらの記事の最後に公式サイトのスクショも添付します。約半年間になりますが、偶然による事故の補償するサービスです。【対象】イオン銀行が発行したクレジットカードでクレジット決済する5,000円以上の商品【対象範囲】偶然による事故破損事故火災事故盗難事故【保証期間】購入日から180日以内

複数のPDFファイルを結合したい

最近、複数のPDFの資料を確認する作業があり、PDFを結合するサービスを探していました。検索すると、Webサービスを利用してオンラインでやる方法とツールをインストールする方法の2つがあるようです。今回は、ツールをインストールしてみました。見つけたツールCubePDF Pagehttps://www.cube-soft.jp/cubepdfpage/評判以下のサイトを参考にしました。ざっと読んでみると評価は良さそうな感じでした。https://www.itreview.jp/products/cubepdf-page/reviews感想利用方法がとてもシンプルで、特にマニュアルことなく利用ができました。注意点こちらのソフトをインストールすると、一緒に「CubeWidet」というソフトもインストールされるようです。こちらは、最小化してニュースが表示するようになり気になったのでアンインストールしました。補足こちら、pdfファイルの他にpngファイルでも同様の事ができないか試してみたところ対応できました!

ウェブサイトのパスワードをスマートに管理したい

色々なWebサービスを利用していると、パスワードの管理は困りませんか?最近、Googleで「Google パスワード マネージャー」というサービスがあることを知りました。パスワードを考えたり、メモしたり、管理したり、思い出したりするストレスから解放されるので、とても便利なサービスなので、ぜひ活用しましょう。公式サイトhttps://support.google.com/chrome/answer/95606?hl=JA&ref_topic=7438325サービス概要Chromeを利用して様々なサイトのパスワードを保存することができますパスワードの保存方法Chromeにて、ウェブサイトで新しいパスワードを入力すると、Chromeでパスワードを保存するかダイアログが表示されますので、こちらで [保存] をクリックするだけです。保存したパスワードの利用方法パスワード保存したウェブサイトのログインフォームを表示すると、自動的に入力されます。便利な点パスワードを覚える必要がないGoogleアカウントに連携しているため、スマホ・パソコンのどちらでもパスワード管理ができる操作がとても簡単

詳細を見る
soft
Web development courses
おすすめのテレビゲーム機
Green energy consulting
Home automation systems
Smart grid solutions
Web hosting providers
Eco friendly appliances
ソフトウェア
Website performance optimization tools