如何确认有多少个测试是 运行 并行进行的?

How can I confirm how many tests are running in parallel?

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

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

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

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

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

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

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

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

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

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