【问题标题】:How do you run tests from the command line?你如何从命令行运行测试?
【发布时间】:2015-05-22 00:21:06
【问题描述】:

要在编辑器中执行此操作,请打开自动化选项卡,连接到会话并选择要运行的测试。

如何从命令行执行此操作?

(NB。不编译 UnrealEngine/Engine/Build/BatchFiles/* 全面涵盖了构建应用程序和编译它。具体来说,鉴于您有 100% 乐于编译的代码,您如何启动测试套件)

--

这里有更多信息,来自最近对 4.10 的测试:

从编辑器运行测试:

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

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

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

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

这会在“播放”模式下运行游戏,弹出一个编辑器窗口;但是,日志停在:

LogAssetRegistry: FAssetRegistry took 0.0004 seconds to start up

...游戏永远不会关闭或执行测试。

运行游戏引擎并记录到文件:

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

这会在“播放”模式下运行游戏,然后停止并且永远不会存在。

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

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

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

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

测试不支持热重载;所以这不是一个选择。

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

--

我已经尝试了各种组合方式试图让它发挥作用,但都没有成功,所以是时候赏金了。

我会接受一个可靠的答案:

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

【问题讨论】:

  • 我记得有一些问题。我不记得我把它留在了什么状态,但我认为this question on UE Answers 包含了我所发现的所有内容。似乎我们运行了所有测试,但没有运行其中的一部分。

标签: unreal-engine4


【解决方案1】:

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

在编辑器中,您可以使用带有参数的 Automation 命令,例如自动化运行全部

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

【讨论】:

  • 似乎什么也没做?它只是在游戏模式下打开项目。它应该将测试结果打印到命令行还是什么的?
  • 它应该将其打印到 YourProjectDir/Saved/Logs 中的日志文件中。
  • 只有我保存的文件夹中的文件是 AutoScreenshot.png, Autosaves, Backup, Config :(
【解决方案2】:

是的,没有人对这里或问题跟踪器有任何想法。

在对 UE4 源代码进行了一些认真的挖掘之后,这是实际的交易,我将其留给下一个无法弄清楚的受苦灵魂:

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

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

在 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"

【讨论】:

  • 我使用了这个命令,但是当我查看日志时它只显示...Automation Test Queue Empty 184 tests performed.。我确信其中一个测试失败并且应该显示错误,因为我添加了AddError("Wrong")。但它不会出现在日志中。您是如何找到测试通过和失败的信息的?
  • 有没有办法在“作为客户端播放”模式下使用 UE 编辑器运行测试?
【解决方案3】:

对于任何仍然想知道的人,编辑器中存在一个错误,因此测试列表在从命令行启动时(无论是在启动时还是之后)在运行之前被刷新。

这意味着编辑器实际上编译了要运行的测试列表,然后由程序的另一部分刷新。然后编辑器认为它已经完成了所有测试,并且由于没有错误,因此表明它们都成功了。

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

【讨论】:

  • Karmoka,这个答案没有解决问题中提出的任何问题。虽然这很有帮助,但最好将其作为问题答案的附加内容。
  • 它确实回答了这个问题,因为从 UE4.16 开始,在不更改引擎的情况下从命令行运行测试是完全不可能的。从本质上讲,没有任何参数可以绕过这个错误。
  • 以“实际上不可能从命令行运行测试”之类的内容开始您的答案将有助于使您的答案更易于阅读。这是您建议的很好的修改。
猜你喜欢
  • 2014-09-02
  • 2016-02-03
  • 1970-01-01
  • 2015-05-09
  • 2011-04-25
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多