「Webアプリケーションテスト手法」を執筆しました

書籍を共著で執筆しました。本日発売です。

Webアプリケーションテスト手法
水野 貴明, 石井 勇一, 新藤 愛大, 岸田 健一郎, 荻野 淳也, 安井 力, 田中 慎司
http://www.amazon.co.jp/exec/obidos/ASIN/4839924309/yattom-22

Webアプリのテスト全般について、ツールと手法中心に幅広く紹介しています。

ほか、スケーラビリティ、セキュリティ、ユーザビリティなどの話にも触れています。

私は今回Seleniumの章を担当しました。Seleniumは、ブラウザの挙動をユーザの操作をエミュレートしながらテストできるという、稀有な存在です。サーバーサイドからAJAXまでをカバーしてテストできるのはSeleniumだけです。Selenium IDEを使えばとても簡単に導入できるし、Selenium RCでテスト生産性を上げることもできます(RCは本書で触れず)。

組織的にSeleniumを導入して成功しているところもあると聞きます。テストじゃなくブラウザ操作のオートメーションに使うこともできます。ぜひいちど試してみてください。

Seleniumネタは、この日記にもちらほら書いています。
http://d.hatena.ne.jp/yach/searchdiary?word=selenium

AjaxとclickAndWait

さて、本が出た今頃になって言うのも何なんですが、

p.227
(はてな日記の)プレビューの機能ではAjaxが使われており、プレビュー内容を表示するのにわずかですが時間がかかります。……表示が完了する前に次の verifyTextPresent を実行してしまう場合があります。……それを防止するために、pause で1秒間(1000ミリ秒)待たせています。

clickなどの操作のあとにpauseやwaitForXXXで同期してやるという話なわけですが、なんとこれclickAndWait一発でできるんですね。いやー、知らなかったなー。はっはっは。前からそうだっんだろうか?

まあ、一般論として「Ajax(というか非同期)の処理をテストするときは、テスト側で同期しないといけない」というのは変わらないんですけどね。とはいえ、単純な

  1. クリックなどのハンドラが呼ばれる
  2. XHRする
  3. ハンドラ終了
  4. XHRのレスポンスのハンドラが呼ばれる
  5. レスポンスを画面に反映
  6. ハンドラ終了

という処理の結果を、clickAndWait(というかXXXAndWaitシリーズ)でテストできるならラクだなあ。Seleniumの実装とか、アプリ側の実装にも依存するので、100%はカバーできないんじゃないかと思うけれど。

(追記)プレビューはiframeを使ってるみたいなので、それのonloadに反応してるのかな?そうだったら、応用範囲は狭くなっちゃうなあ。