情シスは何度でも甦るさ。

OracleDB/Ruby好きの情シス部員がお送りします

Oracle Functional Testing OpenScriptでWeb自動テスト2

前回からの続き

じゃ、早速、OpenScriptで、スクリプトを作っていきましょう。


1.OpenScriptの入手
本当は高いお金がかかりますが、Oracleの製品は基本的に試用版として製品と同等のソフトウェアがダウンロード可能です。

試用版のダウンロードは、Oracleのアカウントさえあれば、誰でもここからできますので、ダウンロードしましょう。


2.OpenScriptのインストール

Windowsインストーラなので、基本叩いて次へで終わります。

一応、インストールガイドは、こちらにあります。

気をつけるのは、何も考えずにやると、Oracle Testing Suiteの全ソフトウェアをインストールされることになります。

その場合は、OracleDBやWebLogicが必要になるので、上記インストールガイトの『?3-a-4.インストールタイプを選択します』で、「Oracle Functional Testing (OpenScriptのみ)」を選択しましょう。


3.OpenScriptの起動とスクリプトの作成

今回は、簡単なスクリプトということで、Cookcpadのサイトを検索して、一番上の検索結果をクリックするというスクリプトを作ります。
スクリプトを作ると言っても、エクセルのマクロを記録するのとほとんど変わりません。

では、早速インストールされたOpenScriptを起動します。Windowsのメニューから、起動させて下さい。

EclipseベースのOpenScriptが起動します。

まず、メニューから、[ファイル]-[新規]を選択し、ウィザードが開くので、[機能テスト(ブラウザ/GUI自動化)]-[Web]を選択します。

次にスクリプト名を入力して、[終了]ボタンを押すとスクリプトが作成されます。

補足ですが、OpenScriptでは通常のソフトと違い、作成したスクリプトリポジトリという指定のディレクトリ配下にしか保存できません。
リポジトリは、インストールフォルダの配下の[OFT]というフォルダになります。


4.スクリプトの記録

では、スクリプトに、テストを記録します。
今回のオペレーションは、
 1.http://cookpad.com/ にアクセス
 2.coockpadの検索窓に、「ラーメン」と入力し検索ボタン押下
 3.検索結果の一番上のリンクを押し、レシピページへ
というもの。

では、最初にツールバーにある記録ボタン(赤丸)を押します。

すると、IE(設定でFirefoxもできる)と専用のツールバーが起動するので、普通に記録したい操作を行います。(ここらへんは、Seleniumと同じですね)

記録が終わったら、停止ボタン(赤四角)を押すと記録完了です。
この時のHTMLやスクリーンショットは取得されるので、あとからそれを見ることも可能です。

記録されたオペレーションがスクリプトに追加されています。

気をつけたいのは、できるだけマウスを使用して、タブとかエンターなどを使わないようにしましょう。

さて、次に記録したスクリプトのテストですが、これはツールバー上の再生ボタン(青い三角)を押せば、あら不思議。先ほどのオペレーションが、再生されます。

実行結果は、テストレポートとして、表示されます。

テストの時にもスクリーンショットやHtmlが保存されるので、スクリプト記録時のスクリーンショットと比較することが可能です。


5.データバンクの設定

さて、ここまではSeleniumでも可能ですが、OpenScriptでは、ここからが一味違います。

今回、cockpadの検索窓に「ラーメン」と入力しましたが、実際の機能テストでは、入力項目にいろんな値を入れてテストしたいでしょう。

つまり、入力項目を変数化した上で、その変数に色んな値を入力しながらスクリプトを実行したい。という要求です。
それに対してデータバンクという機能で実現ができます。

データバンクは、CSVか、DBから入力項目を取得することが可能ですが、今回はCSVでテストしてみましょう。


5.1 CSVの作成
今回は、一回のオペレーションで一回の入力項目しか使わないので項目がひとつのファイルになります。
実際は、エクセルで作るなりすることでしょう。
一行目はカラム名を指定します。

これを、OpenScriptのリポジトリフォルダの配下にある『DataBank』フォルダに掘り込みます。


5.2 入力項目の変数化
次はその変数を実際にスクリプト上で使用します。

スクリプトのツリーを展開して、見てみると、『SetText TextBox("@id='keyword'")ラーメン』 という表記が見られます。
まさにここが、検索ボックスに「ラーメン」と入力した操作を記録した部分です。


