- 類級注解
通常 @Test 也可以用來標注類,而不僅僅是方法:
@Test
public class Test1 {
public void test1() {
}
public void test2() {
}
}
處于類級的@Test
會使得類中所有的public
方法成為測試方法,而不管他們是否已經被標注。當然,仍然可以用@Test
注解重復標注測試方法,特別是要為其添加一些特別的屬性時。
例如:
@Test
public class Test1 {
public void test1() {
}
@Test(groups = "g1")
public void test2() {
}
}
test1()
和test2()
都被處理,不過在此之上test2()
現在還屬于組 "g1"
- 并行套件
讓組件以一個獨立的線程運行
使用以下命令行參數來指定線程池的大小
java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml
- 并行測試,類和方法
可以通過在suite標簽中使用 parallel 屬性來讓測試方法運行在不同的線程中。
這個屬性可以帶有如下這樣的值:
<suite name="My suite" parallel="methods" thread-count="5">
<suite name="My suite" parallel="tests" thread-count="5">
<suite name="My suite" parallel="classes" thread-count="5">
<suite name="My suite" parallel="instances" thread-count="5">
parallel="methods": TestNG 會在不同的線程中運行測試方法,除非那些互相依賴的方法。那些相互依賴的方法會運行在同一個線程中,并且遵照其執行順序
parallel="tests": TestNG 會在相同的線程中運行相同的<test>標記下的所有方法,但是每個<test>標簽中的所有方法會運行在不同的線程中。這樣就允許把所有非線程安全的類分組到同一個<test>標簽下,并且使其可以利用TestNG多線程的特性的同時,讓這些類運行在相同的線程中
parallel="classes": TestNG 會在相同線程中相同類中的運行所有的方法,但是每個類都會用不同的線程運行
parallel="instances": TestNG會在相同線程中相同實例中運行所有的方法,但是兩個不同的實例將運行在不同的線程中
此外,屬性thread-count允許你為當前的執行指定可以運行的線程數量
注意:@Test 中的屬性timeOut可以工作在并行和非并行兩種模式下
也可以指定@Test方法在不同的線程中被調用。你可以使用屬性 threadPoolSize來實現
@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000)
public void testServer() {}
上例中,方法testServer會在3個線程中調用10次。此外,10秒鐘的超時設定也保證了這三個線程中的任何一個都永遠不會阻塞當前被調用的線程。