如何从命令行运行测试?

20

要从命令行运行测试,您需要打开自动化选项卡,连接到会话并选择要运行的测试。

如何在命令行中进行操作?

(注:不编译UnrealEngine/Engine/Build/BatchFiles/* 将全面覆盖构建应用程序和编译它。具体来说,假设您的代码已经可以完全编译成功,那么如何启动测试套件)

--

以下是一些最近在4.10上测试的更多信息:

从编辑器运行测试:

UE4Editor Project.uproject -ExecCmds="Automation RunTests MyTest"

注意到没有 -Game 标志; 这将在编辑器中启动并在编辑器控制台中成功运行测试。

运行游戏引擎并使用“弹出日志窗口”:

UE4Editor Project.uproject -Game -ExecCmds="Automation RunTests MyTest" -log

这将以“play”模式运行游戏,并弹出一个编辑器窗口;然而,日志停留在:

LogAssetRegistry: FAssetRegistry took 0.0004 seconds to start up

...而游戏从不关闭或执行测试。

运行游戏引擎并将日志记录到文件中:

UE4Editor Project.uproject -Game -ExecCmds="Automation RunTests MyTest" -log=Log.txt

这将以“play”模式运行游戏,然后停止并永远不存在。

它似乎没有运行任何测试或记录到任何文件中。

退出正在运行的游戏后,Saved/Logs文件夹不存在。

在编辑器,测试类型等中运行...

请参见:https://answers.unrealengine.com/questions/358821/hot-reload-does-not-re-compile-automation-tests.html

不支持测试的热重新加载;因此,这不是一个选项。

在各个地方也有一些建议,即测试类型(例如ATF_GameATF_Editor)是否对运行或可以运行的内容产生影响;也许这也是一个问题,但我尝试了各种组合都没有成功。

--

我尝试了各种组合都没有成功,所以现在是时候发起赏金了。

我将接受可靠地执行以下操作的答案:

  • 从命令行执行特定测试
  • 将该测试的输出记录到文件中

1
我记得曾经遇到过一些问题。我不记得我把它留在了什么状态,但我认为UE Answers上的这个问题包含了我所知道的所有内容。看起来我们已经运行了所有测试,但没有其中的一个子集。 - T. Kiley
3个回答

19

没错,在这里或问题跟踪器上,没有人有任何想法。

经过对UE4源代码的深入挖掘,这里是实际情况,我把它留在这里给下一个无法解决这个问题的受难者:

要从命令行运行测试,并在测试运行后记录输出并退出,请使用:

UE4Editor.exe path/to/project/TestProject.uproject
              -ExecCmds="Automation RunTests SourceTests"
              -unattended
              -nopause
              -testexit="Automation Test Queue Empty"
              -log=output.txt
              -game

在Mac OSX上,请使用UE4Editor.app/Contents/MacOS/UE4Editor

请注意,无论您提供什么信息,日志文件都最终放置在:

WindowsNoEditor/TestProject/Saved/Logs/output.txt
或者
~/Library/Logs/TestProject/output.txt 

请注意,对于Mac来说,此处是您的项目目录之外,比如在 /Users/doug/Library/Logs/TestProject 中。(谁会认为这是个好主意呢?)

(参见 https://wiki.unrealengine.com/Locating_Project_Logs#Game_Logs)

您可以使用以下命令列出自动化测试:

-ExecCmds="Automation List"

...然后解析响应以查找要运行的测试;自动化命令可以链接在一起,例如:

-ExecCmds="Automation List, Automation RunAll"

1
我使用了这个命令,但是当我查看日志时,它只显示“...自动化测试队列为空,已执行184个测试。” 我确定其中一个测试失败并应该显示错误,因为我添加了“AddError('Wrong')”。 但是它没有出现在日志中。 您如何找到测试的通过和失败信息? - Marnix
有没有办法在UE编辑器中以“作为客户端播放”的模式运行测试? - Jorge Luque
刚刚发现这个。你也可以通过执行以下操作生成测试结果报告:-ReportExportPath="MyCustomPath" - Dtb49

2

您是指编辑器命令行还是Windows命令行?

在编辑器中,您可以使用带参数的Automation命令,例如Automation RunAll

在Windows命令行中,您可以使用-ExecCmds指定虚幻引擎命令参数。要运行项目中的所有测试:UE4Editor.exe YOURPROJECT -Game -ExecCmds="Automation RunAll"


似乎没有做任何事情?它只是在游戏模式下打开项目。它应该将测试结果打印到命令行或其他地方吗? - Doug
它应该将其打印到日志文件中,位于YourProjectDir/Saved/Logs。 - TheBrain
我的Saved文件夹中只有AutoScreenshot.png、Autosaves、Backup和Config这些文件。:( - Doug

0

对于仍然有疑问的人,编辑器中存在一个错误,使得当从命令行启动测试时(无论是在启动后还是之后),测试列表在运行之前被清空。

这意味着编辑器实际上编译了要运行的测试列表,然后另一个程序部分将其清空。编辑器随后认为已经完成了所有测试,并且由于没有错误,显示它们全部成功。

如果有人感兴趣,我可以发布如何修复此问题,但这会引入另一个小错误。


Karmoka,这个回答没有解决问题中提出的任何问题。虽然这是有帮助的,但最好将其作为对问题答案的补充来构建。 - Jared Clemence
1
它确实回答了这个问题,因为在UE4.16中,如果不对引擎进行更改,从命令行运行测试是相当不可能的。由于其本质,没有任何参数可以绕过此错误。 - Karmoka
1
从命令行运行测试是不可能的,这样开头回答会更易读。你提出的建议很好。 - Jared Clemence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接