AWS Device FarmでAndroidのChromeを動かす

QUES TECH

image

こんにちは。ヒューマンクレスト山口です。
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("http://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を活用してみてはいかがでしょうか。