2009年9月9日水曜日

Firefox add-on Selenium IDEでWebテスト再び

だいぶ前にブログでも書いた気がしますが、
ちょっと前から「Seleniumスゲー」「っていうかやるべき」「なんかGroovyで書き出せるらしい」と、盛り上がってまして、
使用前、使用後で自分自身どう変わったかというと、Grailsで何か作るときに、
・コントローラーの中に、初期データ取り込みのアクションを書いていた自分
・新規登録ボタンをクリックして、各フィールドにテストデータを入れていた自分
そんな自分が、なんと、
・Seleniumでテストを書いている
そうなんです、いちいちブラウザでテストデータとかを登録しなくなった。

これは快適です。生産性が上がってます、確実に。

使ってみたい人は、ここに詳細があります。

で、今日たまたま山本さんもおらんので、開発メンバーのテーブルでちょっかい出しながら、何かやっていたのですが、何やら対面の部長から、Kムーに指示が。
「このサイトで、こうやるとこうなるかチェックして欲しいんだけど…」
とリストが渡されました。
「これはキタ」と思ったので、Seleniumでやるといいよ、と助言したんですが、
とりあえず急ぎらしく舐めるようにやってました。
そして、次の指示…
「じゃ、こうなったときも」と追加指示。
「ホントにキタ」と思うや「だからSelenium使えばいいのにっていったのにー」
と椅子を何度か叩いてみました。
最初から使っていれば、ちょっと追加、変更するだけで使い回せるんですよね。
Webテストだと見た目でのテスト、ユーザの立場としてブラウザのテストなだけに、
絶対何度もやるハメになります。

でも、テストのテスト的にしか使ってなかったので、実際「業務」としてやるとどうなんだろうと、一緒にやってみました。
そこで今回使ったのは、以下のコマンド。
多分これらを使いこなせば大抵のことはできそうです。
※コマンドを全部見てるとくらくらするぐらい沢山あります。

・ページを開く(遷移する)
コマンド:open
対象:ベースURL以降に行きたいページを入れる

・文字を入力する
コマンド:type
対象:エレメントID
値:入力する文字

・ボタンをクリック
コマンド:clickAndWait
対象://input[@value='ログイン'] 
「//」は、XPathの始まり。この場合、inputタグでvalueがログインになっているところをターゲットにしている。firebugで対象を調べると楽ちん。

・そのページの中に指定した文字があるかどうか
コマンド:assertText
対象://h1
値:ログインしてください。

・そのページのURLが指定したものを一致しているか
コマンド:verifyLocation
対象:そのURL

・今いるページの画面キャプチャをとる
コマンド:captureEntirePageScreenshot
対象:保存するパスとファイル名
例えば、/work/project/webtest/shot01.pngとか。

完璧です。テストが通るとガスター10なみにスッキリします。
テスト結果をとっておくなら、とりあえずログをコピペなんだろうか、、、

最初、Seleniumの存在は知っていても、「仕様変わるから、今テスト作っても無駄になるもん」と思ってました。
でもこれは大きな間違い。そういってたらいつまでたっても書けない。
面倒か、無駄か、と言われると、絶対にそうじゃないと言えます。
変わるからこそテストを書く必要がある。

仕様が変わったら、コードの中身を変えたら、テストも合わせて変えればいいんです。
だって、コードを書き換えたら、ブラウザでのチェックって絶対やりますよね。
そういうとき、絶対「あああ」とか「test」とか沢山うってるはずです。
そして確認作業は、コンディションによってとっても左右されます。
だから機械的にやるべき。Don't Repeat yourself!ですよ。

0 件のコメント: