ゲームの自動テストを 作ってみた
TRANSCRIPT
ゲームの自動テストを
作ってみた
竹内 佑介
2 0 1 5 / 0 8 / 2 3
ゲーム画面のテストコードを 書くの難しいと思っていませんか?
ちょっと工夫すれば 案外簡単にできるんです
今日はその方法を皆さんと共有したいと思います
ゲーム画面の自動テストを
実現するには何が必要でしょうか?
こんなんが必要だと思います
• テスト対象だけ切り出せる
• 自動的に操作ができる
• 自動的に検証ができる(いわゆるアサーション)
• 好きなテストコードをいつでも実行できる
• テストコード一覧を1コマンドで実行できる
テスト対象だけ切り出すには?
• ゲームライブラリの基本機能を使えばOK
• 最近のは大体スプライト、シーン、グループとかあるのでそれを使えばいいでしょう
• スプライトについてhttps://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E3%83%88_(%E6%98%A0%E5%83%8F%E6%8A%80%E8%A1%93)
自動的に操作するには その1
• タイムラインとイベント発火を組み合わせれば、大体のことはできるはず
• タイムラインの詳細、要はフレーム補間http://wise9.github.io/enchant.js/doc/core/ja/symbols/enchant.Timeline.html
自動的に操作するには その2
• enchant.jsでの実装例は以下の通りhttps://github.com/kaidouji85/gbraver/blob/d276ebce9ac570d9528efc2106a1467d5cdc7f36/publicForTest/javascripts/testlib/testUtil.js
• 実際に動いてるイメージはこんな感じですhttp://gbraver-beta.herokuapp.com/testClient?code=/javascripts/changeSceneTest/selectArmdozerToTopForPrevButtonTest.js
自動的に検証するには? その1
• どこを検証するのか
• 前提としてゲーム画面すべてを自動検証するのは無理
• 演出、操作感とかは人間が直接みた方が早い
• 論理的には画像比較、操作履歴の比較をすれば上記項目もテストはできるけど、どう考えても労力に見合わない
自動的に検証するには? その2
• 人間の目では確認しずらいところを検証する
• 例えば・・・・・・、
• 何かした時に、意図したイベントが発火されるか
• サーバへの送信データは正しいか
• ボタン押下->API実行、という流れは正しいのか
自動的に検証するには? その3
• これらを検証するにはenchant.jsというかjavaScriptの場合は、以下を検証することになる
• 意図したコールバック関数が、意図したパラメータと共に呼ばれるか
• これなら、javaScriptにあるアサーションライブラリでいくらでも検証できる
自動的に検証するには? その4
• 私はアサーションライブラリとしてchaiを使っていますhttp://chaijs.com/api/assert/
• アサーションしているコードの例(53行目あたり)
https://github.com/kaidouji85/gbraver/blob/d276ebce9ac570d9528efc2106a1467d5cdc7f36/publicForTest/javascripts/battleEndTest/battleEndForWinTest.js#L53
テストコードをいつでも実行するは? その1
• ここはゲームの作りに依存するので、一概にこれという方法がない
• 自分の場合はテストコードをリクエストパラメータに渡したら、それを実行してくれるサイトを作った
• 例えばこんな感じhttp://<ゲームのドメイン>/testClient?code=<テストコード名>
• 公開しているテスト環境ではこんな感じで実行できますhttp://gbraver-beta.herokuapp.com/testClient?code=/javascripts/changeSceneTest/battleToNextStoryTest.js
テストコードをいつでも実行するは? その2
• テストコード一覧を表示するサイトも作ったhttp://gbraver-beta.herokuapp.com/testList
テストコードをいつでも実行するは? その3
テスト一覧を実行するには? その1
• これもゲームの作りに依存するので、これを使うという方法はない
• 自分の場合はさっきのテスト一覧表示サイトとseleniumを組み合わせて、なんとか実現した
自分で作ってみたコードはここにあります
https://github.com/kaidouji85/gbraver
作ってみたコードについて
• テストコードやプロダクトコードはここにありますhttps://github.com/kaidouji85/gbraver
• テストコード一覧はここで見れますhttp://gbraver-beta.herokuapp.com/testList
• ゲームはここで遊べますhttp://gbraver.herokuapp.com/
ご静聴ありがとうございました