Test ButlerとはAndroid用のオープンソースのテスティングツールである。開発者がいくつものテスティング環境設定をプログラムで制御できるようにすることで、確実にUIテストを実行できるようにするためのものだ。LinkedInのエンジニアでTest Butlerの開発者であるDrew Hannay氏は書いている。
Hannay氏は2014年のGoogleによるGoing Green: Cleaning up the Toxic Mobile Environmentという講演に触発されたものだと言う。講演では信頼性、再現性の欠如、遅さなどといった、モバイルテスティングに影響し、繰り返し起こる問題を解決する方法が説明されていた。テストというのは、環境が原因で結果が害されているかもしれない場合、特にデバイス/OSレベルでそれが起こっている場合には信頼できるものではない、とHannay氏は言う。例えば、AndroidエミュレータのCPUが突然スリープ状態になったり、ローグデバイスの向きが変わったり、ロックスクリーンのランダムトリガやシステムダイアログが予期せずポップアップしたり、など。これらのイベントは全てEspresso UIテストが失敗する原因となる。
これらの問題に対処するため、Test ButlerはAndroidエミュレータ上で、テスト環境をより安定させるいくつかの機能を備えたバックグラウンドサービスとして実行されるように意図して作られている:
- Espressoに正しく動くよう要求されたかのようにアニメーションを無効にする。
- カスタムIActivityControllerをインストールすることでシステムダイアログを無効にする。
- エミュレータのロックスクリーン、Wi-Fi、CPUがスリープ状態にならないよう監視する。
テスト下にあるアプリはTest Butlerサービスとやりとりが可能で、いくつものテスト環境変数を操作できる:
- Wi-Fiの有効/無効化。
- テスト実行中にプログラムでデバイスの向きを変更。
- 異なるロケーションサービスモードでシミュレート。例えばバッテリーセーブ、またはハイアキュラシーなど。
- アプリケーションが実行されるべきロケールの特定。
Test Butlerの要所のひとつは、標準的なAndroidエミュレータのシステムキーストアに署名されることだ。つまり、どんな署名レベルのパーミッションでも自動的に許可され、ADBを通過することなく、またはマニフェストファイルに手を付けずともリクエストすることが可能ということだ。
以下はTest Butlerをアプリで動かす設定方法である。
public class ExampleTestRunner extends AndroidJUnitRunner {
@Override
public void onStart() {
TestButler.setup(InstrumentationRegistry.getTargetContext());
super.onStart();
}
@Override
public void finish(int resultCode, Bundle results) {
TestButler.teardown(InstrumentationRegistry.getTargetContext());
super.finish(resultCode, results);
}
}
アプリとTest Butlerのコネクションが確立されたら、TestButler
クラスで提供されているいくつものメソッドを利用してロケーションサービスモードの変更、Wi-Fi状態の設定、デバイス回転の作動、などのテスト環境を操作することができる。
Test Butlerは現在、LinkedIn毎日100万を超えるテストを実行するために使われているとHannay氏は言う。Test Butlerはオープンソースでで入手可能だ。
Rate this Article
- Editor Review
- Chief Editor Action