26
PHPUnitSeleniumによるWebテスト Date : 2008.02.15 Usage : 社内勉強会資料 Author: 塚本牧生 <[email protected]>

PHPUnit+SeleniumによるWebテスト

Embed Size (px)

DESCRIPTION

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

Citation preview

PHPUnit+SeleniumによるWebテスト

Date : 2008.02.15Usage : 社内勉強会資料Author: 塚本 牧生 <[email protected]>

内容

� 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)� ウィンドウ操作をする。(goBack、refresh、close)

� Seleniumでできるブラウザ表示確認(Accessorsコマンド)(次ページ)

※上記の他にもコマンドがあります。下記を参照してください。

・Selenium基本コマンドリファレンス(PDF)・Selenium 0.7 Reference(和訳)・Selenium Reference(0.8.x)

Seleniumとは� Seleniumでできるブラウザ操作(Actionコマンド)(前ページ)

� Seleniumでできるブラウザ表示確認(Accessorsコマンド)

� 文字列がタイトルに含まれているか確認する。(assertTitle)� 文字列がページ内に表示されているか確認する。

(assertTextPresent、assertTextNotPresent)� 文字列がある要素内にあるか確認する。(assertText)� アラート、ダイアログ、プロンプトをチェックする。

(assertAlart、assertConfirmation、assertPrompt)※上記の他にもコマンドがあります。下記を参照してください。

・Selenium基本コマンドリファレンス(PDF)・Selenium 0.7 Reference(和訳)・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ファイルでのテスト� 実行形態

Apache

アプリケーションテストファイルSeleniumTestRunner TestSuit.htm

①ブラウザで

TestRunnnerにアクセス②TestSuit.htmを指定③試験開始

(ブラウザを自動操作) (自動試験)

Selenium+HTMLファイルでのテスト� 試験準備

� テストケースをHTMLファイルで作成する。� テストスィートをHTMLファイルで作成する。� Selenium(Core)と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行目以降はテストケース名を表示し、テストケースにリンク

テストスィート名

テストケース名1テストケース名2

<table>

<thead><tr><td>テストスィート名</td></tr></thead>

<tbody>

<tr><td><a href="./TestCase1.htm">テストケース名1</a></td></tr>

<tr><td><a href="./TestCase2.htm">テストケース名2</a></td></tr>

</tbody>

</table>

Selenium+HTMLファイルでのテスト� デモ:社内SNS(開発環境)へのログイン

mypasswordpasswordtypebutton_loginclickAndWaitOKI SNSassertTitle

[email protected]/dev/openpne2.10/public_htmlopen

ログイン

【テストケース】 01_Login_001.htm

01_Login_00101_Login_TestSuit【テストスィート】 01_Login_TestSuit.htm

このidまたはnameアトリビュート値を

持つ要素がター

ゲットになる

01_Login_001.htmにリンクしている

Selenium+HTMLファイルでのテスト� 補足:ターゲットとElementLocator(locator)� ターゲットがHTML要素の時(最も多い)はElementLocatorで指定

� ElementLocatorは6種類(identifier、id、name、dom、xpath、link)� 通常はidentifier(またはid、name)を、略記法で書くのが便利� idやnameが適切に振られていない時は、domやxpathを使用※ OpenPNEはidやnameがあまり振られておらず、classも指定しにくい

“document.~”要素のJavaScriptでのDOM指定“dom=document.~”(なし)nameアトリビュートの値“name=~”

“//~”要素のXPath“xpath=//~”(なし)リンク内に表示される文字列“link=~”

(なし)idアトリビュートの値“id=~“下記以外の全てidまたはnameアトリビュートの値“identifier=~”

略記法略記法略記法略記法指定対象指定対象指定対象指定対象記法記法記法記法

Selenium+PHPUnitでのテスト� Seleniumとは� Selenium+HTMLファイルでのテストSelenium+PHPUnitでのテスト

Selenium+PHPUnitでのテスト� 実行形態

Apache

アプリケーション

PHPPHPUnitテストコード

Java

Selenium RC

ブラウザを

起動・操作

自動試験

HTTPアクセスPHPUnit_Ex_SeleniumTestCaseが

ラッピング・隠蔽している①SeleniumRC起動②テストコード実行

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の設定を記述する

