WEB+DB PRESS plus Selenium実践入門 ――自動化による継続的なブラウザテスト
- 伊藤望,戸田広,沖田邦夫,宮田淳平,長谷川淳,清水直樹,Vishal Banthia 著
 - 定価
 - 3,630円(本体3,300円+税10%)
 - 発売日
 - 2016.2.2
 - 判型
 - A5
 - 頁数
 - 416ページ
 - ISBN
 - 978-4-7741-7894-3 978-4-7741-7969-8
 
概要
ブラウザの多様化に伴い、Webアプリケーションをクロスブラウザ対応にするための負荷がますます増加し、その解決の一つとしてテスト自動化のノウハウが開発現場で必要とされています。また継続的インテグレーションを実践する際にも、テスト自動化がその一部として取り入れられています。本書では、Webアプリケーションのテスト、特にブラウザテストに関わる現状と問題点を整理し、これを解決する最適なプロダクトであるSeleniumを中心にWebブラウザテスト自動化への取り組み方、具体的な手順などについて解説します。
こんな方にオススメ
- Webアプリケーション開発でテストを運用しているエンジニア
 - Web アプリケーションテストの自動化を検討しているエンジニア
 
目次
Part 1 Seleniumの基礎知識
第1章 テスト自動化とそのメリット
- 1.1 手作業によるソフトウェアテストの問題
- どんどん大きくなる回帰テストのコスト
 - 同じテストを環境ごとに何度も実施する必要がある
 - 開発・テスト作業効率の低下
 
 - 1.2 テストの自動化とは
 - 1.3 さまざまな種類の自動テストツール
- ユニットテストツール
 - 画面テストツール
 - 静的解析ツール
 - 負荷テストツール
 - セキュリティテストツール
 
 - 1.4 テストを自動化するメリット
- 回帰テストの実行コストを抑えられる
 - 似たようなテストを何度も実施できる
 - 開発フェーズの問題をすばやく検出できる
 - 市場の変化にすばやく追随できる
 - システムの改善を諦めなくてよい
 - 手動テストよりも正確でミスがない
 - 一定の品質を確実に保証できる
 - 快適に開発を行える
 
 - 1.5 自動テストツールの使い分け
 
第2章 Seleniumの概要
- 2.1 Seleniumとは
- Seleniumのしくみ
 - 多様なブラウザ・プラットフォームで利用できる
 - Seleniumを支えるコミュニティ
 
 - 2.2 Seleniumを構成するツール群
- Selenium WebDriver
 - Selenium RC
 - Selenium IDE
 - Selenium Builder
 - Selenium 3
 
 - 2.3 ブラウザテストの標準仕様へ
 
Part 2 WebDriver
第3章 WebDriver入門
- 3.1 セットアップとスクリプトのサンプル
- Java
- セットアップ
- Jarを直接利用する方法
 - Mavenを利用する方法
 - Gradleを利用する方法
 
 - スクリプトの書き方
 - テストフレームワーク
 
 - セットアップ
 - Ruby
- セットアップ
 - スクリプトの書き方
 - テストフレームワーク
 
 - JavaScript
- セットアップ
 - スクリプトの書き方
 - テストフレームワーク
 
 - C#
- セットアップ
 - スクリプトの書き方
 - テストフレームワーク
 
 - Python
- セットアップ
 - スクリプトの書き方
 - テストフレームワーク
 
 
 - Java
 - 3.2 さまざまなドライバのセットアップ
- FirefoxDriver
 - ChromeDriver
 - InternetExplorerDriver
- IEDriverサーバのセットアップ
 - Internet Explorerの設定
- 保護モードの設定
 - 拡張保護モードの設定
 - レジストリの設定
 
 
 - SafariDriver
 - PhantomJSDriver
- PhantomJSとは
 - PhantomJSのセットアップ
 - PhantomJSDriverのセットアップ
 
 
 
第4章 WebDriverコマンド徹底解説
- 4.1 ブラウザの生成と破棄
- ブラウザの生成
 - ブラウザの破棄
 - テストフレームワークとの組み合わせ
