0

我正在使用 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 个类由于它们的作用而无法并行运行,我基本上只是希望一次运行一个,并且想保证这些类中只有一个同时运行. 我所有的其他课程都可以在任何给定时间以任何顺序运行,没有问题。

我知道我可以设置与组级别并行,但是我必须将随机无意义的组​​添加到我的所有其他类中,以便它们同时运行。也许有一种方法可以使一个组单线程并并行另一个组?

我目前正在运行 4 个线程并且有大约 50 个类。

有任何想法吗?

-- 根据评论添加要求/想法 --

我尝试这样做的主要原因是我正在测试服务器 API。一些调用在服务器端需要很长时间,所以当我等待响应时,我也可以发送一些其他调用,因此是多线程。我将所有测试都转换为在多线程中运行,以节省整个测试套件的大量时间。它工作得很好,但是这四个类不能同时扔到服务器上,否则会导致测试失败。注意:我知道一种方法是“修复这些类,以便它们可以并行工作”,我已经尝试过,如果可能的话会继续这样做,但这是一个不同的更长的故事,现在假设不是可能的。

因此,它几乎都是关于时间的。本质上通过休眠我不感兴趣的所有其他线程来运行单线程的解决方案,因为这会破坏整个目的。

4

2 回答 2

1

您可以将它们全部绑定到同一个 cpu。这意味着它们当时无法运行。

问题是仅在计时器上运行一个是不够的。相反,您应该在这些线程之间使用锁定,以便它们可以在已知点以您可以推理的方式移交执行。

于 2013-07-30T18:29:56.817 回答
1

经过多次艰苦的尝试寻找解决方法后,我更清楚地阅读了 TestNG 规范并找到了解决方案。它实际上很简单。有一个平行的<suite>水平,所以它<test> 把我带到了以下

<suite name="testSuite" parallel="tests" thread-count="4">
   <test name="foo" parallel="classes" thread-count="3">
     .. (classes you want to include)
   </test>
   <test name="bar">  <!-- this runs single threaded because there is no parallel tag>
     .. (classes you want to run single threaded)
   </test>
</suite>
于 2013-08-08T18:12:06.800 回答