我在16核机器上运行我的单元测试。我没有看到在不使用并行化参数--workers=1
和--workers=32
时经过的时间有任何差异。我想确认NUnit确实在运行预期数量的同步测试,这样我就不会花时间在我的测试代码中查找不存在的问题。
我在公共基类上有[Parallelizable]
(默认范围,ParallelScope.Self
)。它不是在任何其他类或方法上定义的。我通过Jenkins和我的本地命令行使用nunit3-console
。
有没有办法告诉测试是并行运行的? NUnit报告了正确的工作线程数,但是没有报告说(例如)每个线程中运行了多少个测试。
Run Settings
ProcessModel: Multiple
RuntimeFramework: net-4.5
WorkDirectory: C:\Jenkins\workspace\myproject
NumberOfTestWorkers: 16
我可以记录每个测试的开始和结束时间,然后手动检查是否有合理数量的重叠;得到我想要的更简单,更可重复的方法吗?
答案 0 :(得分:0)
我打开--trace=Verbose
会产生一些文件。 InternalTrace.<pid1>.log
和InternalTrace.<pid2>.<dll_name>.log
一起包含对测试期间发生的情况的详尽描述。每个代理日志(日志文件名中包含DLL名称的日志)非常清楚并行化的状态。
16:13:40.701 Debug [10] WorkItemDispatcher: Directly executing test1
16:13:47.506 Debug [10] WorkItemDispatcher: Directly executing test2
16:13:52.847 Debug [10] WorkItemDispatcher: Directly executing test3
16:13:58.922 Debug [10] WorkItemDispatcher: Directly executing test4
16:14:04.492 Debug [10] WorkItemDispatcher: Directly executing test5("param1")
16:14:09.720 Debug [10] WorkItemDispatcher: Directly executing test5("param2")
16:14:14.618 Debug [10] WorkItemDispatcher: Directly executing test5("param3")
第三个字段对我来说就像一个线程ID。所以我相信代理一次只运行一个测试,即使(我认为......)我已经将所有测试都可以并行化,并且它们都在不同的测试装置中。
现在,我必须弄清楚我做错了什么以及为什么他们没有并行运行......
答案 1 :(得分:0)
我可能会弄错,但在我看来,设置[Parallelizable]
参数不足以使测试并行运行。您还需要创建将运行测试的节点。因此,如果你使用Jenkins,你必须创建Jenkins Slaves,然后你的测试才能并行运行。
所以我想说的是,据我所知,不可能在一台PC上并行运行测试。
如果存在这种可能性(在同一台机器上并行运行测试),那将非常棒,我很难听到它!