<?php

require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class MyTestCase extends PHPUnit_Extensions_SeleniumTestCase

{

protected function setUp()

{

$this->host('localhost'); //localhostはデフォルト

$this->port(4444); //4444はデフォルト

$this->setBrowser('*iexplore');

$this->setBrowserUrl('http://www.google.co.jp/');

}

public function testLogin()

{

$this->open("/webhp");

$this->assertTitleEquals("Google");

$this->type("q", "selenium");

$this->clickAndWait("btnG");

$this->assertTitleEquals("selenium - Google 検索");

$this->assertTextPresent("selenium の検索結果");

}

}

?>

PHPUnit_Extensions_SeleniumTestCaseを

継承、拡張クラスとしてテストケースクラスを作成

SeleniumRCの動作しているホスト、ポート、

使用するブラウザ、テスト対象のベースURL等を設定

PHPUnit_Extensions_SeleniumTestCaseの

提供するテストメソッドなどを使ってテストを記述

Selenium(Core)のコマンドとコマンド名や引数が

異なるものもあるので注意

Selenium+PHPUnitでのテスト� デモ:Googleで“Selenium”を検索� HTMLで行ったものと同様の内容を、PHPUnitで実行

� 補足:SeleniumRC起動時のプロキシ指定� プロキシを利用する時は、Javaの引数で以下を指定する。

� -Dhttp.proxyHost … プロキシホスト

� -Dhttp.proxyPort … プロキシポート

� -Dhttp.proxyUse … プロキシ認証時のユーザ

� -Dhttp.proxyPassword… プロキシ認証時のパスワード

� SeleniumRC自体はプロキシ内の時は、SeleniumRCの引数で以下も指定する。

� -avoidProxySeleniumRC起動時起動時起動時起動時ののののプロキシプロキシプロキシプロキシ指定例指定例指定例指定例

java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080

-Dhttp.proxyUser=joe -Dhttp.proxyPassword=opensesami

-jar selenium_server.jar -avoidProxy

Selenium+PHPUnitでのテスト

<div style="padding:8px 6px;" class="caution">ログインに失敗しました。再度、ログイン操作を行っ

てください。<br></div>

チェックチェックチェックチェック事項事項事項事項

(対象対象対象対象) //div[@class=“caution”](内容内容内容内容) ログインに失敗しました。再度、ログイン…

Seleniumののののメソッドメソッドメソッドメソッド

・assertText(locator, テキスト文字列パターン)・assertNotText(locator, テキスト文字列パターン)

PHPUnit_Extensions_SeleniumTestCaseののののメソッドメソッドメソッドメソッド

・assertTextPresent(テキスト文字列パターン)・assertTextNotPresent(テキスト文字列パターン)

assertTextのののの動作動作動作動作

PHPからは対象箇所(locator)を指定できない。

・・・・PHPUnit_Extensions_SeleniumTestCaseののののgetTextメソッドメソッドメソッドメソッドでテキストを取得

・・・・PHPUnit_FrameworkののののassertContainsメソッドメソッドメソッドメソッドで検証

$caution = $this->getText("xpath=//div[@class='caution']");$this->assertContains("ログインに失敗しました。再度、ログイン操作を行ってください。", $caution, '');

� PHPUnit方式の利点PHP、PHPUnitの機能も利用できる

� ケース:OpenPNEのログインエラーの検証

Selenium+PHPUnitでのテスト� PHPUnit方式の利点:サーバ側への設置が不要

PHPPHPUnitテストコード

Java

Selenium RC

Apache

テストファイルSeleniumTestRunner TestSuit.htm Selenium++++HTML方式方式方式方式

テスト環境をサーバ側に配置。

テスト修正の都度、設置作業が

発生する。

テスト実行者以外はテスト環境に

アクセスさせない配慮が必要。

SeleniumRC++++PHPUnit方式方式方式方式

テストファイルはローカルに配置。

Selenium+PHPUnitでのテスト� PHPUnit方式の利点:複数のクライアント環境から一元テスト可能

LinuxSeleniumRC

WindowsSeleniumRC

FFIE

HTTPDアプリ

WindowsPHP

PHPUnitテストコード

Firefox

まとめ

� 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+(Japanese)

� 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 RChttp://openqa.org/selenium-rc/