我正在使用 testng 运行一系列测试,并在 parallel="classes"
级别运行它们。问题是我希望 3-4 个类始终在同一线程(单线程)上一起运行。所有其他类都可以在任何线程上运行,我不在乎。
有办法做到这一点吗?
Example: A B and C need to be ran one-at-a-time. All other classes will be denoted by numbers.
Threads running at one time:
A 3 7 2 - A would run while 3 other classes run
C 8 4 1 - B would run once A is done, (other threads dont matter)
B 5 9 6 - C would run once B is done.
有关更多信息,我有 3-4 个类,由于它们的作用而无法并行运行,我基本上只想一次运行一个,并且希望保证这些类中只有一个是永远运行的立即运行。我的所有其他类(class)都可以在任何给定时间以任何顺序运行,没有任何问题。
我知道我可以设置与组级别平行,但随后我必须向所有其他类添加随机无意义的组,以便它们同时运行。也许有一种方法可以使一组线程单线程而另一组线程并行?
我目前正在运行 4 个线程,并且有大约 50 个类。
有什么想法吗?
-- 根据评论添加了要求/想法 --
我尝试这样做的主要原因是我正在测试服务器 API。有些调用在服务器端需要很长时间,因此当我等待响应时,我也可能会发送一些其他调用,因此需要多线程。我将所有测试转换为在多线程中运行,以便节省整个测试套件的大量时间。它工作得很好,但是这四个类不能同时抛出到服务器,否则会导致测试失败。 注意:我知道一种方法是“修复这些类,以便它们可以并行工作”,我已经尝试过,并且如果可能的话将继续这样做,但这是一个不同的更长的故事,现在让我们假设这不是有可能。
因此,实际上一切都与时间有关。本质上,解决方案将通过 hibernate 我不感兴趣的所有其他线程来运行单线程,因为这会破坏整个目的。
最佳答案
您可以将它们全部绑定(bind)到同一个CPU。这意味着它们当时无法运行。
问题是仅仅让一个计时器运行是远远不够的。相反,您应该在这些线程之间使用锁定,以便它们可以在已知点并以您可以推理的方式移交执行。
关于java - 如何在单线程旁边运行多线程 testng,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954634/