0

我在 16 核机器上运行单元测试。当不使用并行化参数时,我看不到经过时间的任何差异,--workers=1并且--workers=32. 我想确认 NUnit 确实在运行预期数量的同时测试,这样我就不会花时间在我的测试代码中寻找一个不存在的问题。

我在公共基类上有[Parallelizable](默认范围, )。ParallelScope.Self它未在任何其他类或方法上定义。我正在nunit3-console通过 Jenkins 和我的本地命令行使用。

有没有办法告诉测试是并行运行的?NUnit 报告了正确的工作线程数,但没有报告说(例如)每个线程中运行了多少测试。

Run Settings
    ProcessModel: Multiple
    RuntimeFramework: net-4.5
    WorkDirectory: C:\Jenkins\workspace\myproject
    NumberOfTestWorkers: 16

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

4

2 回答 2

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。所以我相信代理一次只运行一个测试,即使(我认为..)我已经使所有测试都可以并行化并且它们都在不同的测试装置中。

现在我必须弄清楚我做错了什么以及为什么它们没有并行运行......

于 2015-12-03T03:23:55.580 回答
0

我可能弄错了,但在我看来,设置 [Parallelizable]参数不足以使测试并行运行。您还需要创建将运行测试的节点。因此,如果您使用 Jenkins,您必须创建 Jenkins Slaves,然后您的测试才会并行运行。

所以我想说的是,据我所知,不可能在一台 PC 上并行运行测试。

如果有这样的可能性(在同一台机器上并行运行测试),那就太好了,我很难听到!

于 2015-12-03T13:43:12.530 回答