Appiumのテスト結果レポートを
Sahaginで作ってみる
2015.03.19
伊藤 望(TRIDENT)
自己紹介
 伊藤 望
 会社
 株式会社TRIDENT 代表取締役
 テスト自動化の支援を行うベンチャー
 www.trident-qa.com (ブログあり)
 コミュニティ
 「日本Seleniumユーザーコミュニティ」主宰
 テスト自動化研究会
本日のトピック
1. Appium
2. Sahagin
3. Appium + Sahagin
4. その他モバイルテストツール
5. はまったこと
1. Appium
 モバイル向け自動テストツール
 Seleniumと同じようなコマンド体系
 iOS & Android
 スマホ & タブレット
 エミュレータ & 実機
 ブラウザ & ハイブリッド & ネイティブ
2. Sahagin
 Selenium WebDriverテスト結果のHTMLレポー
トツール
 今のところJavaのみ対応
 オープンソース
 http://blog.trident-qa.com/2015/01/sahagin-
first-release-1/
Sahagin Selenium 検索
2. Sahagin
できること①
 Seleniumのテストコードから、日本語 + 画面
キャプチャのレポートを自動生成
2. Sahagin
できること①
 こんなSeleniumテストスクリプトから
@Test
public void 問い合わせが成功すること() {
driver.get("http://www-demo.trident-qa.com/contact/");
driver.findElement(
By.name("your-name")).sendKeys("テストユーザー");
driver.findElement(
By.name("your-email")).sendKeys("***@***.com");
driver.findElement(
By.name("your-organization")).sendKeys("TRIDENT");
driver.findElement(
By.name("your-subject")).sendKeys("テスト");
driver.findElement(
By.name("your-message")).sendKeys("テスト送信です");
driver.findElement(
By.cssSelector("input.wpcf7-submit")).click();
2. Sahagin
できること①
 こんなテストレポートが生成されます
2. Sahagin
できること①
 表示切替で、テストコードの内容も見られます
2. Sahagin
できること①
 SeleniumのコマンドやAssertコマンドを自動的
に日本語に変換
driver.findElement(
By.name("your-name")).sendKeys("テストユーザー")
要素「name = your-name」に「テストユーザー」を入力
assertThat(driver.getTitle(), is("検索結果"))
「ページタイトル」が「検索結果」に等しいことをチェック
2. Sahagin
できること②
 自分で定義した独自のメソッドも日本語化
2. Sahagin
できること②
 問い合わせ画面ヘの処理をまとめたContactPage
クラス
public class ContactPage {
public void setName(String name) {
driver.findElement(
By.name("your-name")).sendKeys(name);
}
public void setMail(String email) {
driver.findElement(
By.name("your-email")).sendKeys(email);
}
……
2. Sahagin
できること②
 ContactPageクラスを利用したテスト
@Test
public void 問い合わせが成功すること() {
driver.get("http://www-demo.trident-qa.com/contact/");
ContactPage contact = new ContactPage(driver);
contact.setName("テストユーザー");
contact.setMail("***@***.com");
contact.setOrganization("TRIDENT");
contact.setSubject("テスト");
contact.setMessage("テスト送信です");
contact.send();
}
2. Sahagin
できること②
 ContactPageクラスに@TestDocで説明を追加すると、
@Page("問い合わせページ")
public class ContactPage {
@TestDoc("名前に「{name}」をセットする")
public void setName(String name) {
driver.findElement(
By.name("your-name")).sendKeys(name);
}
@TestDoc("メールアドレスに「{email}」をセットする")
public void setMail(String email) {
driver.findElement(
By.name("your-email")).sendKeys(email);
}
2. Sahagin
できること②
 こんなテストレポートが生成されます
2. Sahagin
できること②
 メソッドの中身も階層表示で開けます
2. Sahagin
想定している使い方
 開発・テストチームで実施しているSeleniumテスト
の内容を、
 上司にアピール!
 お客様にアピール!
 テストに興味ない隣の席の人にアピール!
 他人が作成したテスト内容が把握しやすい
 テスト失敗時のエラー調査が効率的に
 不具合を起こした人に、何がどう失敗しているか説明し
やすい
 Appiumのスクリプトもレポートにできます
 レポートはJenkins上でも確認できます
3. Appium + Sahagin
 iOSネイティブアプリのテスト
 Appiumテストは、Jenkinsから実行
3. Appium + Sahagin
デモ
 Jenkins Sahaginプラグインをインストール
 テストの前後にappiumサーバーの起動・終了処理
 シェルスクリプトでバックグラウンドプロセスとして起動し
ようとしたが、うまくいかなかった
 Javaテストコードの初期処理で、テスト実行前にAppium
サーバーを起動
3. Appium + Sahagin
Jenkinsの設定
3. Appium + Sahagin
色々な組み合わせ
 iOS(ネイティブアプリ) + Sahagin
 Android(ブラウザ、タブレット) + Sahagin
3. Appium + Sahagin
色々な組み合わせ
3. Appium + Sahagin
色々な組み合わせ
 Android(ネイティブアプリ) + Sahagin
 デモで使用したコード
 https://github.com/SahaginOrg/sample-code
 パスがベタ書き等、雑なサンプルなので注意
 サンプルレポート
 http://sahaginorg.github.io/sample-report/
 ブラウザから見られます(Safari以外)
3. Appium + Sahagin
サンプル
4. その他モバイルテストツール
Selendroid
 Selendroid(ブラウザ) + Sahagin
4. その他モバイルテストツール
 ios-driver
 XCode6に未対応
 XCode5もSNAPSHOT版でしか対応していない
 たぶんSahaginで動くが未検証
 Robotium、Espresso
 JUnitランナー起動時にJVMに引数を渡せない(たぶん)
 大変そうなので、今回は対応見送り
5. はまったこと
 Androidエミュレータ上のブラウザで画面キャプチャ
が取れない
 chromeDriverの問題っぽい
 https://groups.google.com/forum/#!topic/appium-
discuss/FvXnwzx9bK0
 キャプチャ処理の前後で”NATIVE_APP”にコンテキストを
変更すれば動く
 Sahaginのバージョンアップで対応予定
5. はまったこと
 XCode6.2で、シミュレータのSafariが動かない
 iOS8のシミュレータ:
 ウェブサイトにHTTP接続できない(HTTPSはできる)
 XCode再インストールで直るといいな..
 https://groups.google.com/forum/?hl=en#!topic/seleniumjp/5gbQzvxuMa4
 iOS7のシミュレータ:
 XCode6.2のinstrumentのバグで、下位バージョンのシミュ
レータが動かせない
 https://github.com/appium/appium/issues/4708#issuecomment-82410338
5. はまったこと
 Appiumの画面キャプチャ取得が遅すぎる
 全ステップの画面キャプチャをとらないオプションをつける
(Sahaginのバージョンアップで対応予定)
 シミュレータに関しては、デスクトップ上のウィンドウの画
面キャプチャを取るのもありかも
5. はまったこと
 Jenkinsをルートユーザーで起動していると..
 Jenkinsビルド中からappiumサーバーを起動するときにエ
ラーになる(appiumサーバーはsudoで起動できない)
Sahagin
 現在も開発継続中
 Geb & Spock対応
 HTMLレポートのカスタマイズ機能
 フィードバックもお待ちしてます
ご清聴ありがとうございました

Appiumのテスト結果レポートをsahaginで作ってみる