如何确认并行运行的测试数量?

时间:2015-12-02 21:44:04

标签: nunit nunit-3.0

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

我可以记录每个测试的开始和结束时间,然后手动检查是否有合理数量的重叠;得到我想要的更简单,更可重复的方法吗?

2 个答案:

答案 0 :(得分:0)

我打开--trace=Verbose会产生一些文件。 InternalTrace.<pid1>.logInternalTrace.<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上并行运行测试。

如果存在这种可能性(在同一台机器上并行运行测试),那将非常棒,我很难听到它!

相关问题