はじめに
AWS DeviceFarm上でAndroidアプリのUIAutomatorによるUIテストを実施した際に、いくつかハマった事があったので残しておきます。 DeviceFarmやUIAutomatorの使い方についてはここでは触れません。
1. UIAutomator2.0からInstrumentationテスト扱いになっている
DeviceFarmのコンソール画面からCreate New Run
ボタンを押下すると、テストの設定画面に移ります。Step1ではプロジェクトのapkファイルをアップロードします。Step2ではテストのタイプをラジオボタンから選択するのですが、ここが1つ目のハマりポイントです。
選択項目の一番下にuiautomator
という項目があるので普通に考えるとこれを選択してしまうのですが、どうやらUIAutomator2.0からInstrumentationテスト扱いになっているようです。
UIAutomator2.0以上を利用している人はInstrumentationを選択して、下記コマンドで生成したapp-debug-androidTest-unaligned.apkをアップロードしてテストを開始しましょう。
./gradlew assembleDebugAndroidTest
2. テスト用クラスとメソッドの命名規則がある
ここが一番ハマりました。apkファイルをアップロードするとテストが開始されるのですが、結果は以下のようにSetupSuiteとTeardownSuiteテストしか行われていませんでした。
調べに調べたところ、DeviceFarmのDiscussionForumsにさらっと書いてありました。
どうやらテスト用クラスとメソッド名にルールがあるようです。
https://forums.aws.amazon.com/thread.jspa?messageID=696754
上記リンクの内容から抜粋すると、テスト用クラス名は、
"[Tt]est[Ss]?.*"
もしくは
".*[Tt]est[Ss]"
もしくは
"[Tt]est.*"
のパターンで始め(終わら)なければならない模様。
また、メソッド名はtestXXX
としなければならないようです。
こんなかんじですね。
public class HogeTests extends InstrumentationTestCase {
public void testHogeUI() {
// ...
}
}
上記の規則に従ってない場合はAWS DeviceFarm側がテストクラス/メソッドとして認識できないとのこと。
この記事が誰かの役にたてば幸いです。