クックパッド株式会社さんで開催された、testotips.io 第1回*1に行ってきました。
testotips.ioは、iOS/Androidの開発系Tips共有会として続けられているpotatotipsのテスト版を指向していて、s.io==塩味*2という意味がある(かもしれない)とのこと。
今回のお題はAppium。スライドは追々connpassに張られていくと思うので、以下メモのみ。
Introduce Appium(松尾さん)
- Appiumはnodeベースのツールで、iOS/Androidのネイティブアプリおよびブラウザの操作を自動化、GUIテストができる
- GUIのテストについて。E2E test、Feature testなどと呼ばれているもの。テストケースの量は、Unit test > Integration test > GUI Test
- 内容はappium.jsを追っていけばだいたいわかる
- Capabilities*3でAppiumサーバの振る舞いを指定する
- Tips
- 実行には時間がかかるので、夜間にまわして翌朝チェックしている
- DroidDriver
- GoogleのものをSauceLabsがcloneして作っている。Espressoに近い使用感になる?
- appium/droiddriver · GitHub
テスト結果レポートをSahaginで作ってみる(伊藤さん)
- Sahagin==さはぎん。伊藤さんが作った
- 今のところJavaのみ対応。もともとSelenium WebDriverのテスト結果のレポーターで、Appiumでも使用できる
- テストコードから、日本語+画面キャプチャのレポートをhtmlで出力
- スクショはステップごとに自動で撮ってくれる
- findとかasertも日本語に置き換えて出力している
- PageObjectパターンを使う場合、setterに
@TestDoc
でコメントを書くとそれが表示に使用される - Jenkins Sahagin pluginで、Jenkinsのジョブ画面に表示できる
- Selendroidだとスクショのタイミングがちょっとずれる
- Tips
AppiumのPHPクライアントを使う上で行っている工夫(高橋さん)
- Yahoo!社内でPHPクライアントを使った自動化の試み
- JavaScriptはコールバックが多くて嫌だった。社内のサーバサイドで多く使われていたPHPを選択。でも他のクライアントライブラリに比べて機能が足りない
- テストフレームワークにはPHPUnit
- Appium PHP Clientを継承したHelperクラスを作り、それを継承した個々のTestCase作成。Helperには足りない機能を書いている
- コンストラクタでsessionStrategy=isolatedにされていたので、テストケースごとにアプリインストールが走っていた
- sleepを極力しない工夫。findをラッピングして、例外を返さず、waitしてリトライすることをHelperに実装。テストコードをシンプルに保つ
- swipeが座標指定なのをラッピング
- UI操作のスモークテストにAppiumを使用。細かい操作のテストにはEspressoを使用している
Appiumを使ってiPhone Safari、Andorid Chromiumを使ってアプリをテストするTips(浅黄さん)
- ブラウザのテストにAppiumを使用している
- Androidは、SelendroidだとWebViewで実行されるので、最近はChromeDriverで直接Chromeを使用するようにしている
- Selenium Grid Serverを使って実行。ただし、Appiumはキックできるけど、ChromeDriverはキックできないのでGrid Severを経由していない。
- テストケースは、Excelの表形式で書いたものからJavaのコードを生成する。共通処理(ログイン等)、シナリオ、PageObject、それぞれExcelファイルで書ける
Running appium tests on Jenkins(Vishal Banthiaさん)
- AppiumによるiOS/AndroidテストをJenkinsから実行するデモ
- テストはRSpecで、失敗したらスクショを撮っている
- buildとtestはジョブをわけて、pipelineでつなぐ
- テストは機能ごとにジョブを分けている(これは増えていくとつらいと思うので私は否定派)
- デモのリポジトリにはHeplerも入っている
- servermanager.rb: Appiumサーバの管理。startで、前のプロセスをkillしたりとか。
- screenshot_embedded_html_formatter.rb: スクリーンショット
所感
懇親会も込みで、他の会社で実際どのように運用しているとか、という話が聞けるのはとても有益でした。Tips紹介だけだとこれは得られないので、テスト自動化まわりはこんな感じに(ツール縛りくらいで)情報交換できる場はいいですね。