作成されるテスト結果 - 以下のようなHTMLが作成されます。
Canoo WebTestとはオープンソースのWeb自動テストツールスイスのCanoo社が開発しているオープンソースのWeb自動テストツールです。別途ブラウザーを立ち上げるわけではなく、内部でHtmlUnitを呼び出してテストしますので比較的高速に動作します。
一応、XMLファイルを編集するだけでテストを作成できますので一応プログラム言語に精通していなくてもテストを作成実行が可能です。
どのようなユーザー向きか
Ant/Mavenが好き。Groovy言語が得意。HtmlUnitを使ってテストしている人
XML入力に慣れてないと不向きかもしれません。動作が速いのでチェック用にも向いています。
Firefoxが大好きな人は、Seleniumというテストツールがあります。
AntベースCanoo WebTestの大きな特徴の1つがテストファイルがAnt形式のファイルであるという所です。
なので、Antが動く環境ならば、パスを通せば呼び出すことでき、またAntの各種機能を使ってテストの準備やテスト後の処理も行えます。
また、Groovy言語でもテストを書くことができます。
内部エンジンはHtmlUnit内部エンジンでHtmlUnitを使っていますので、HtmlUnitで直接プログラムを書くよりは手間が省ける場合もあります。
Canoo社は、HtmlUnitの開発サイトのホスティングもしているぐらいなので、親和性は高いのではと思います。
一応、HtmlUnitはJavaScriptが動きますので(最新版のGWTとかは無理です) 動的なWebページのテストにも使えることがあります。
初めて使ってみるインストールJava Runtimeは当然としてAntは含まれていますので別に必要ありません。
2010年2月では最新安定版は、3.0(HtmlUnit 2.4)ですが、開発途中の最新版はr1802(HtmlUnit 2.7 snapshot)内包していました。
ダウンロードページからダウンロードできます。JavaScript使わないなら3.0で使うならたまに動くことを期待して開発版を使うのはどうでしょうか。
ダウンロードしたらファイルを展開して好きな場所に置きます。
私は、C:\java\lib\canoo3.0 としました。
そして、Windowsでしたら、環境設定 PathにC:\java\lib\canoo3.0\bin を通します。
あとは、コマンドプロンプトから、webtestとし実行したら
Buildfile: build.xml does not exist! Build faild と出るならインストールは成功です。
動かしてみる動作させるには、テストスクリプトなどを書かないといけませんが、デフォルトのプロジェクトを作ってくれるコマンドがありますので、それを実行します。
実行した場所の下に指定したプロジェクト名でフォルダーができます。
C:\java\lib\canoo3.0\test> webtest -f c:\java\lib\canoo3.0\webtest.xml wt.createProject すると、Project名を入れる画面になるので、何か(Test1)とか入れます。
するとTest1とかフォルダーができます。
ちなみに、このコマンドはおそらく、テスト作成する度に実行しますので、batファイルを作って置いてテスト用のフォルダーに入れて置くと便利ですよ。
ただ、初期だといらないtestが多いので、別のテストをフォルダーごとコピーした方が楽なこともあります。
あとは、作成したTest1とかに移動して、webtestと入力するとテストが実行されブラウザーに結果が表示されます。
C:\java\lib\canoo3.0\test\Test1> webtest 最初はこんな感じで、最初の Google's top 'WebTest' result
とかも以下のようなエラーでテストが失敗していると思います。
TypeError: Cannot find function setEndPoint in object [object].
これは、デフォルトだとブラウザーがIE6なのが原因です。configにbrowser指定でff3(FireFox3)とかすると多少ましになります。(各テストごとに指定します)
<project default="test"> <target name="test"> <webtest name="check that WebTest is Google's top 'WebTest' result"> <config browser="ff3"/> <invoke url="http://www.google.com/ncr" description="Go to Google (in English)"/> <verifyTitle text="Google" /> <setInputField name="q" value="WebTest" /> <clickButton label="I'm Feeling Lucky" /> <verifyTitle text="Canoo WebTest" /> </webtest> </target> </project> これでも、以下のようなエラーメッセージとともに、最初のテスト失敗することでしょう。
Details expected value Canoo WebTest actual value WebTest - Google Search そこで、今度は、以下のようにしてJavaScriptを無効にします。すると最初のテストは通るようになると思います。
<project default="test"> <target name="test"> <webtest name="check that WebTest is Google's top 'WebTest' result"> <enableJavaScript enable="false"/> <invoke url="http://www.google.com/ncr" description="Go to Google (in English)"/> <verifyTitle text="Google" /> <setInputField name="q" value="WebTest" /> <clickButton label="I'm Feeling Lucky" /> <verifyTitle text="Canoo WebTest" /> </webtest> </target> </project> |
XPath | |||
clickLink | <a href="link.page"><img></a> | imgを含むa リンク | //a[img] |
clickLink | <a href="link.page"><img src='test.png'/></a> | img srcがtest.pngを含むa リンク | //a[img[@src='test.png']] |
clickButton | <input type="image"/> | typeがimageなインプット | //input[@type='image'] |
clickButton | <input type="image" src="test.png"/> | typeがimageでsrcがtest.pngなインプット | //input[@type='image' and @src='test.png'] |
clickButton | <button>hello</button> | テキストがhelloなボタン | //button[text()='hello'] |
clickButton | <form action="edit_kaiin.jsp" method="post"> <input type="hidden" name="_type" value="userInfo"/> <input type="image" src="images/submit.gif"> </form> |
同フォーム中のhiddenの値がuserInfoのimageボタン | //form[input[@type='hidden' and @value='userInfo']]/input[@type='image'] |
その他メモ
hiddenの値の変更の仕方
<setInputField>だと
No suitable form found having field named とエラーが出ます。
<forceHiddenInputField>を使います。
日本語について
<verifyTitle>など比較する分には、問題なく使えました。
ただし、<setInputField>で指定した場合、化けました。
(ただし、私のWebアプリ側の受け取りの問題の可能性も否定できません)
パーラム付きのURL場合
XMLファイルなので、&を記述するとおかしくなります。
&と記述します。
<invoke url="http://localhost/search?name=show&value=basica"/>
XML編集用のDTDファイルの場所
別途 doc.zip をダウンローのうえ、中のselftests/config の中にWebTest.dtdがある。コピーしてDoctype宣言のProject.dtdと書き換えたらXML Editorで使えるようになります。(Ant Editorだと効きません)
厳格なDTDは記述が面倒?
サーバー名を別記述にする
サーバー名を手軽に置き換えたい場合、以下のようにAntの機能のPropertyを使って設定したものを、${プロパティー名}という方式で呼び出せます。
<property name="server" value="localhost:8080" />
<invoke url="http://${server}/search?name=show"/>
<invoke url="http://${server}/delate"/>
その他のStepの使い方など
公式ページの
その他
指定可能なブラウザーコンフィグ
IE6,IE7,FF2,FF3
不具合情報はここで見つかります。