こんにちは!SPEEDA プロダクト開発チームの板倉です。
前回書いた時はNewsPicksの開発をしていましたが、今はSPEEDAの開発をしてます。
SPEEDAのプロダクトチームでは、以下の記事のようにE2EをGaugeとKotlinを使って書くことが多いです。
Gauge Test Automation Toolとアジャイル開発 - Uzabase for Engineers
GaugeのConceptを用いてテストシナリオをより仕様書のように記述する - Uzabase for Engineers
GaugeのParameterを使いこなす - Uzabase for Engineers
今回は、NewsPicksでアプリ開発をやっていたこともあり、モバイルアプリではE2Eをどうやるのかなということで調べてみました。
環境構築
appiumのインストールとテストプロジェクトの準備について説明します。
※ アプリ開発に関する環境構築については割愛します。
appium
npmを使ってインストールします。
npm install -g appium
プロジェクト
MavenやGradleプロジェクトを作成したのち、以下の依存関係を追加します。
https://mvnrepository.com/artifact/com.thoughtworks.gauge/gauge-java/
https://mvnrepository.com/artifact/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.
http://appium.io/docs/en/writing-running-appium/caps/
コードで書くとこんな感じです。
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を開発する仲間を募集しています!
プロダクトチームってどんな感じなの?という疑問に対しては、以下の記事が参考になるかと思います!
少しでも興味のある方はご連絡お待ちしております!!!
ペアプロxTDDで、技術を追い求めるプロダクト開発エンジニアを募集 - 株式会社ユーザベースのWebエンジニアの採用 - Wantedly