• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHPUnit+SeleniumによるWebテスト
 

PHPUnit+SeleniumによるWebテスト

on

  • 6,870 views

2008年2月に社内で行った勉強会資料

2008年2月に社内で行った勉強会資料

Statistics

Views

Total Views
6,870
Views on SlideShare
6,841
Embed Views
29

Actions

Likes
2
Downloads
22
Comments
0

1 Embed 29

http://www.slideshare.net 29

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHPUnit+SeleniumによるWebテスト PHPUnit+SeleniumによるWebテスト Presentation Transcript

    • PHPUnit+SeleniumによるWebテスト Date : 2008.02.15 Usage : 社内勉強会資料 Author: 塚本 牧生 <tsukamoto@gmail.com>
    • 内容 Seleniumとは Selenium+HTMLファイルでのテスト Selenium+PHPUnitでのテスト
    • Seleniumとは Seleniumとは Selenium+HTMLファイルでのテスト Selenium+PHPUnitでのテスト
    • Seleniumとは Webアプリケーションのクライアントサイド試験ツール Seleniumでできること ブラウザの自動操作 ブラウザの表示内容の検証 これらを使ってユーザインターフェースの試験が可能 Firefox、IE、Opera、Safariなどブラウザを切り替えて試験が可能 一連の操作、検証を「テストケース」にまとめて実行できる。 一連のテストケースと「テストスィート」にまとめて実行できる。 これらを使って(半)自動試験が可能
    • Seleniumとは Seleniumでできるブラウザ操作(Actionコマンド) ページを開く。(open) ボタンやリンクをクリックする。(click/clickAndWait) フォームへの入力や操作をする。(type、check、uncheck、select) キー操作をする。(keyPress、keyUp、keyDown) マウス操作をする。 (mouseOver、mouseOut、mouseDown、mouseUp) Seleniumでできるブラウザ表示確認(Accessorsコマンド) ウィンドウ操作をする。(goBack、refresh、close) (次ページ) ※上記の他にもコマンドがあります。下記を参照してください。 ・Selenium 0.7 Reference(和訳) ・Selenium基本コマンドリファレンス(PDF) ・Selenium Reference(0.8.x)
    • Seleniumとは Seleniumでできるブラウザ操作(Actionコマンド) Seleniumでできるブラウザ表示確認(Accessorsコマン (前ページ) ド) 文字列がタイトルに含まれているか確認する。(assertTitle) 文字列がページ内に表示されているか確認する。 (assertTextPresent、assertTextNotPresent) 文字列がある要素内にあるか確認する。(assertText) アラート、ダイアログ、プロンプトをチェックする。 (assertAlart、assertConfirmation、assertPrompt) ※上記の他にもコマンドがあります。下記を参照してください。 ・Selenium 0.7 Reference(和訳) ・Selenium基本コマンドリファレンス(PDF) ・Selenium Reference(0.8.x)
    • Seleniumとは デモ : Googleで“Selenium”を検索 ThinkIT連載「SeleniumでWebアプリケーションテストを自動化」第2回より http://www.thinkit.co.jp/free/article/0705/2/2/
    • Selenium+HTMLファイルでのテスト Seleniumとは Selenium+HTMLファイルでのテスト Selenium+PHPUnitでのテスト
    • Selenium+HTMLファイルでのテスト 実行形態 Selenium テストファイル アプリケーション TestRunner TestSuit.htm Apache (ブラウザを自動操作) (自動試験) TestRunnnerにアクセス ①ブラウザで ②TestSuit.htmを指定 ③試験開始
    • Selenium+HTMLファイルでのテスト 試験準備 テストケースをHTMLファイルで作成する。 Selenium(Core)とHTMLファイル群を、 テストスィートをHTMLファイルで作成する。 Selenium(Core) ⇒ http://www.openqa.org/selenium- 試験対象アプリケーションのあるサーバに設置する。 core/ ※ SeleniumのTestRunnerにアクセスする。 試験 テストスィートのHTMLファイルを読み込ませる。 TestRunnerがブラウザを自動操作して試験を進めていく。 実行する。 デモ
    • Selenium+HTMLファイルでのテスト テストケースの書き方 大田尾 一作「Selenium基本コマンドリファレンス(PDF)」より
    • Selenium+HTMLファイルでのテスト テストケースの書き方 大田尾 一作「Selenium基本コマンドリファレンス(PDF)」より
    • Selenium+HTMLファイルでのテスト テストケースの書き方 テストスィートもHTMLで書く 1行1カラム 1行目はテストスィート名 2行目以降はテストケース名を表示し、テストケー スにリンク <table> テストスィート名 <thead><tr><td>テストスィート名</td></tr></thead> <tbody> テストケース名1 <tr><td><a href=quot;./TestCase1.htmquot;>テストケース名1</a></td></tr> <tr><td><a href=quot;./TestCase2.htmquot;>テストケース名2</a></td></tr> テストケース名2 : </tbody> : </table>
    • Selenium+HTMLファイルでのテスト デモ:社内SNS(開発環境)へのログイン 【テストケース】 01_Login_001.htm ログイン open /dev/openpne2.10/public_html type username me@pc.example.com type password mypassword clickAndWait button_login assertTitle OKI SNS このidまたはname アトリビュート値を 持つ要素がター ゲットになる 【テストスィート】 01_Login_TestSuit.htm 01_Login_TestSuit 01_Login_001 01_Login_001.htm にリンクしている
    • Selenium+HTMLファイルでのテスト 補足:ターゲットとElementLocator(locator) ターゲットがHTML要素の時(最も多い)はElementLocator ElementLocatorは6種類(identifier、id、name、dom、xpath、 で指定 link) idやnameが適切に振られていない時は、domやxpathを使用 通常はidentifier(またはid、name)を、略記法で書くのが便利 OpenPNEはidやnameがあまり振られておらず、classも指定しにくい ※ 記法 指定対象 略記法 idまたはnameアトリビュートの値 下記以外の全て “identifier=~” idアトリビュートの値 “id=~“ (なし) nameアトリビュートの値 “name=~” (なし) “dom=document.~” 要素のJavaScriptでのDOM指定 “document.~” “xpath=//~” “//~” 要素のXPath “link=~” リンク内に表示される文字列 (なし)
    • Selenium+PHPUnitでのテスト Seleniumとは Selenium+HTMLファイルでのテスト Selenium+PHPUnitでのテスト
    • Selenium+PHPUnitでのテスト 実行形態 アプリケーション Apache HTTPアクセス PHPUnit_Ex_SeleniumTestCaseが 自動試験 ①SeleniumRC起動 ラッピング・隠蔽している ②テストコード実行 Selenium RC テストコード PHPUnit Java PHP ブラウザを 起動・操作
    • Selenium+PHPUnitでのテスト 試験環境の構築 PHPをインストールする。 PEARを設定する。(PEARの初回利用時) PHPUnit(バージョン3.2以降)をインストールする。 3.2.0RC2からPHPUnit_Extension_SeleniumTestCaseが利用可 ※ Java(バージョン1.5以降)をインストールする。 能。 Selenium RCを取得し、展開しておく。 Selenium RC ⇒ http://openqa.org/selenium-rc/ ※ WindowsでのでのPEARの設定とPHPUnitインストール の設定と での インストール C:¥> cd c:¥php C:¥PHP> go_pear.bat C:¥PHP> pear channel-discover pear.phpunit.de C:¥PHP> pear install phpunit/PHPUnit
    • Selenium+PHPUnitでのテスト 試験準備 テストケースをPHPファイルとして作成する。 SeleniumRCに含まれているselenium- 試験 server.jarを実行する。 phpunitで作成したPHPファイルを実行する。 ブラウザを起動、自動操作され、試験が進んで いく。 SeleniumRCの起動 の C:¥MyTest> java –jar selenium_server.jar テストPHPスクリプトの起動 スクリプトの テスト スクリプト C:¥MyTest> phpunit MyTesrCase.php
    • Selenium+PHPUnitでのテスト テストケースの書き方 PHPUnit_Extensions_SeleniumTestCaseを継承する setUpメソッドは必須、Seleniumの設定を記述する PHPUnit_Extensions_SeleniumTestCaseを <?php require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class MyTestCase extends PHPUnit_Extensions_SeleniumTestCase 継承、拡張クラスとしてテストケースクラスを作成 { protected function setUp() { SeleniumRCの動作しているホスト、ポート、 $this->host('localhost'); //localhostはデフォルト $this->port(4444); //4444はデフォルト 使用するブラウザ、テスト対象のベースURL $this->setBrowser('*iexplore'); 等を設定 $this->setBrowserUrl('http://www.google.co.jp/'); } public function testLogin() { PHPUnit_Extensions_SeleniumTestCaseの $this->open(quot;/webhpquot;); $this->assertTitleEquals(quot;Googlequot;); Selenium(Core)のコマンドとコマンド名や引数が $this->type(quot;qquot;, quot;seleniumquot;); 提供するテストメソッドなどを使ってテストを記述 $this->clickAndWait(quot;btnGquot;); $this->assertTitleEquals(quot;selenium - Google 検索quot;); 異なるものもあるので注意 $this->assertTextPresent(quot;selenium の検索結果quot;); } } ?>
    • Selenium+PHPUnitでのテスト デモ:Googleで“Selenium”を検索 HTMLで行ったものと同様の内容を、PHPUnitで実行 補足:SeleniumRC起動時のプロキシ指定 プロキシを利用する時は、Javaの引数で以下を指定する。 -Dhttp.proxyHost … -Dhttp.proxyPort プロキシホスト … -Dhttp.proxyUse プロキシポート … -Dhttp.proxyPassword … プロキシ認証時のユーザ SeleniumRC自体はプロキシ内の時は、SeleniumRCの引数 プロキシ認証時のパスワード で以下も指定する。 -avoidProxy SeleniumRC起動時のプロキシ指定例 起動時のプロキシ指定例 起動時 java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttp.proxyUser=joe -Dhttp.proxyPassword=opensesami -jar selenium_server.jar -avoidProxy
    • Selenium+PHPUnitでのテスト PHPUnit方式の利点PHP、PHPUnitの機能も利用でき る ケース:OpenPNEのログインエラーの検証 Seleniumのメソッド の ・assertText(locator, テキスト文字列パターン) ・assertNotText(locator, テキスト文字列パターン) <div style=quot;padding:8px 6px;quot; class=quot;cautionquot;> PHPUnit_Extensions_SeleniumTestCaseの の ログインに失敗しました。再度、ログイン操作を行っ メソッド </div> てください。<br> ・assertTextPresent(テキスト文字列パターン) ・assertTextNotPresent(テキスト文字列パターン) (対象 //div[@class=“caution”] assertTextの動作 チェック事項 チェック事項 (内容 ログインに失敗しました。再度、ログイン… PHPからは対象箇所(locator)を指定できない。 対象) の 対象 内容) 内容 ・PHPUnit_Extensions_SeleniumTestCaseのgetTextメソッド ・PHPUnit_FrameworkのassertContainsメソッド メソッドでテキストを取得 の メソッド メソッドで検証 の メソッド $caution = $this->getText(quot;xpath=//div[@class='caution']quot;); $this->assertContains(quot;ログインに失敗しました。再度、ログイン操作を行ってください。quot;, $caution, '');
    • Selenium+PHPUnitでのテスト PHPUnit方式の利点:サーバ側への設置が不 要 Selenium テストファイル TestRunner TestSuit.htm Selenium+HTML方式 + 方式 テスト環境をサーバ側に配置。 Apache テスト修正の都度、設置作業が 発生する。 テスト実行者以外はテスト環境に アクセスさせない配慮が必要。 Selenium RC テストコード PHPUnit Java PHP SeleniumRC+PHPUnit方式 + 方式 テストファイルはローカルに配置。
    • Selenium+PHPUnitでのテスト PHPUnit方式の利点: 複数のクライアント環境から一元テスト可能 アプリ HTTPD IE FF Firefox SeleniumRC SeleniumRC PHPUnit テストコード Windows Linux PHP Windows
    • まとめ Seleniumを使ったテスト ブラウザを操作して、ユーザインターフェースの自動試験ができる。 テスト方式は2種類 Selenium(Core)+HTMLファイル SeleniumRC+xUnit+テストコード(Java, .net, PHP, Perl, Ruby, etc.) 以下の場合はSeleniumRC方式 テストをサーバに設置したくない 設置の手間を省きたい 開発者以外が実行するのを避けたい テストにxUnitや言語の機能を使いたい カバレッジを集計したい DB上のデータと突き合せたい データドリブンで試験したい 各テストで毎回行う作業(ログインなど)をサブルーチン化したい 複数のテスト環境からのテストを一元管理したい
    • 参考URL(登場順) Selenium基本コマンドリファレンス(PDF) http://www.thinkit.co.jp/cert/article/0705/2/5/Selenium_com.pdf Selenium 0.7 Reference(和訳) http://wiki.openqa.org/display/SEL/Selenium+0.7+Reference+(Japanes e) Selenium Reference(0.8.x) http://release.openqa.org/selenium-core/0.8.0/reference.html SeleniumでWebアプリケーションテストを自動化 http://www.thinkit.co.jp/free/article/0705/2/2/ Selenium(Core) http://www.openqa.org/selenium-core/ Selenium RC http://openqa.org/selenium-rc/