Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Selenium 0.7利用手順書(後編)

テストケースの作成とテストの実行

  • LINEで送る
  • このエントリーをはてなブックマークに追加

ダウンロード SeleniumSampleCode.zip (2.0 KB)

本稿では、Webアプリケーション用のテストツールSelenium(セレニウム)を利用するための手順を解説します。Seleniumは、ブラウザ操作を自動化して、Webアプリケーションの試験・検証を効率的に行うことができ、OS/ブラウザ互換などの特徴を持っています。今回は、テストケースについての解説および、記述方法ほか、テストケースを用いたテストの実行方法について解説します。

目次

はじめに

 本ドキュメントは、Webアプリケーション用のテストツールSelenium(セレニウム)を利用するための手順を解説するものです。

 前回はSeleniumの機能概要について解説してきました。Seleniumを使用することで、ブラウザ操作を自動化して、Webアプリケーションの試験・検証を効率的に行うことができます。今回は、いよいよテストケースについての解説です。テストケースを実際に記述し、Seleniumでテストを実行してみます。

読者対象

 プロジェクトの試験担当者を想定しています。

対象フェーズ

 本ドキュメントではプロジェクトにおいて、作成したWebアプリケーションに対してブラウザを用いた試験(結合試験・総合試験)を実施するフェーズを対象としています。Webアプリケーションの製造、単体試験フェーズや、外部のアプリケーションに対する試験については対象外です。

使用したソフトウェア・環境

 Seleniumを動作させるにあたり、以下のソフトウェアを使用しました。本ドキュメントはこれらのソフトウェアを使用しているという前提で記述しています。

表1 使用したソフトウェア
カテゴリソフトウェアバージョンバージョン
OSWindows XP Professional2002 SP22002 SP2
JavaVMJDK(JRE)1.4.2_101.5.0_06
Web/APサーバTomcat5.0.285.5.16
RDBMSMySQL4.1.164.1.16
IDEEclipse3.0.13.1.1
Eclipse pluginsysdeo tomcat plugin3.0.03.1.0
ブラウザInternet Explorer(以下IE)6.0 SP26.0 SP2

 2006年5月14日にSelenium(Selenium Core)のバージョン0.7.0がリリースされました。本書ではSeleniumのバージョン0.7.0を使用しています。

表2 本書におけるSeleniumのバージョン
カテゴリソフトウェアバージョン
SeleniumSelenium Core0.7.0
Selenium IDE0.7.2

 テストの環境としては、ローカルマシンにてWeb/APサーバ(Tomcat)を起動してテスト対象アプリケーションをデプロイしています。テスト対象のアプリケーションとして、プレゼンテーション層にStruts(1.2.7)を用いて作成されたJavaEE/Webアプリケーションを使用しました。

テストケースの書き方

基本書式

 それではいよいよ実際にテストケースを書いていきましょう。

 テストケースはhtmlのtableを利用して記述します。htmlのファイル名は自由に付けてかまいません。作成したhtmlファイルは、現状では任意の作業フォルダに保存してください。tableは、テスト名を表す1カラムの1行目と、具体的なテスト手順を記述した3カラムの複数行から構成されます。

 テスト手順の1行は1手順を表し、3つの項目から構成されます。行の左から、コマンド、ターゲット、バリューです。

図1 テストケースのtable書式
テスト名
コマンド1ターゲット1バリュー1
コマンド2ターゲット2バリュー2
コマンド3ターゲット3バリュー3

 htmlは次のようになります。

MyTestCase01.html
<html>
<head><title>テスト名</title></head>
<body>
<table cellpadding="1" cellspacing="1" border="1">

<thead>
<tr><td rowspan="1" colspan="3">テスト名</td></tr>
</thead>

<tbody>
<tr>
    <td>コマンド1</td>
    <td>ターゲット1</td>
    <td>バリュー1</td>
</tr>
<tr>
    <td>コマンド2</td>
    <td>ターゲット2</td>
    <td>バリュー2</td>
</tr>
<tr>
    <td>コマンド3</td>
    <td>ターゲット3</td>
    <td>バリュー3</td>
</tr>
    :
</tbody>
</table>
</body>
</html>
 <thead><tbody>タグは無くてもかまいません。

 「MyTestCase01.html」の6行目で、1行目のテスト名を指定しています。1カラムなので3カラムを結合させています。

「MyTestCase01.html」の6行目
<tr><td rowspan="1" colspan="3">テスト名</td></tr>

 次に、1行1手順を表す3カラムは11行目~15行目となります。

「MyTestCase01.html」の11行目~15行目
<tr>
    <td>コマンド1</td>
    <td>ターゲット1</td>
    <td>バリュー1</td>
</tr>

 例えば、次のような試験項目を考えてみます。

  • 内容
  • ログインテスト
  • 手順
    1. ログイン画面のURLを開く
    2. IDのテキストボックスに社員番号xxxxxを入力
    3. パスワードのテキストボックスにyyyyyを入力
    4. ログインボタンを押す
    5. ログイン後のホーム画面に遷移したことを確認

 その場合、以下のようなtableをhtmlで作成することになります。

図2 ログインのテストケースのtable書式
ログインテスト
URLを開くログイン画面のURL
入力IDxxxxx
入力パスワードyyyyy
クリックログインボタン
検証ホーム画面のtitle

 ターゲットやバリューに何を指定するかは、使用するコマンドによって変わってきます。Seleniumのコマンド詳細については「Selenium 0.7 日本語リファレンス」を参照してください。

 まず、Seleniumのコマンドを構成する要素についてみていきましょう。

コマンド

 コマンドにはActionAccessorAssertionの3種類があります。

 Actionコマンドはアプリケーションの状態を操作するものです。例えば、名前のフォームに入力したり、ボタンをクリックしたりといった動作を行います。多くのActionコマンドは「AndWait」という接尾辞を付けることができます。「AndWait」接尾辞を付けた場合、Seleniumはそのコマンドを実行した後、アプリケーションがサーバ通信を行って新たなページがロードされるまで待ちます。

 Accessorコマンドは、アプリケーションの状態を検査して結果を変数に保存します。また、自動的にAssertionコマンドを生成します。

 Assertionコマンドはアプリケーションの状態が期待しているものと合致しているか検証するものです。例えば「XXXXXという文字列が表示されているか」とか「このページのタイトルがYYYYであるか」といった検証を行います。すべてのAssertionコマンドは3つの形式(接頭辞)があります。「assert」「verify」「waitFor」です。

 assertが失敗した場合、テストは中止されます。verifyが失敗した場合は、失敗はログに記録されてテストは継続実施されます。waitForはいくつかの条件が満たされることを待ちます。waitForでは条件が既に満たされている場合は直ちに検証成功となります。しかし、現在のタイムアウト設定の時間内に条件が満たされなかった場合には検証失敗となり、テストを中止します。

 Seleniumのコマンド詳細については「Selenium 0.7 日本語リファレンス」を参照してください。

ElementLocator

 ElementLocatorとは、コマンドがどのHTML要素を参照するのかを指定するものです。多くのコマンドはElementLocatorをターゲットとして必要とします。

 ElementLocatorの書式は次のとおりです。

ElementLocatorの書式
locatorType=引数値

 Seleniumでは、ElementLocatorとして以下のlocatorTypeに対応しています。

identifier

書式identifier=id属性値またはname属性値

 id属性で指定された要素を選択し、id属性で合致するものがなければname属性で指定された要素のうち最初に合致したものを選択します(これは通常デフォルトの動作です)。

id

書式id=id属性値

 id属性で指定された要素を選択します。

name

書式name=name属性値

 name属性で指定された要素のうち、最初に合致したものを選択します。また、valueやindexを組み合わせて条件を絞り込むことができます(element-filterと言います)。element-filterは空白区切りで指定します。これはselect要素などで複数name属性がある場合に有効です。

name=flavour value=chocolate
name=flavour index=0

dom

書式dom=javascript表現法

 HTML DocumentObjectModel(DOM)のJavascript Traversalモジュールを使って要素を見つけます。JavaScript表現法で指定するDOMのロケータはdocument.で始まらなければなりません。

dom=document.forms['myForm'].myDropdown
dom=document.images[56]

xpath

書式xpath=xpath表現

 XPath表現を使用して要素の場所を特定します。XPath表現は//で始まらなければなりません。

xpath=//img[@alt='The image alt text']
xpath=//table[@id='table1']//tr[4]/td[2]

link

書式link=リンクの文字列pattern

 指定された文字列patternと合致するテキストを含むリンク(anchor)要素を選択します。

link=The link text

 ElementLocatorのprefix(locatorType)がない場合、Seleniumは以下のものと解釈して動作します。

  • ocument.から始まっている場合 …… dom=と解釈して動作
  • //から始まっている場合 …… xpath=と解釈して動作
  • それ以外 …… identifier=と解釈して動作

文字列マッチングパターン

 Seleniumでは、文字列のマッチングとして以下のパターン構文を利用することができます。

glob

書式glob:パターン文字列

 globパターン(別名wildmatパターン)での文字列マッチングです。globは一種の限定正規表現で、コマンドラインシェルで典型的に使用されます。*は任意の複数の文字を表し、?は任意の1文字を表します。globパターンは文字列全体に対してマッチングします。

regexp

書式regexp:正規表現

 正規表現を用いた文字列マッチングです。JavaScriptの正規表現をフルに使用可能です。

exact

書式exact:文字列

 ワイルドカードを使用せずに、正確に同一の文字列マッチングを行います。

 マッチングパターンを示す「prefix(xxx:)」がない場合、Seleniumはglobパターンであると仮定して動作します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2006/08/03 11:40 8/3 SelneiumIDEでassertTitleを自動的に記録する旨の記述を修正(オプション設定)

著者プロフィール

バックナンバー

連載:Selenium 0.7利用手順書
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5