簡體   English   中英

如何在單線程旁邊運行多線程testng

[英]How to run multi-threaded testng next to single threaded

我正在使用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。 一些調用在服務器端需要很長時間,所以當我等待響應時,我也可以發送一些其他調用,因此多線程。 我將所有測試轉換為多線程運行,以便在整個測試套件中節省非常大的時間。 它工作得很好,但是這四個類不能同時在服務器上拋出,否則會導致測試失敗。 注意:我知道一種方法是“修復這些類以便它們可以並行工作”並且我已經嘗試過,並且如果可能的話將會繼續,但這是一個不同的長篇故事,讓我們現在假設不是可能。

因此,幾乎所有的時間。 解決方案本質上是通過睡眠我不感興趣的所有其他線程來運行單線程,因為這會破壞整個目的。

您可以將它們全部綁定到同一個cpu。 這意味着它們無法在當時運行。

問題是只有一個在計時器運行時很少。 相反,您應該在這些線程之間使用鎖定,以便它們可以在已知點處以您可以推理的方式移交執行。

經過多次努力嘗試找到解決方法之后,我更清楚地閱讀了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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM