【短縮版】ossのブラウザ自動テストツール「selenium」を使った、開発・テストの効率化...
DESCRIPTION
http://www.slideshare.net/NozomiIto/osssselenium の短縮版です。(実際に発表に使用したのはこちらの短縮版です)TRANSCRIPT
OSSのブラウザ自動テストツール「Selenium」を使った、 開発・テストの効率化
2014/02/28
日本Seleniumユーザーコミュニティ
伊藤望
自己紹介
伊藤 望
コミュニティ
「日本Seleniumユーザーコミュニティ」を主宰
テスト自動化研究会
会社
株式会社TRIDENT 代表取締役
テスト自動化の支援を行うベンチャー
www.trident-qa.com
今日はこんなことをお話します
ビジネスにおけるテスト自動化の価値
Seleniumと関連ツール群の紹介
テスト自動化を成功させるために
なぜテストを自動化するのか
近年のビジネスのトレンド
変化のスピードが早くなっている
トレンドを象徴するキーワード
<リーンスタートアップ>
<アジャイル>
<DevOps>
Webシステムはどうあるべきか?
変化にいち早く対応するために
すばやく改善したい
絶えず改善したい
このようなシステムが実現できれば、
競争優位に立てる
テストはどうあるべきか?
自動テストの場合なら
手動よりも短時間で実行可能!
低コストで何度でも実行可能!
スピードと品質の両立
システムをすばやく改善したい
システムを絶えず改善したい
さまざまな「自動テスト」の種類
自動テスト
人間の手を介さず、テストプログラムによってテストを行う
要件定義
詳細設計
基本設計
実装
結合テスト
単体テスト
総合テスト
画面テスト
• 画面からのテストを自動化
• Selenium
ユニットテスト
• 関数やクラスのテストを自動化
• JUnit, PHPUnit, などなど
ユニットテスト
public int add(int arg1, int arg2) {
return arg1 + arg2;
}
assertEquals(2, add(1, 1));
テストしたいプログラム
テストプログラム
あとで「add」メソッドの実装を変更しても、
正しく動いているかチェックできる
画面テスト
ブラウザ画面を操作するSeleniumスクリプト (例)
driver.get("http://google.co.jp"); driver.findElement(By.id("search")) .sendKeys("HTML5 カンファレンス"); driver.findElement(By.id("go_button")).click(); assertEquals(driver.getTitle(), "検索結果");
Selenium
Selenium
オープンソースの画面テストツール
仕組み
Webサーバー
クライアント端末
Selenium ブラウザ
HTTP通信 操作
Selenium クロスブラウザ 特徴 その1
1つのテストスクリプトを様々なブラウザで
Webサーバー
HTTP通信
クライアント端末
操作
様々なOS・デバイスから
Webサーバー
デスクトップ
モバイル
Selenium マルチプラットフォーム 特徴 その2
テストスクリプトはお好みの言語で
Webサーバー
Selenium マルチプログラミング言語 特徴 その3
ブラウザ操作を記録してスクリプトを生成することも
Selenium
誕生は2004年
今やブラウザテストの世界標準
W3C Working Draftとして、標準化も始まっている
Chrome、Operaは、
ブラウザ開発チームがメンテナンス http://docs.seleniumhq.org/download/ より
Selenium
Selenium利用トレンド
順調に伸びている
様々なSelenium
Selenium WebDriver
プログラミング言語のコードから実行
Selenium IDE
ブラウザ操作の記録・再生ができるFirefoxプラグイン
Selenium WebDriver
Selenium WebDriver
プログラミング言語からブラウザ操作
例) Java
driver.get("http://google.co.jp"); driver.findElement(By.id("search")) .sendKeys("HTML5 カンファレンス"); driver.findElement(By.id("go_button")).click();
例) Ruby
@driver.get "http://google.co.jp" @driver.find_element(:id, "search") ¥ .send_keys "HTML5 カンファレンス" @driver.find_element(:id, "go_button").click
Selenium WebDriver
デモ (Java)
Selenium WebDriver
使い慣れた言語でスクリプトを書ける
if文、for文、変数が使える
プログラム共通化で、メンテナンスコスト削減
Selenium WebDriver 操作対象を指定する方法
要素のidやname
リンクのテキスト
CSSセレクター
HTMLツリーの階層(xPath)で指定
By.cssSelector("#search div")
By.xpath("//input[@id='search']/div")
Selenium WebDriver 値をチェックする方法
例) 表示テキストの値をチェック
assertEquals( driver.findElement(By.id("total")).getText(), "100円");
様々な情報をチェックできる
チェックボックス・ラジオボタンの選択状態
要素の表示・非表示
要素のグレーアウト
Selenium WebDriver 様々な機能
Wait処理
AJAX非同期処理の待機などに
スクリーンショット
エラー原因の調査
多数の端末を利用した並列実行
テスト実行時間の短縮
Selenium IDE
Selenium IDE
ブラウザ操作の記録・再生ができる、
Firefoxプラグイン
Selenium IDE
活用方法 その1
記録したブラウザ操作から、
Selenium WebDriverのスクリプトを生成(エクスポート)
スクリプトの作成が楽になる
活用方法その2
Selenium IDEの画面でスクリプトを管理
プログラマーでなくてもメンテナンスできる
デモ
Selenium 関連トピック ※特に断りがない限り、全てオープンソース
モバイルテスト
Seleniumプロジェクト公式ドライバー
iPhoneDriver
AndroidDriver
サードパーティ製ドライバー
Appium
ios-driver
Selendroid
Selenium次期バージョン(Selenium3)
Appium, ios-driver, SelendroidのAPIを、
モバイルのSelenium APIとして統合へ
サポート終了へ
Seleniumプロジェクト推奨
http://www.selenium.jp/translation/androidtoiosnosapoto より
モバイルテスト Appium [アピウム]
Seleniumと同じようなコマンド体系
iOS、Anroid
ネイティブ、ハイブリッド、ブラウザ
エミュレータ、実機
HTML5
画面テストに関係するところ
inputの新しいtype
Web Storage
video
canvas
ドラッグ&ドロップ
sendKeysコマンドやJavaScript関数呼び出しで、たいてい扱える
専用のコマンドは用意されていない(今後の課題?)
ブラウザごとに対応状況にばらつき
Seleniumと同時に よく利用されるツール
DBデータチェック
DBUnit
Excelからのテストデータ読み込み
JUnitの@Parameters機能
テストのスケジュール実行・結果集計
Seleniumと同時に よく利用されるツール
クラウドのSelenium実行環境(有料サービス)
SauceLabs
TestingBot
Scirocco Cloud(モバイル)
Seleniumスクリプトをもっと書きやすく
Capybara(Ruby)
Geb(Groovy)
画面描画を行わないブラウザ
テスト自動化を 成功させるために
記録機能で、誰でも
簡単にスクリプトが作れる!
全テストを
Seleniumで自動化すればいい!
自動化すれば、
テストのコストがかからない!
テスト自動化マネジメント3つの誤解
誤解 その1
誤解 その2
誤解 その3
自動化すれば、テストのコストがかからない
スクリプト作成にはコストがかかる
作った後の方もメンテナンスコストがかかる
誤解 その1
メンテナンスのコストは
発生し続けると考える
全テストをSeleniumで自動化すればいい
画面テストはメンテナンスのコストが高い
諸事情でユニットテストが書けない場合は、
誤解 その2
ユニットテストでできるだけカバーする
メンテナンスできない量のテストを作らない
記録機能で、誰でも簡単にスクリプトが作れる
記録しただけでは安定したスクリプトにならない
画面変更に強いスクリプト
データ変更に強いスクリプト
不安定なスクリプトだと
不具合でもないのに頻繁に失敗する
誰も見なくなる
誤解 その3
それなりのスキルが必要
なんのためにテストを自動化するのか
コスト削減のため
デグレードをなくすため
すばやく、絶えずソフトウェアを改善し続けるため
攻めの自動化!
最後になりましたが..
Seleniumコミュニティのご紹介
日本Seleniumユーザーコミュニティ
2013年7月設立
メンバーは250名を突破
オンラインフォーラム 翻訳記事 勉強会資料
www.selenium.jp
困った時に質問できる場所
最新情報や様々なノウハウが得られる
今日のメッセージ
変化にいち早く対応するために
すばやく改善
絶えず改善
テストの自動化で品質を担保
スピードと品質を両立し、競争に勝つ!
ご清聴ありがとうございました