未知なるエラーが発見できるかも知れませんよ! モンキーテストという言葉があります。例えばテストにおいて、ユーザ登録フローをやって欲しいと言われれば誰でもユーザ名を入力したり、パスワードを入れたりします。まったく関係ないところを100回クリックして問題がないか確認するなんてことはしない訳です。 それを全く意に介せず行うのがモンキーテストです。意外なメモリーリークを探したり、普通やらないだろうといったバグを発見できる可能性があります。それをWebアプリケーションで実現するのがgremlins.jsです。

モンキーテスト中。赤い枠でクリック処理を行った場所が赤くなります。

gremlins.jsの使い方

使い方としてはスクリプトの読み込みの他に、下記のような実行内容を記述する必要があるようです。とにかく色々なことをするといった感じになっていますが、さらにキーボードの入力も行います。

gremlins.createHorde()
	.gremlin(gremlins.species.clicker()
	.positionSelector(function() {
		// only click in the app
		var $list = $('#todoapp');
		var offset = $list.offset();
		return [
			parseInt(Math.random() * $list.outerWidth() + offset.left),
			parseInt(Math.random() * ($list.outerHeight() + $('#info').outerHeight()) + offset.top)
		];
	})
)
.gremlin(gremlins.species.formFiller())
.gremlin(function todoCreator() {
	if (Math.random() < .9) return;
	var e = $.Event( "keypress", { which: 13 } );
	$(document.activeElement).trigger(e);
})
.gremlin(gremlins.species.scroller())
.mogwai(gremlins.mogwais.gizmo())
.mogwai(gremlins.mogwais.fps())
.strategy(gremlins.strategies.distribution()
	.delay(50)
	.distribution([
		0.3, // clicker
		0.3, // formFiller
		0.3, // todoCreator
		0.1, // scroller
	])
)
.before(function() {
	console.profile('gremlins');
})
.after(function() {
	console.profileEnd();
})
.unleash({ nb: 200 });

実行例。nodeアプリケーションと相性がいいようですが、Webアプリケーションであれば概ね問題はないようです。

勝手にタスクを作ったり削除したりよく分からない文字を入れたりとやりたい放題です。

この結果としてJavaScriptのエラーが出たとすれば修正する余地があるということでしょう。人ベースのテストではまず分からないような変なエラーが発見できるはずです。

なお、iOS/Androidのモンキーテストツールも一緒にとにかくやりたい放題なモンキーテストとは!? - Markub にてまとめています。ぜひご覧ください。

gremlins.jsはJavaScript製、MIT Licenseのオープンソース・ソフトウェアです。

marmelab/gremlins.js