ですので、そのツリーを選択し、右クリックメニューから、[プロパティ]を選択します


すると、Set Textの値に『ラーメン』と書かれてあります。
この『ラーメン』という文字列を削除してから、右のディスクのマークをクリックします


[データバンク]の[新規データバンクの追加]を選択

CSVファイルを選択

CSVファイルを選択しますためにリポジトリフォルダが表示されるので、リポジトリ入れておいたDataBankファイル(menu.csv)を選択します。

CSVファイルの項目を読み取ります。ので、変数化したいカラムを選択します。

終了を押すと、テキストのところにデータバンク変数が登録されています。


OKを押下すると、ツリー上にも変更が反映されています。


5.2 スクリプトの実行
いざ、データバンクのスクリプトの実行します。

データバンクのスクリプトを実行するには、反復実行というメニューを選択します。
再生ボタンの右にある、くるくる回る矢印が入ってるやるです。


それを入力すると、実行メニューが出てきます。ここで、csvをシーケンスに読むか、ランダムに読むか、指定された行のみ実行するかなどが選択できます。


そして、実行すると見事にcsvのデータすべてで操作を繰り返したテストが実行されます。

テスト結果からは、テスト時のスクリーンショットなども見れますから、スクリプトを流しっぱなしにして、結果の詳細を見ることも可能です。


他にも、テキストマッチングテスト(テスト時に、テキストがきちんと表示されているか)
オブジェクトテスト(タグが存在するかなど)などもできます。
その他、公式サイトのチュートリアルをご参照。


補足 データバンク変数の削除
データバンクについて、ちょっと迷ったのが、一度設定したデータバンクを消したい時の方法。
メニューから、[スクリプト]-[スクリプトプロパティ]を選択し、[スクリプトアセット]-[データバンク]から、スクリプトに登録されているデータバンクを編集・削除することができます。


6.関数の設定
他にも、テストでは、ランダムな数字、日付を入力項目に入れたいという要望もあるでしょう。
そういう場合は、OpenScriptで準備されている関数を使えば可能です。

先ほどのスクリプトで、データバンク変数を設定した入力項目に対して、10から100までのランダムな数字を入力することにします。
まず、先ほどのツリーの右クリックから、プロパティを選択し、ディスクマークをクリック

次に、変数選択ウィザードで[関数]-[@random] を選択します。

すると、関数らしきものが入力されました。minから、maxの間の数字が入力されるようです。

データバンクでは、{{ }} は、変数を表す書式のようです。なので、{{10}} と書くと、10という変数名と解釈するので、{{ }}をとっぱらって10と100を入力します。

これで再度テストをすると、検索ボックスに、ランダムな数字が入力されます。

このrandom関数を使えば、年月日などの項目でも、ランダムな月日を入力することが可能です(特に意識しなくても、文字列連結が可能)

あとは、URLなんかも、変数の文字列で加工できるので、パラメータを動的にテストしたりと、色々できると思います。


7.思考遅延

OpenScriptでは、思考遅延という概念があります。
それは、Webサイトを操作する際に、人間は色々と考えて操作をします。
そういった思考する時間を考慮せずにテストをすると、例えばユーザーのクリックに合わせてページが可変したりする場合に、その対応が間に合わず次の操作をされると、テストはエラーとなってしまいます。
そのため、OpenScriptでは、テスト時の操作時間を記録しており、その時間通りに入力を行います。それが思考遅延です。
ただ、記録時にモタモタしてると、常にその時間でテストがされるため、逆にイライラすることもあります。
そのため、その思考遅延を設定で変更することができます。

OpenScriptのメニューから、[表示]-[OpenScriptの詳細設定]を選択し、[OpenScript]-[再生]の[一般]に[VUページング(シンクタイム)]があります。

そこを、[ランダム]に設定し、最小、最大の秒数を設定するとその範囲で思考遅延が行われます。[遅延なし]を選択するとサクサク動きますが、可変的なページではページの遷移が間に合わない時もあるのでお気をつけ下さい。


というわけで、OpenScriptのお話。
実際プロジェクトで使用するには、大量のスクリプトを定期的に呼び出して、結果を確認するというCI的なことが必要ですが、
そこはまだ調べ中なので、調べれたら書きたいとおもいます。(ANTから呼べる機能があるみたい。。。)
もっとも、今の案件で使う予定なので、調査が間に合うのか心配だ。。。ここらへん日本語のマニュアルが無いんだもん。