UZABASE Tech Blog

〜迷ったら挑戦する道を選ぶ〜 株式会社ユーザベースの技術チームブログです。

appiumを使ってモバイルアプリのテストを自動化する ~環境構築まで~

こんにちは!SPEEDA プロダクト開発チームの板倉です。
前回書いた時はNewsPicksの開発をしていましたが、今はSPEEDAの開発をしてます。

SPEEDAのプロダクトチームでは、以下の記事のようにE2EをGaugeとKotlinを使って書くことが多いです。

Gauge Test Automation Toolとアジャイル開発 - UZABASE Tech Blog

GaugeのConceptを用いてテストシナリオをより仕様書のように記述する - UZABASE Tech Blog

GaugeのParameterを使いこなす - UZABASE Tech Blog

今回は、NewsPicksでアプリ開発をやっていたこともあり、モバイルアプリではE2Eをどうやるのかなということで調べてみました。

環境構築

appiumのインストールとテストプロジェクトの準備について説明します。
※ アプリ開発に関する環境構築については割愛します。

appium

npmを使ってインストールします。

npm install -g appium

プロジェクト

MavenやGradleプロジェクトを作成したのち、以下の依存関係を追加します。

Maven Repository: com.thoughtworks.gauge » gauge-java
Maven Repository: io.appium » java-client

作成したプロジェクトでコマンドを実行してgaugeプロジェクトに必要なファイルを展開します。

gauge init java

実行後のプロジェクトは以下のようなディレクトリ構造になります。

<PROJECT_ROOT>
├── build.gradle
├── env
│   └── default
│       ├── default.properties
│       └── java.properties
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── libs
├── manifest.json
├── settings.gradle
├── specs
│   └── example.spec
└── src
    ├── main
    │   ├── java
    │   ├── kotlin
    │   └── resources
    └── test
        ├── java
        │   └── StepImplementation.java
        ├── kotlin
        └── resources

あとはIDEの機能を使って test/java/StepImplementation.java をkotlinに変換し、test/kotlin 以下に移動します。
これでプロジェクトのセットアップは完了です。

appiumのセットアップ

appiumを使ってアプリを操作する際は、SeleniumのRemoteDriverを通して行うことになります。
DriverにCapabilitiesを指定する必要があり、Androidでは最低限以下の2項目を設定することでテストを行うことができます。

キー 設定内容
deviceName テストを実行する端末の名前 Android Emulator
app テストをするアプリ(apk)の絶対パス /Users/user/workspace/project/test-app.apk

こちらにもあるようにAndroidではdeviceNameが設定しても無視されるようです(2019.7.31時点)。

On Android this capability is currently ignored, though it remains required.

Desired Capabilities - Appium

コードで書くとこんな感じです。

fun <T: WebElement> driver(): AppiumDriver<T> {
  val app = File("example.apk")
  val capabilities = DesiredCapabilities().apply {
    setCapability("deviceName", "Android Emulator")
    setCapability("app", app.absolutePath)
  }
  return AndroidDriver(capabilities)
}

このコードだけでも実行すると appium server が実行され、指定した端末にアプリをインストールし起動するまでが行われます!
※ エミュレータは起動しておく必要があります。

次回は

今回は環境構築まで書いてみました。
次回は実際にアプリをテストするコードを書いてみたいと思います!

さいごに

プロダクトチームは一緒にSPEEDAを開発する仲間を募集しています!
プロダクトチームってどんな感じなの?という疑問に対しては、以下の記事が参考になるかと思います!

journal.uzabase.com

少しでも興味のある方はご連絡お待ちしております!!!

使う技術は自分たちで決める。XPを極め技術を追い求めるエンジニア募集! - 株式会社ユーザベースのWeb エンジニア中途の求人 - Wantedly