- 初期化処理と終了処理
 - 値のチェック
 
 - Capabilities
 
 - 4.2 ドライバ固有の設定
- FirefoxDriver
- Firefoxプロファイルの指定
- プロファイルとは
 - Preferenceの変更
 - アドオンの追加
 - プロファイルフォルダの指定
 
 - Firefox実行ファイルの指定
 
 - Firefoxプロファイルの指定
 - ChromeDriver
- オプションの指定
- Chromeのコマンドライン引数の指定
 - Chrome拡張の追加
 - Chrome実行ファイルの指定
 - Preferenceの変更
 
 
 - オプションの指定
 - InternetExplorerDriver
- Capabilities
 
 - SafariDriver
 
 - FirefoxDriver
 - 4.3 要素の取得
- findElements
 - ロケータ
- By.id
 - By.name
 - By.tagName
 - By.className
 - ロケータの調べ方
 - By.linkText
 - By.partialLinkText
 - By.cssSelector
 - By.xpath
 
 - 子孫要素の取得
 
 - 4.4 要素の操作
- URL遷移
 - クリック
 - キー入力
 - チェックボックスの選択
 - ラジオボタンの選択
 - プルダウンの選択
- 複数選択可能なselect要素
 - Selectクラスの各種メソッド
 
 - submit
 
 - 4.5 要素情報の取得
- 表示・非表示
 - 有効・無効
 - 存在するかどうか
 - 選択状態
 - 属性
 - テキスト
 - タグ名
 - CSSプロパティ
 - サイズ
 - 位置
 
 - 4.6 ブラウザ情報の取得
- タイトル
 - URL
 - HTMLソース
 - ウィンドウ位置
 - ウィンドウサイズ
 - Cookie
- Cookieの取得
 - Cookieの追加
 - Cookieの削除
 
 
 - 4.7 ブラウザの操作
- 画面キャプチャ
- 画面キャプチャの取得範囲
 
 - JavaScriptの実行
- 返り値の取得
 - 引数の指定
 - 非同期メソッドの呼び出し
 
 - ナビゲーション
- 戻る
 - 進む
 - リロード
 
 
 - 画面キャプチャ
 - 4.8 待ち処理
- Implicit Wait
 - Explicit Wait
- WebDriverWait
- 最大待機時間の指定
 - さまざまな待機方法の指定
 - 任意の条件による指定
 - 待機失敗時のエラーメッセージの指定
 - 待機条件判定を行う間隔の指定
 
 
 - WebDriverWait
 - ページ読み込みの待ち時間
 
 - 4.9 ポップアップ・ウィンドウ・フレーム
- ポップアップ
- Alertダイアログ
 - Confirmダイアログ
 - Promptダイアログ
 - SafariDriver、PhantomJSDriverの場合
 
 - ウィンドウ
- SafariDriverの設定
 - 名前のないウィンドウ
- ウィンドウハンドルによる特定
 - ウィンドウタイトルによる特定
 
 - ウィンドウを閉じる
 - タブ
 
 - フレーム
- iframe要素
 - frame要素
 - 入れ子のフレーム
 
 
 - ポップアップ
 - 4.10 その他のコマンド
- アクション
- ダブルクリック
 - 右クリック
 - マウスの移動
 - ドラッグアンドドロップ
 - キーを押しながらクリック
 - Actionsのメソッド一覧
 
 - イベントリスナ
- 指定可能なイベント
 - イベントリスナの解除
 
 - ログ取得
- ログレベルの指定
 
 
 - アクション
 
第5章 WebDriverコマンドの実践的活用
- 5.1 さまざまな画面操作
- ファイルアップロードダイアログ
 - ファイルダウンロード
- FirefoxDriver
 - ChromeDriver
 - InternetExplorerDriver
 - SafariDriver
 
 - Basic認証ダイアログ
- InternetExplorerDriver
 - SafariDriver
 
 
 - 5.2 さまざまなエラーチェック
- JavaScriptエラーのチェック
 - 画像が表示されているかのチェック
 - HTTPステータスコードの取得
- セットアップ
 - 利用方法
 
 
 - 5.3 HTML5の新機能
- input要素
- テキスト・数値のinput要素
 - 日付・時刻のinput要素
 - typeがrangeのinput要素
 - typeがcolorのinput要素
 
 - Web Storage
- Session Storage
 - Local Storage
 - ChromeDriverの場合
 
 - Canvas
 
 - input要素
 
第6章 スクリプトの効率的なメンテナンス
- 6.1 ページオブジェクトパターン
- ページオブジェクトパターンを使ったスクリプト
- 可読性の向上
 - 共通化の基準がわかりやすい
 - 目的のメソッドを見つけやすい
 
 - ページオブジェクト作成の指針
- 画面操作を抽象化したメソッドを提供する
 - ページ遷移を伴うメソッドは、新しいページオブジェクトを返す
 - 遷移先ページが異なるメソッドは別のメソッドにする
 - Assertionロジックをページオブジェクトに含めない
 - ページ遷移の際に、きちんと遷移できたことをチェックする
 
 - @FindByとPageFactory
- メカニズム
 - @FindByの引数の指定方法
 - @CacheLookup
 - その他の機能
 
 
 - ページオブジェクトパターンを使ったスクリプト
 - 6.2 データ駆動テスト
- 2つのテストランナー
 - Parameterizedテストランナーを使った方法
 - Theoriesテストランナーを使った方法
 
 
Part 3 便利なライブラリ
第7章 Geb
- 7.1 Gebとは
 - 7.2 Groovy
- Javaと比べて簡潔な記述
 - 動的型付け言語である
 - defキーワードによる宣言
 - 名前付き引数
 - プロパティ
 - クロージャ
 - delegate
 
 - 7.3 セットアップ
- Groovyプラグインのインストール
 - Gradleプラグインのインストール
 - プロジェクトの作成
 
 - 7.4 Gebのテストスクリプト
 - 7.5 基本のブラウザ操作
- 指定URLへの遷移
 - 内部WebDriverのライフサイクル
 - Cookieのクリア
 - WebDriverインスタンスの取得
 - Browser.driveを使ったテスト
 
 - 7.6 GebConfig.groovy
- driver
 - その他の設定項目
 
 - 7.7 画面要素の指定方法
- $メソッドの引数
 - $メソッドの返り値
 - 部分一致
 - Navigatorオブジェクトの各種メソッド
 - WebElementインスタンスの取得
 
 - 7.8 画面要素の操作と情報取得
- クリック
 - キー入力
 - 画面情報の取得
 - フォームコントロール
- valueの取得
 - テキスト入力欄への値セット
 - プルダウンへの値セット
 - チェックボックスへの値セット
 - ラジオボタンへの値セット
 - ファイルアップロードへの値セット
 - valueメソッドのショートカット
 
 
 - 7.9 さまざまなブラウザ操作
- 画面キャプチャ・HTMLレポート
 - JavaScriptロジックの呼び出し
 - ポップアップ
 - 待ち処理
- Implicit Wait
 
 
 - 7.10 ページオブジェクトパターン
- url
 - at
 - content
 - 現在のページの管理
 - contentのオプション
- toオプション
 - waitオプション
 - toWaitオプション
 
 - WebDriverのページオブジェクトとの違い
 
 - 7.11 Spockと組み合わせる
- セットアップ
 - Spockと組み合わせたテストスクリプト
 - ブロック
 - データ駆動テスト
 
 
第8章 FluentLenium
- 8.1 FluentLeniumとは
 - 8.2 セットアップ
 - 8.3 FluentLeniumのテストスクリプト
 - 8.4 画面要素の指定方法
 - 8.5 主なコマンド
- URL遷移
 - クリック
 - テキスト入力
 - プルダウンの選択
 - 画面キャプチャ
 - 待ち処理
 - WebDriverコマンドの直接呼び出し
 
 - 8.6 FluentTestのメソッドのオーバーライド
 - 8.7 ページオブジェクトパターン
 
第9章 Capybara
- 9.1 Capybaraとは
 - 9.2 ドライバ
 - 9.3 セットアップ
 - 9.4 Capybaraのテストスクリプト
 - 9.5 主なコマンド
- クリック
 - フォームコントロール
- テキスト入力
 - プルダウンの選択
 - チェックボックスの選択・非選択
 - ラジオボタンの選択
 
 - 要素の取得
 - 値チェック
 - 待ち処理
 - その他のコマンド
- URL遷移
 - 画面キャプチャ
 - WebDriverコマンドの直接呼び出し
 
 
 - 9.6 Capybara単独で実行する場合
 
Part 4 Seleniumのさまざまな活用方法
第10章 Selenium IDE
- 10.1 Selenium IDEとは
 - 10.2 インストール手順
 - 10.3 基本的な使い方
- 起動・記録
 - 記録の停止
 - 再生
 - テストケースの保存
 - 記録の再開
 - 手作業でのコマンドの追加
 - テストケースの追加、テストスイートの作成
 - ロケータの自動判定機能の調整(Locator Builders)
 - Test Schedulerを使った定時実行
 - プログラミング言語へのエクスポート
- エクスポートの使い方
 - エクスポートできないコマンドの例
 
 
 - 10.4 ブラウザを操作するコマンド
- フォームの操作
- ウィンドウやフレームの操作
 - 画面キャプチャの取得
 
 
 - フォームの操作
 - 10.5 値を検証・待機・保持するコマンド
- assert
- HTML要素
 - ポップアップ
 - ページ全体の値の検証
 - その他
 
 - verify
 - waitFor
 - store
 - 期待値でのパターンマッチングの利用
 
 - assert
 - 10.6 Selenium IDEのプラグイン
- Implicit Wait
 - SelBlocks
 - Highlight Elements
 - File Logging
 - ScreenShot on Fail
 - Test Results
 - Power Debugger
 
 - 10.7 WebDriver-Backed
- 環境の準備
 - Selenium IDEの設定
 - WebDriver-Backedで再生
 
 - 10.8 UIマッピング
 
第11章 スマートフォンのテストとAppium
- 11.1 スマートフォンのテストとは
- スマートフォンのテストの種類
 - スマートフォン用Webサイトのテスト
 - スマートフォン用アプリのテスト
 - スマートフォンのテストに利用できるSelenium関連ツール
 - エミュレータを利用するか実機を利用するか
 
 - 11.2 PCブラウザによるスマートフォン用Webサイトのテスト
- PCブラウザでテストする場合の注意事項
 - Safariを利用したテスト
- Safariのユーザエージェントの設定
 - タッチイベント
 
 - PC版Chromeを利用したテスト
- Chromeのユーザエージェントの設定
 - タッチイベント
 
 - PhantomJSを利用したテスト
- PhantomJSのユーザエージェントの設定
 - タッチイベント
 
 
 - 11.3 Appium
- SeleniumとAppium
- Mobile JSON Wire Protocol
 - Appium独自コマンド
 
 - AppiumDriverの導入方法
 - AppiumのCapabilities
 - Appiumサーバの導入方法
 - Android開発環境の設定
- Androidのエミュレータの設定
 - Androidの実機の設定
 
 - iOS開発環境の設定
- iOSのシミュレータの設定
 
 
 - SeleniumとAppium
 - 11.4 AppiumでのAndroid版Chromeの操作
- ChromeDriverサーバの設定
 - Android版Chromeの操作
- Appiumサーバの起動
 - AppiumDriverの実行
 
 
 - 11.5 AppiumでのiOSのMobile Safariの操作
- iOSシミュレータの設定
 - シミュレータ上のMobile Safariの操作
 - iOS実機のMobile Safariの操作
- Safari Launcherのビルド
 - ios-webkit-debug-proxyのインストール
 - Mobile Safariの起動
 
 
 
第12章 CI環境での利用
- 12.1 前提
 - 12.2 コマンドラインツールでのSeleniumの実行
- 標準的なコンソール実行
 - ビルドツールの利用
 
 - 12.3 CIサーバ上でのSelenium実行環境の整備
- Linux
- ディストリビューションの選択
 - ヘッドレス環境向けの設定
- PhantomJS
 - Xvfbとブラウザの併用
 
 
 - Windows
- ローカルシステムアカウントと、対話的デスクトップ
 
 
 - Linux
 - 12.4 Jenkins
- Jenkinsの導入時のTIPS
- LTS Releaseの選択
 - Webサービスの待ち受けポートの確認と変更
- Linux(Debian・Ubuntuなど)
 - Linux(RHEL・CentOSなど)
 - Windows
 
 - 追加プラグイン
- Git Plugin
 - Build-timeout Plugin
 
 
 - 定時実行ジョブの作成
- 新規ジョブの登録
 - ソースコード管理
 - ビルド・トリガの実行設定
 - タイムアウトの設定
 - ビルドの設定
 - ビルド後の処理
 - 設定の保存
 
 - ジョブの手動実行
 - 実行結果の確認
 - Jenkinsスレーブでのジョブの実行
- スレーブの追加
 - スレーブでのJenkinsエージェントの実行
 
 
 - Jenkinsの導入時のTIPS
 - 12.5 Selenium Gridを併用した、複数ノードでのテストの実行
- 最小構成のSelenium Grid環境の作成
- ハブの起動
 - ノードの起動、ハブへの接続
 - ハブの状態の確認
 
 - RemoteWebDriverの利用
 - RemoteWebDriverの実行
 - 複数のマシンにより構成されるSelenium Grid環境の作成
- テストスクリプト・ハブ・ノードのマシンの分離
 - 複数のノードと、ノードごとの使用条件の設定
 
 - 実行結果の確認
 - Jenkinsとの連携
- Selenium Pluginのビルドとインストール
- ソースコードの入手
 - Mavenでビルド
 - Jenkinsにインストール
 
 - ハブの設定
 - ノードの設定
- 設定の名前
 - Jenkinsスレーブの割り当て
 - WebDriverノードの選択、ノード上で実行するブラウザの指定
 - JSON形式でのノードの設定
 - 設定の保存
 
 - ノードの起動
 - ノードの状態の確認
 
 - Selenium Pluginのビルドとインストール
 
 - 最小構成のSelenium Grid環境の作成
 
Part 5 実践的な運用
第13章 運用
- 13.1 運用での典型的な問題
 - 13.2 テストスクリプトの工夫
- テストスクリプトのバージョン管理
 - 依存関係のないテスト
 - 共通する記述のまとめ
- 既成のライブラリやフレームワークの利用
 - SeleniumのAPIに対するフック処理の追加
 - 期待値の定数化
 
 - テストスクリプトのリファクタリング
 
 - 13.3 テストの実行の工夫
- テストの実行前の準備
- Seleniumを利用するテストのレベル
 - テストの並列実行
 
 - テスト実行時のリソース管理
- テストを実行するためのリソース
 - テスト実行後のリソース解放
- ブラウザ・ドライバのプロセスの残存
 - ブラウザのプロファイルデータの残存
 - 画面キャプチャなど、テスト結果データの残存
 
 
 - テストの結果の確認
- ログ
 - 実行時間
 - 画面キャプチャ
- 正否の自動判定の難しさ
 - 目視チェックによる判定
 - 画面要素の位置情報で代替した自動判定
 
 
 
 - テストの実行前の準備
 - 13.4 テスト環境の工夫
- 自動テスト結果の通知
 - 自動テスト環境の維持
- 確実に動作する自動テスト環境を作るための、構成ソフトウェアのバージョン管理
 - 自動テスト環境でのSeleniumのバージョン更新
 
 
 
第14章 サイボウズの事例
- 14.1 開発プロセス
- 要件検討段階
 - 仕様検討段階
 - 実装段階
 - 試験段階
 - リリースと改善活動
 
 - 14.2 運用上の課題
- Selenium Gridによる並列化
 - Dockerによるテスト環境の用意
 - テスト環境のクラウドへの移行
 - トラブル対応の属人性
 
 - 14.3 まとめ
 
第15章 DeNAの事例
- 15.1 自動テストの対象となるサービスの概要
- NBPFの全体像
- サーバサイドコンポーネント
 - Mobage JS SDK
 - Mobage Shell App SDK
 
 - Seleniumによる品質保証のアプローチ
 
 - NBPFの全体像
 - 15.2 ブラウザ自動テスト
