问题 你如何从命令行运行测试?


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

你是如何从命令行做到的?

(注意:不编译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如果运行是或可以运行有一些影响;也许这是一个问题,但我已经尝试了所有类型的组合,但没有成功。

-

我已经尝试了各种各样的组合,试图让这个工作,没有成功,所以是时候获得赏金。

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

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

6851
2018-03-19 00:34


起源

我记得有一些问题。我不记得我把它留在了什么状态,但我想 关于UE Answers的这个问题 包含我发现的所有内容。好像我们已经运行了所有测试但不是它们的一部分。 - T. Kiley


答案:


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

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

7
2018-02-11 12:19



我使用了这个命令,但是当我查看日志时它只会说 ...Automation Test Queue Empty 184 tests performed.。我确信其中一个测试失败并且应该显示错误,因为我补充说 AddError("Wrong")。但它没有出现在日志中。您是如何找到测试通过和失败的信息的? - Marnix


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

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

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


2
2018-03-19 08:55



好像什么都没做?它只是在游戏模式下打开项目。它应该将测试结果打印到命令行还是什么? - Doug
它应该将它打印到YourProjectDir / Saved / Logs中的日志文件中。 - TheBrain
只有我保存的文件夹中的文件是AutoScreenshot.png,自动保存,备份,配置:( - Doug


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

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

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


0
2017-12-21 19:19



Karmoka,这个答案没有解决问题中提出的任何问题。虽然这很有帮助,但最好将其作为问题答案的附件。 - Jared Clemence
它确实回答了这个问题,因为在不更改引擎的情况下从UE4.16开始从命令行运行测试是不可能的。就其本质而言,没有任何参数可以绕过这个错误。 - Karmoka
用“从命令行运行测试几乎不可能”这样的东西开始你的答案将有助于使你的答案更容易阅读。这是你建议的一个很好的编辑。 - Jared Clemence