テストスクリプトの仕様

Yuichi Kuwhara edited this page Apr 15, 2017 · 7 revisions

SIT-WTが実行するブラウザ操作はテストスクリプトと呼ばれるファイルに表形式のデータとして定義します。ファイルはMicrosoft ExcelまたはCSVで作成します。表形式のデータの1行ごとに、ブラウザ操作、操作に使用するテストデータ、スクリーンショットを撮るタイミング等を定義します。表形式データの各列の入力仕様を以下に挙げます。

  • No. スクリプト番号を記入します。スクリプト番号は操作ログに出力され、これによりテストスクリプトの1行と操作ログを紐づけて確認できるようになります。任意の文字列が記入可能ですが、紐づけがわかるよう一意となるように記入してください。
  • 項目名 操作項目の名前を記入します。項目名は操作ログに出力されます。
  • 操作 項目に対するブラウザ操作、及び、DBの検証データを記入します。詳細
  • ロケーター形式 「ロケーター」を解釈する方法を記入します。有効な値はcss、id、name、link、tag、xpathのいずれかです。省略した場合はidが適用されます。詳細
  • ロケーター ブラウザ操作の場合、項目を画面上で特定するための識別子を入力します。識別子は「ロケーター形式」に従います。
    DB検証の場合は、検証に使用するSQLファイルを指定します。
  • データ形式 「テストデータ」を解釈する方法を入力します。入力可能な値は「操作」によって異なります。
  • スクリーンショット 画面のスクリーンショットを取得するタイミングを入力します。入力可能な値は「前」「後」「前後」です。
  • ブレークポイント デバッグモードでテストを実行中に一時停止させたい場合に入力します。入力する値は任意です(空か否かを判定しています)。デバッグモードについてはこちらを参照してください。
  • テストデータ 「操作」に使用するテストデータを入力します。空にした場合、その行のテストスクリプトは実行しません。click操作等、テストデータを使用しない操作の場合は「y」を入力してください。
    列名は「"ケース_" + 数字」の書式で指定します。

Excelの数式機能

テストスクリプトをExcelで作成する場合、いずれのセルでも数式、関数を使用することができます。例えば以下の様にNo.列に「="STEP_"&(ROW()-1)」と入力すれば、テスト実行時、およびエビデンスではSTEP_1、STEP_2、STEP_3と数式の演算結果が使用されます。

No. 項目名
="STEP_"&(ROW()-1)
="STEP_"&(ROW()-1)
="STEP_"&(ROW()-1)

テストスクリプトの実行順序

テストスクリプトが実行される順序を説明します。テストスクリプトが以下の様に定義されているとします。

項目名 操作 ケース_01 ケース_02
テキストボックス1 input a i
テキストボックス2 input b j

このときの実行順序は以下の様になります。

  1. テキストボックス1にaを入力
  2. テキストボックス2にbを入力
  3. ケース_01の操作ログを出力
  4. テキストボックス1にiを入力
  5. テキストボックス2にjを入力
  6. ケース_02の操作ログを出力

つまり、テストスクリプトはケースごとに上から下に向かって実行されます。また、ケース単位で操作ログがファイルに出力されます。

操作の仕様

テストスクリプトの「操作」列に入力可能な値と、その時の挙動、他の列の値との関連を以下に挙げます。

操作 仕様
choose ロケーターで特定したラジオボタン、チェックボックスの選択操作を行います。使用例
click ロケーターで特定した要素をクリックします。
dbverify ロケーターで指定したSQLを実行し、DBに格納された値がテストデータで指定した期待値と一致するか否かを確認できます。使用例
dialog JavaScriptのalert、confirm、prompt関数で表示されるダイアログを操作します。テストデータに「true」、「ok」、「y」の何れかが入力されていた場合はダイアログの「OK」ボタンをそうでない場合は「キャンセル」ボタンをクリックします。テストデータの大文字小文字は区別しません。
drawLine ロケーターで特定したcanvas上に2点間の直線を引く操作を行います。2点の座標はテストデータに数字を「:(半角コロン)」または「:(半角セミコロン)」区切りで入力します。4つの数字が入力されている場合は左から順に、始点x、始点y、終点x、終点yと解釈します。2つの数字の場合は、最後の操作の終点を始点として終点x、終点yと解釈します。
exec ロケーターに指定された文字列をOSのコマンドとして実行します。例えばロケーターに「cmd /c mkdir testdir」が指定された場合、操作を実行するとカレントディレクトリにtestdirという名前のディレクトリが作成されます。OSのコマンドが0以外の終了コードで終了した場合はテスト失敗とみなします。
goto テストデータで指定されるケース番号からテストスクリプトの実行をやり直します。
include 別ファイルのテストスクリプトを実行します。ファイルのパスはロケーターに指定された値を使用します。パスは{project}/pagescriptからの相対パスとして解釈します。使用例
input ロケーターで特定した要素にテストデータの文字列を入力します。要素に既に文字列が入力されていた場合、文字列は削除され、テストデータの文字列で上書きされます。追記する場合は、テストデータの先頭に「append:」を付けてください。
要素がinput type="file"の場合、テストデータにファイルパスを入力することでファイル送信が行えます。ファイルパスは絶対パスまたはSIT-WTのJVMが動作しているカレントディレクトリからの相対パスで指定します。
key ロケーターで指定した要素に、テストデータで指定したキーボード操作を実行します。shift、ctrl等の特殊なキーは前置詞"key_"で定義します。複数のキーを押下する場合、":|;"で分割します。(例:shift+aを押下する場合、テストデータには"key_shift:a"を定義)
open ロケーターで指定されるURLのページを表示します。ロケーターにはhttp(s)から始まる絶対パス、またはbaseUrlからの相対パスが指定できます。ここでbaseUrlはVM引数で指定します。ロケーター、baseUrlのいずれもhttp(s)で始まらない場合、URLはファイルプロトコルとして解釈されます。
select ロケーターで特定したセレクトボックスの選択操作を行います。
setWindowSize ブラウザのウィンドウサイズを変更します。変更するサイズはテストデータにカンマ区切りで指定します。(例:200,300)
store ロケーターに変数名、テストデータに変数値を指定することで、変数に値を格納します。定義した変数はロケーターまたはテストデータ内で#{params['変数名']}で使用することができます。使用例
storeElementIndex ロケーターに指定した要素の順序情報を、データ形式で指定した変数に格納します。定義した変数は、ロケーターまたはテストデータ内で#{params['変数名']}で使用することができます。使用例
switchWindow ロケーターで指定されるウィンドウをアクティブにします。親ウィンドウをアクティブにする場合はロケーターを空にするか「_parent」を入力してください。
switchFrame ロケーターで特定したフレームをアクティブにします。親フレームをアクティブにする場合はロケーター形式を空にしてください。
verify ロケーターで特定した要素内の文字列がテストデータに一致するか否かを確認します。テストデータを「regexp:」で始めると、正規表現にマッチするか否かを確認できます。
verifySelect ロケーターで特定したセレクトボックスで選択した要素がテストデータに一致するか否かを確認します。複数選択セレクトボックスを確認する場合、テストデータにはカンマ区切りで複数の値を入力してください。
wait ロケーターで特定した要素にテストデータの文字列が表示されるまで最大で1秒間待機します。

choose操作の使用例

choose操作の使用例を挙げます。以下の様な2択のラジオボタンとそれを実装するHTMLがあるとします。

○はい ○いいえ

<input id="yorn-yes" type="radio" name="yorn" value="1"/>
<label for="yorn-yes">はい</label>
<input id="yorn-no" type="radio" name="yorn" value="0"/>
<label for="yorn-no">いいえ</label>

この時、以下のテストスクリプトの1~3はいずれも、「はい」のラジオボタンを選択することができます。

操作 ロケーター形式 ロケーター データ形式 ケース_01
1 click id yorn-yes y
2 choose name yorn 1
3 choose name yorn label はい

次にチェックボックスでの使用例を挙げます。以下の様な3択のチェックボックスとそれを実装するHTMLがあるとします。

□A □B □C

<input id="abc-a" type="checkbox" name="abc" value="a"/>
<label for="abc-a">A</label>
<input id="abc-b" type="checkbox" name="abc" value="b"/>
<label for="abc-b">B</label>
<input id="abc-c" type="checkbox" name="abc" value="c"/>
<label for="abc-c">C</label>

この時、テストデータに指定する値と操作前後のチェックボックスの状態は以下の様になります。

操作前の状態 データ形式 テストデータ 操作後の状態
1 □A □B □C a;c ■A □B ■C
2 □A □B □C label A;C ■A □B ■C
3 ■A □B □C label A ■A □B □C
4 ■A □B □C label A_off □A □B □C

複数のチェックボックスを操作する場合はテストデータを「:」または「;」で区切ります(1,2)。 操作前にチェックが入っている選択肢をテストデータに指定した場合、チェックは外れずに残ります(3)。 チェックを外す場合はテストデータの末尾に「_off」を付与します。

dbverify操作

DB接続設定

dbverify操作を行う場合、pom.xmlへのJDBCドライバの設定追加と、DB接続情報の設定ファイル作成(src/main/resources/db/connection.properties)が必要となります。

  • pom.xmlへの設定追加
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derbyclient</artifactId>
  <version>10.13.1.1</version>
</dependency>
  • DB接続情報
jdbc.url=jdbc:derby://localhost:1527/testdb
jdbc.username=app
jdbc.password=app
jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver

※各種設定値は実際のDBの接続情報としてください。上記設定例はDBがDerbyである場合の設定値となります。

使用例

dbverify操作の使用例を記載します。検証対象のDBに以下のテーブル・レコードが存在する状態とします。

  • テーブル:tab1
id col1 col2
001 111 222
002 111 333

上記テーブル・レコードを作成するDDL・DMLは以下です。

/*** DDL ***/
CREATE TABLE tab1 (
  ID char(3) PRIMARY KEY,
  col1 char(3),
  col2 char(3)
);
/*** DML ***/
INSERT INTO tab1 (
    ID, col1, col2
) VALUES (
    '001',
    '111',
    '222'
),
(
    '002',
    '111',
    '333'
);

検証に使用するSQL・テストスクリプトを以下のように作成します。SQLはテストスクリプトのロケーターで指定します。SQLではバインド変数を":変数名"で指定できます。

  • db/verify_1.sql
SELECT col1, col2 FROM tab1 WHERE id = :id
  • db/verify_2.sql
SELECT id, col1, col2 FROM tab1 WHERE col2 = :col2
  • テストスクリプト
# 操作 ロケーター テストデータ
db-1 dbverify db/verify_1.sql "param" : { "id" : "001" }, "verify" : { "col1" : "111" }
db-2 dbverify db/verify_2.sql "param" : { "col2" : "333" }, "verify" : { "id" : "002" , "col1" : "111" }

テストデータはJSONフォーマットでの記述となっており、"param"にSQLのバインド変数、"verify"に検証カラムと期待値をそれぞれ定義します。テストデータ中に記述するバインド変数名は、":"は不要です。
上述のテストスクリプトの場合、下記の通りの検証を行います。

  • db-1

id="001"のレコードのcol1カラムに"111"が格納されていること

  • db-2

col2="333"のレコードのidカラムに"002"、col1カラムに"111"が格納されていること

include操作

include操作の使用例を挙げます。 実行するテストスクリプト:MainSenario.xlsxとそこから呼び出されるテストスクリプト:Page1Script.xlsxが以下の様に配置されているとします。

project
  pagescript
    Page1Script.xlsx
  testscript
    MainSenario.xlsx

それぞれのテストスクリプトの内容は以下の通りです。

  • testscript/MainSenario.xlsx
# 操作 ロケーター ケース_1
main-1 open http://url/to/page1
main-2 include Page1Script.xlsx a
main-3 click nextButton y
  • pagescript/Page1Script.xlsx
# 操作 ロケーター ケース_a
page1-1 input textbox1 abc
page1-2 input textbox2 efg

この時のテストステップの実行順序は以下の通りです。

  1. main-1
  2. main-2
  3. page1-1
  4. page1-2
  5. main-3

store操作

store操作の使用例を挙げます。

No. 操作 ロケーター形式 ロケーター ケース_1
1 store key value
2 input id someTxt #{params['key']}
3 click link X_#{params['key']} y

上のテストスクリプトは以下の様に処理されます。

  1. 「key」というパラメーターに「value」という値を格納
  2. ロケーターがid=someTxtである項目に「value」を入力
  3. ロケーターがlink=X_valueである項目をクリック

storeElementIndex操作

storeElementIndex操作の使用例を挙げます。 以下の様なテーブルとそれを実装するHTMLがあるとします。

No. 名前 選択
1 Test1 [選択]
2 Test2 [選択]
3 Test3 [選択]

※"[選択]"はボタン

<table class="list">
  <thead>
    <tr>
      <th>No.</th>
      <th>名前</th>
      <th>選択</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Test1</td>
      <td><button onclick="select(1)">選択</button></td>
    </tr>
    <tr>
      <td>2</td>
      <td>Test2</td>
      <td><button onclick="select(2)">選択</button></td>
    </tr>
    <tr>
      <td>3</td>
      <td>Test3</td>
      <td><button onclick="select(3)">選択</button></td>
    </tr>
  </tbody>
</table>
<script>
  function select(no) {
    alert(no + "を選択しました");
  }
</script>

以下のテストスクリプトを実行すると、Test2の選択ボタンがクリックされます。

操作 ロケーター形式 ロケーター データ形式
storeElementIndex xpath //table[@class="list"]/tbody/tr/td[text()="Test2"]/.. idx
click xpath //table[@class="list"]/tbody/tr[#{params['idx']}]/td/button

ロケーター

ロケーターとは、SIT-WTがブラウザを操作する際に、HTMLの中からDOM要素を特定するために使用する識別子です。

ロケーター形式 仕様
id id属性でDOM要素を特定します。
css CSSセレクタでDOM要素を特定します。
name name属性でDOM要素を特定します。ラジオボタンやチェックボックス等、同一のname属性をもつ複数要素を操作する場合にchoose操作と併せて使用します。
link リンクの文字列(aタグのテキスト要素)でDOM要素を特定します。
tag HTMLタグでDOM要素を特定します。
xpath XpathでDOM要素を特定します。
SQLファイル名 DB検証を行う場合、検証に使用するSQLファイルを指定します。

SIT-WTでのロケーターはロケーターとSeleniumでの同義です。Selenium IDEでは「ロケーター形式=ロケーター」の様に「=」で連結したものを1つのロケーターとして入力しするのに対し、SIT-WTではロケーター形式とロケーター文字列を分けて入力します。

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.