- テストWebアプリケーション
- 何を自動テストで担保し、何を手動テストで担保するか
 
 - テストコンポーネント
- テストスクリプト
 - テストサポートライブラリ
- マルチデバイス対応
 - プラットフォームのクライアントとしての利用
 - 複数のテストスクリプトからの利用
 
 
 - JenkinsによるCI
- テストの安定性の問題に対するアプローチ
 - テストの実行時間の問題に対するアプローチ
 - テストの並列実行
- テスト実行環境の独立
 - テストデータの独立
 - 各テスト実行ノード専用のテストデータの事前準備
 
 - 自動テストサポートWebアプリケーション
 
 
 - テストWebアプリケーション
 - 15.3 スマートフォンアプリ自動テスト
- Mobage Shell App SDK
 - テストアプリ
- テストアプリの特徴
- Informationビュー
 - 入力補助機能
 
 - テストアプリビルドスクリプト
 - Jenkinsのテストアプリビルド
 
 - テストアプリの特徴
 - テストコンポーネント
- スマートフォンアプリ自動テストのしくみ
- テストサポートライブラリ
 - テストスクリプト
 - テストの実行
 - テスト結果
 
 
 - スマートフォンアプリ自動テストのしくみ
 - JenkinsによるCI
- 実機テスト環境
 - Jenkinsジョブ
- テストアプリビルドジョブ
 - 自動テスト実行ジョブ
 
 
 - 実機テストの課題について
 
 
Appendix 付録
付録A CSSセレクタ・XPath早見表
- A.1 CSSセレクタ
 - A.2 XPath
 
付録B WebDriverコマンド早見表
- B.1 Java
 - B.2 Ruby
 - B.3 JavaScript
 - B.4 C#
 - B.5 Python
 
プロフィール
伊藤望
株式会社TRIDENT代表として、顧客の開発・テスト環境の構築・改善に日々取り組む。Seleniumに関する情報共有や質問の場である「日本Seleniumユーザーコミュニティ」の運営や、SeleniumテストレポートツールSahaginの開発も行っている。
本書1~9章と付録を担当。
TRIDENTブログ:http://blog.trident-qa.com
戸田広
IT業界と非IT業界の間をキャリアパス無視で右往左往して幾星霜、未だにGCのない場所では生きていけないぬるい人。2013年〜2014年にSeleniumの導入支援・実行環境の構築を手がけたのち、2015年からは主にWebスクレイピングでSeleniumを活用中。
本書10章・12章・13章を担当。
Twitter:@hiroshitoda
GitHub:hiroshitoda
沖田邦夫
精密機器メーカーでの新規事業開発でAPI・インフラ・システムアーキテクチャの設計・開発・テストを一通り経験後、株式会社ディー・エヌ・エーのテストエンジニアリングをリードしている。
本書11章を担当。
宮田淳平
サイボウズ株式会社で生産性向上チームとテストエンジニアリングチームに所属。極度のめんどくさがりで、開発を楽にするために可能な限り自動化したい。多様で価値あるサービスを迅速に提供するため、部署やプロダクトを横断して、生産的でオープンな開発基盤を整備している。
本書14章を担当。
Twitter:@miyajan
長谷川淳
サイボウズ株式会社でグループウェアの開発に携わっているサーバエンジニア。kintoneの開発リーダーとしてクラウドサービスの開発や品質向上に力を入れている。ユーザに安定した品質のサービスを提供し続けるために、Seleniumテストを開発プロセスの中に組み込み運用している。
本書14章を担当。
Twitter:@jhasepyon
清水直樹
株式会社ディー・エヌ・エーのテストエンジニアとしてサービスの品質・生産性向上に携わった後、スタートアップ企業に出向。現在は出向先の株式会社ペロリでリードエンジニアとしてサーバサイドの設計・開発やインフラ構築などに従事。
本書15章を担当。
Vishal Banthia
株式会社ディー・エヌ・エーでテスト効率や生産性向上につながるしくみづくりを行うテスト基盤チームに所属。現在OSSのopenstfのコアコミッタとしても活動。
本書15章を担当。
GitHub:vbanthia