BLOGブログ

2018.08.03UE4UE/ Debug

[UE4] コマンドから自動テストを実行してみる

今回はコマンドから自動テストを動かす方法について書きたいと思います。

UE4での自動テストのおさらい

自動テストツールの使い方・追加方法 については過去記事がありますのでこちらを参考にしてください。
自動テストツールの使い方
https://historia.co.jp/archives/689/
自動テストの追加方法
https://historia.co.jp/archives/698/

Blueprintでの実装

過去記事ではC++からの実装でしたが、Blueprintからもテストを作成することができます。
FunctionalTestを元にBlueprintを作ることにより
StartTestイベントノードからつなげることにより自動テストを開始することができます。


FinishTestノードでテストの結果を返せばテスト終了になります。
作成したBlueprintをレベルに配置→レベルを保存後SessionFrontend上のRefreshTestsボタンを押すとテストが追加されます。

 

コンソールから自動テスト

これらの手順ですとSessionFrontendから実行する必要がありましたが、
これから紹介するコマンドをコンソールから入力すると自動テストができます。
※エディタ上、ゲーム起動中でもコンソールから実行できます。

すべてのテストを実行

Automation RunAll

自動テストのリストアップ

Automation List

自動テスト名を調べるためにはこのコマンドで確認をしてください。

テスト名を指定して実行

Automation RunTests テスト名

テスト名をグループごとにつけておくと、グループごとにまとめてテストを行うことができます。
例として以下のようなテストがあった場合

System.Core.Math.Range
System.Core.Misc.Paths
System.Core.Misc.Algos

Automation RunTests System.Core.Misc
と実行すると

System.Core.Misc.Paths
System.Core.Misc.Algos

の2つのテストが実行されます。

複数指定する場合

;(セミコロン)で区切り追加することで複数のテストを追加可能です。

Automation RunTests Test01;RunTests Test02

テスト終了後にウィンドウを閉じる

テストが終了してもアプリは起動したままですので ;で区切りQuitコマンドを追加するとテスト終了後にアプリが終了します。

Automation RunTest テスト名;Quit

※OutputLogウィンド上で使用するとエディタが閉じるので注意

 

外部ツールから自動テストを実行する

-ExecCmds 引数を使用して起動時にコンソールコマンドを実行することができます。
これを使用するとJenkinsのような外部ツールから自動テストを実行することができます。


スタンドアローンでの実行する場合

UE4Editor.exe Project.uproject -ExecCmds=”Automation RunTests テスト名;Quit” -game

パッケージビルドの場合

Project.exe -ExecCmds=”Automation RunTests テスト名;Quit”

※スタンドアローンとパッケージビルドの違い
パフォーマンスチェックの場合はパッケージビルドを使用したほうが良いですが、パッケージビルドの場合は
必要なアセットのみしかロードできないため、コンテントブラウザで管理しているアセット・Blueprintを
すべてチェックするようなテストの場合はスタンドアローンで実行するほうが良い場合があります。

その他に知っておくと便利な追加コマンド

ログの出力ファイル名の指定

-log=outlog.txt

ウィンドウを表示せずに実行

-NullRHI

処理の単体テストを行う場合はこのコマンドを追加したほうが良いでしょう。

Jenkinsの場合 このコマンドを追加せずに起動するとマスターのジョブで動作させると
ウィンドウが表示されずにエラーが発生する場合があります。
スクリーンキャプチャを行うようなテストの場合はJenkinsのスレーブを作成して
別プロセスとして動作させることで自動テストをすることができます。
※今回、Jenkinsの動作している環境によりスレーブの設定が異なるためスレーブの設定方法については省略します。

自動テストはデフォルトでUE4に用意されてますので、それらを活用するのも良いかと思います。
定期的に自動テストを動作させ、問題の早期発見・早期解決につなげましょう!!