この記事でInfoQ.comはプロジェクトの創設者であるGorilla LogicのStu Stern氏とFlexMonkey(リンク)について論じる。FlexMonkeyはFlexアプリケーションのテストをするために操作を記録/再生するオープン・ソースのツールである。
Stern氏はまずFlexMonkeyの概要について説明した。
FlexMonkeyはユーザ・インタフェース上の振舞いを記録し再生するオープン・ソースのFlexアプリケーション及びライブラリで、例えばCruise Controlのような継続的ビルド環境を構築するフレーム・ワークは実行できる再現性のあるテストを生成します。
InfoQでFlexMonkeyがその他のFlex用テスティング・ツールとは何が違うのかを確認した。
FlexMonkeyは私達が知る限り唯一の完全にFlexベースであるFlex操作の記録/再生用のツールです。FlexMonkeyを利用するのに特別なスクリプト言語やブラウザ用のプラグインは一切必要ありません(勿論、Flashプレイヤは別です)。記録されたユーザ・インタフェースの操作手順はActionScriptのソース・コードとして出力され、読み取りも編集も可能です。記録ツールなしでも簡単にテストを作成することができます。というのもFlexMonkey APIを使えばほとんどのユーザ・インタフェースに関する振舞いを簡単にActionScriptとして解釈することができるからです。
Flexを知っていればFlexMonkeyの利用方法の99%を知っているも同然です。そしてFlexを実行できる環境であればどこでも(事実上どんなプラットフォームでも)FlexMonkeyを実行することができます。
続いてStern氏はライセンスについて以下のように語った。
FlexMonkey自体はApache 2のライセンスで提供しています。これはつまり利用者は好きなようにソースを修正しそれを別のオープン・ソースや商用製品に取り込んで再配布することができるということを意味します。このことはGorilla Logic社がFlexMonkeyを製品として販売することよりも自由に配布することに価値があると判断したということを意味します。
ただし、FlexMonkeyはAdobe社のFlex Automation APIに依存していてこのAPIがFlexBuilder Proに含まれているということに注意が必要です。FlexBuilder Standardエディションにはトライアル版のAutomation APIが含まれていますがアプリケーションの起動ごとに再生できる回数が制限されます。FlexBuilder Standardエディション上でFlexMonkeyを評価してみて、もし必要と感じたらProにアップグレードすることもできます。私達はFlexプラットフォーム上の多くのオープン・ソースにAutomation APIが加わることを願っていますが、今はFlexBuilder Proを買うしかありません。Proには他にもパフォーマンスやメモリのプロファイラなどが含まれているので、もし本格的にエンタープライズ向けの開発をするのならアップグレードには十分効果があるでしょう。
InfoQでは非同期機能をテストすることへの試みについて質問したところ以下のような回答を得た。
FlexMonkeyが生成する全てのUIイベントは非同期で、次のイベントを生成する前にFlexMonkeyは(デフォルトで500ミリ秒)停止します。例えばもし、ボタンを押した時に時間のかかるデータベースへの問い合わせが発生するとしたらボタンのイベントが発生した後の停止時間を延長すればいいだけです。
FlexUnitのようなテスト実行フレームワークも非同期操作を扱うには特別のハンドリングが必要になります。FlexMonkey APIはそれ自身が非同期です。従ってテスト実行フレームワークに対していつテストが完了したのかを何らかの方法で通知する必要があります。テストケースに含まれる全てのイベントほ発行が終わるとFlexMonkeyはREADY_FOR_VALIDATIONイベントを生成します。FlexUnitの場合は、FlexUnitのaddAsyncメソッドを利用して次のテストケースの実行の前にこのイベントが発生するまで待機すればいいでしょう。
もう一つ付け加えると、今はまだFlexUnitが直接FlexMonkeyと統合できる唯一のxUnitフレームワークですが、FlexのテストのためにFlexMonkeyを他のxUnitフレームワークから利用することもできます。繰り返しますが、FlexMonkeyのテストは単なるActionScriptです。さらに、私達がFlexUnitで実施したのと同様にFlexMonkeyを他のxUnitと統合するコードを生成するのは簡単なことでしょう(ボランティアを待っています!)
さらにFlexMonkeyがどのようにFlex Automationフレームワークを利用しているのかを質問した。
Autmation APIに関連するアプリケーションを実行すると、ボタンやマウスのクリックといった全てのイベントがそのUIイベントに対応する"自動化イベント"を生成します。この自動化イベントに含まれる情報はAutomation APIにフィードバックされ擬似的なボタン・クリックが行われてFlexはあたかも本来のUIイベントが生成されたかのように応答します。前述のようにFlexMonkey APIを利用してAutomation APIで記録されていないイベントを追加することもできます。私達はFlexMonkeyを利用して、DataGridに含まれるデータ編集機能としてのComboBoxからアイテムを選択するといった"風変わりな"操作を含む、FlexのUIイベントを記録し仮想的に再生しているのです。
最後に、他に読者が知っておくべきことについて質問した。
私達のオープン・ソース・プロジェクトは比較的新しいですが、それにもかかわらずFlexMonkeyはとても安定しています。そしてドキュメントも比較的そろっています。ほとんどの人が開始から1時間足らずで実行できるでしょう。
http://keystone.gorillalogic.com/~sstern/MonkeyContacts.htmlにあるサンプル・アプリケーションを利用して今すぐにでもFlexMonkeyで遊んでみることができます。このサンプルを実行すればUIシナリオの記録と再生がどれだけ簡単にできるか分かるでしょう。そして、生成されたActionScriptがどんなものなのかも見ることができます。
プロジェクト自体はhttp://flexmonkey.googlecode.comにあります。この記事の読者が皆さん私達のコミュニティに参加されることを願っています!
原文はこちらです:http://www.infoq.com/news/2008/10/flexmonkey-testing