
こんにちは。ヒューマンクレスト山口です。
Androidの実機で自動テストを行う時、どのような環境でテストしていますか?
今回はAWSが提供するDevice Farmを使用した方法について紹介します。
①環境
- 実行環境:AWS Device Farm
- ソースコード:Java + JUnit + Maven
②実行手順
■プロジェクトの作成
Javaのプロジェクトを作成します。
この時に、Mavenが使用できる形で作成して下さい。
■pom.xml、zip.xmlを設定する
AWS Device Farmの特徴的な設定については、こちらに従います。
Working with Appium Java JUnit for Android and AWS Device Farm
これらの設定に加えて、今回はJUnitとAppiumを使用するので、必要なライブラリを記入します。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
<scope>test</scope>
</dependency>
</dependencies>
■テストを書く
今回は、単純に以下のような操作を書きました。(ここの書き方は通常のテストと同じです)
URLを開く⇛「AWS DeviceFarm」を入力する⇛検索するボタンをクリック⇛ブラウザを閉じる
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import static org.junit.Assert.assertEquals;
/**
* Created by mao on 2017/06/15.
*/
public class Sample1 {
private static AppiumDriver driver;
@BeforeClass
public static void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName("chrome");
driver = new AndroidDriver<>(new URL("https://127.0.0.1:4723/wd/hub"), capabilities);
}
@AfterClass
public static void tearDown() {
driver.quit();
}
@Test
public void AndroidChromeTest() {
driver.get("https://www.google.co.jp/");
driver.findElement(By.id("lst-ib")).sendKeys("AWS DeviceFarm");
driver.findElement(By.id("tsbb")).click();
assertEquals("AWS DeviceFarm",driver.findElement(By.id("lst-ib")).getAttribute("value"));
}
}
■zipを作成する
pom.xmlと同じディレクトリに移動し、以下のコマンドを実行します。
mvn clean package -DskipTests=true
このコマンドを実行すると「target/zip-with-dependencies.zip」が作成されます。
このzipファイルをAWS DeviceFarmの設定で使います。
■AWS DeviceFarm上で設定を行う
具体的な方法についてはこちらに載っています。
Getting Started with AWS Device Farm
基本的には流れに沿って設定するだけです。
途中zipファイルをアップロードする所があるので、そこで先程作成した「zip-with-dependencies.zip」をアップロードします。

また、テストを実行したい端末を選びます。(同時に何台もの端末を選ぶことも可能です)

今回の簡単なテストでは、実行してから終了するまで5分程度でした。
ブラウザを起動するまでに時間がかかっていそうです。
③AWS Device Farm の特徴
AWS Device Farmを活用することの利点はAWS上にある端末が使えることと、結果表示だと思います。
以下のような結果を特別な設定をせずに見ることが可能です。
・実行動画の撮影(ダウンロードも可能です)
実行終了後に作成されます。どのように実行されたか見ることが可能です。
・スイート毎の結果表示

・実行ログの表示(ダウンロードも可能です)
・CPU/Memory/Threadsの推移

・スクリーンショット(ソースの中で書いておくと表示されます)
④感想
pom.xmlで特定の指定方法がありますが、他の所についてはAppiumとJUitで書く書き方と変わらなさそうです。
「手元に端末がない!」「端末の監視をしているのが大変!」などあれば、AWS DeviceFarmを活用してみてはいかがでしょうか。
