如果當前正在執行來自另一個特定類的測驗,是否有任何好的解決方案可以防止 testng 運行來自特定類的測驗?
我有下一個套房:
<suite name="Name" parallel="classes" thread-count="5">
<test name="TestName">
<packages>
<package name="test.folder.*" />
</packages>
</test>
</suite>
在“檔案夾”內,它有許多帶有測驗類的其他檔案夾,這些測驗類由該套件并行執行。
但是我需要以某種方式指定,例如,如果 test.folder.a1.A1Tests 正在運行,test ng 應該等到它完成,運行類 test.folder.b1.B1Tests 并選擇另一個不在“禁令”中的類' 指定類的串列。
讓我們再解釋一次我想要什么。
- 免費執行緒出現
- TestNG 想在其中運行 b1.B1Tests
- TestNG 檢查當前是否正在運行 a1.A1Tests(或禁止串列中的其他類)
- 如果是這樣,它會推遲 b1.B1Tests 類并搜索另一個
關鍵是我有測驗,它們相互影響,我想保存并行性但不想同時執行它們。
我現在發現的唯一方法,它向當前套件添加了一個測驗,在單執行緒中執行所有受影響的測驗,然后以與現在相同的方式執行另一個測驗。
但我希望你有更漂亮的解決方案。
uj5u.com熱心網友回復:
TestNG 已經實作了“dependsOnMethods”、“dependsOnGroups”選項。
但是您的要求是具有某種類級別的依賴關系。
如果您試圖找到一個在測驗運行時更改測驗順序的解決方案,這將不起作用。
TestNG 確定測驗的特定順序并將其保留在整個執行程序中。如果輪到測驗,那么您可以簡單地等待一些條件,但不要進行新的測驗而不是當前的測驗。
所以我的建議將保持這一假設。
選項 1 - 使用單獨的 testng xml 配置
看起來你已經在使用它了。
將所有無法安全并行運行的測驗移動到具有非并行配置的單獨 testng xml 中,并保持其他測驗并行運行,然后將它們合并到單個 xml 中運行,這是一種易于實作的常見解決方案和維護。
在大多數情況下,與其他現有替代方案相比,它已經足夠好了,因為它簡單明了。
以下是它的外觀示例:
https://stackoverflow.com/a/70753897/5226491
選項 2 - 實作您自己的同步
正如我所提到的,沒有現成的選擇。
你應該:
- 確定哪個類取決于其他類的串列
- 跟蹤所有正在運行的課程
- 解決依賴關系:檢查測驗方法是否屬于某個必須等待其他阻塞類完成作業的類
您必須使用所有必要的同步來實作它,以確保它不會導致問題、死鎖等。
您可以從實作一個開始ITestListener,它將在測驗開始時將所有正在運行的測驗類添加到執行緒安全集合中,并在測驗完成時將其洗掉。
https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestListener.html
https://www.javadoc.io/doc/org.testng/testng/7.4.0/org/testng/ITestResult.html#getTestClass--
我認為選項 2 需要時間來實作和測驗(更不用說良好的編程經驗),并且必須有一個非常好的理由選擇它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417614.html
標籤:
