ゲームの自動テストを 作ってみた
TRANSCRIPT
![Page 1: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/1.jpg)
ゲームの自動テストを
作ってみた
竹内 佑介
2 0 1 5 / 0 8 / 2 3
![Page 2: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/2.jpg)
ゲーム画面のテストコードを 書くの難しいと思っていませんか?
![Page 3: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/3.jpg)
ちょっと工夫すれば 案外簡単にできるんです
![Page 4: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/4.jpg)
今日はその方法を皆さんと共有したいと思います
![Page 5: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/5.jpg)
ゲーム画面の自動テストを
実現するには何が必要でしょうか?
![Page 6: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/6.jpg)
こんなんが必要だと思います
• テスト対象だけ切り出せる
• 自動的に操作ができる
• 自動的に検証ができる(いわゆるアサーション)
• 好きなテストコードをいつでも実行できる
• テストコード一覧を1コマンドで実行できる
![Page 7: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/7.jpg)
テスト対象だけ切り出すには?
• ゲームライブラリの基本機能を使えば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)
![Page 8: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/8.jpg)
自動的に操作するには その1
• タイムラインとイベント発火を組み合わせれば、大体のことはできるはず
• タイムラインの詳細、要はフレーム補間http://wise9.github.io/enchant.js/doc/core/ja/symbols/enchant.Timeline.html
![Page 9: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/9.jpg)
自動的に操作するには その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
![Page 10: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/10.jpg)
自動的に検証するには? その1
• どこを検証するのか
• 前提としてゲーム画面すべてを自動検証するのは無理
• 演出、操作感とかは人間が直接みた方が早い
• 論理的には画像比較、操作履歴の比較をすれば上記項目もテストはできるけど、どう考えても労力に見合わない
![Page 11: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/11.jpg)
自動的に検証するには? その2
• 人間の目では確認しずらいところを検証する
• 例えば・・・・・・、
• 何かした時に、意図したイベントが発火されるか
• サーバへの送信データは正しいか
• ボタン押下->API実行、という流れは正しいのか
![Page 12: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/12.jpg)
自動的に検証するには? その3
• これらを検証するにはenchant.jsというかjavaScriptの場合は、以下を検証することになる
• 意図したコールバック関数が、意図したパラメータと共に呼ばれるか
• これなら、javaScriptにあるアサーションライブラリでいくらでも検証できる
![Page 13: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/13.jpg)
自動的に検証するには? その4
• 私はアサーションライブラリとしてchaiを使っていますhttp://chaijs.com/api/assert/
• アサーションしているコードの例(53行目あたり)
https://github.com/kaidouji85/gbraver/blob/d276ebce9ac570d9528efc2106a1467d5cdc7f36/publicForTest/javascripts/battleEndTest/battleEndForWinTest.js#L53
![Page 14: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/14.jpg)
テストコードをいつでも実行するは? その1
• ここはゲームの作りに依存するので、一概にこれという方法がない
• 自分の場合はテストコードをリクエストパラメータに渡したら、それを実行してくれるサイトを作った
![Page 15: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/15.jpg)
• 例えばこんな感じhttp://<ゲームのドメイン>/testClient?code=<テストコード名>
• 公開しているテスト環境ではこんな感じで実行できますhttp://gbraver-beta.herokuapp.com/testClient?code=/javascripts/changeSceneTest/battleToNextStoryTest.js
テストコードをいつでも実行するは? その2
![Page 16: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/16.jpg)
• テストコード一覧を表示するサイトも作ったhttp://gbraver-beta.herokuapp.com/testList
テストコードをいつでも実行するは? その3
![Page 17: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/17.jpg)
テスト一覧を実行するには? その1
• これもゲームの作りに依存するので、これを使うという方法はない
• 自分の場合はさっきのテスト一覧表示サイトとseleniumを組み合わせて、なんとか実現した
![Page 18: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/18.jpg)
自分で作ってみたコードはここにあります
https://github.com/kaidouji85/gbraver
![Page 19: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/19.jpg)
作ってみたコードについて
• テストコードやプロダクトコードはここにありますhttps://github.com/kaidouji85/gbraver
• テストコード一覧はここで見れますhttp://gbraver-beta.herokuapp.com/testList
• ゲームはここで遊べますhttp://gbraver.herokuapp.com/
![Page 20: ゲームの自動テストを 作ってみた](https://reader035.vdocuments.net/reader035/viewer/2022080202/58f26ab81a28abc63d8b45bd/html5/thumbnails/20.jpg)
ご静聴ありがとうございました