1.TestNG预期异常测试
例如:@test 后的括号中 写入得是期望获取的异常,如果该方法抛出期望中的异常,该测试方法就会通过
@Test(expectedExceptions = ArithmeticException.class) #该例子期望的异常是一种,如果期望多个异常的话,后面以expectedExceptions = {ArithmeticException.class,…}
#此时如过测试方法抛出其中的一种,则通过。
public void divisionWithException() {
int i = 1 / 0;
System.out.println(“After division the value of i is :”+ i);
}/
2.testNG忽略测试
有时,我们编写的代码并没有准备就绪,并且测试用例要测试该方法/代码是否失败(或成功)。 在本示例中,注释@Test(enabled = false)有助于禁用此测试用例。
如果使用@Test(enabled = false)注释在测试方法上,则会绕过这个未准备好测试的测试用例。
例如:
public class TestIgnore {
@Test // default enable=true
public void test1() {
Assert.assertEquals(true, true);
}
@Test(enabled = true)
public void test2() {
Assert.assertEquals(true, true);
}
@Test(enabled = false)
public void test3() {
Assert.assertEquals(true, true);
}
}
3.testNG 超时测试
“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG的将会中止它并将其标记为失败。
“超时”也可以用于性能测试,以确保方法在合理的时间内返回。
public class TestTimeout {
@Test(timeOut = 5000) // time in mulliseconds 测试通过
public void testThisShouldPass() throws InterruptedException {
Thread.sleep(4000);
}
@Test(timeOut = 1000) //测试不通过
public void testThisShouldFail() {
while (true){
// do nothing
}
}
}
4.testNG分组测试
public class TestGroup {
@BeforeGroups("database")
public void setupDB() {
System.out.println("setupDB()");
}
@AfterGroups("database")
public void cleanDB() {
System.out.println("cleanDB()");
}
@Test(groups = "selenium-test")
public void runSelenium() {
System.out.println("runSelenium()");
}
@Test(groups = "selenium-test")
public void runSelenium1() {
System.out.println("runSelenium()1");
}
@Test(groups = "database")
public void testConnectOracle() {
System.out.println("testConnectOracle()");
}
@Test(groups = "database")
public void testConnectMsSQL() {
System.out.println("testConnectMsSQL");
}
@Test(dependsOnGroups = { "database", "selenium-test" })
public void runFinal() {
System.out.println("runFinal");
}
}
5.testNG 套件测试
测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,因为套件是执行的功能。 它还允许灵活配置要运行的测试。 套件可以包含一个或多个测试,并由标记定义。https://www.yiibai.com/testng/suite-test.html
6.testNG 依赖测试
有时,我们可能需要以特定的顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。
TestNG允许指定依赖关系:
在@Test注释中使用属性dependsOnMethods,或者
在@Test注释中使用属性dependsOnGroups。
在TestNG中,我们使用dependOnMethods和dependsOnGroups来实现依赖测试。如果依赖方法失败,则将跳过所有后续测试方法。
学习链接:https://www.yiibai.com/testng/dependency_test.html
7.testNG参数化测试
https://www.yiibai.com/testng/parameterized-test.html
8.testNG + 硒负载测试
@Test(invocationCount =?)这个invocationCount确定TestNG应该运行这个测试方法的次数
public class TestRepeatThis {
@Test(invocationCount = 10)
public void repeatThis() {
System.out.println("repeatThis " );
}
} //输出- repeatThis()方法将运行10次
@Test(invocationCount =?,threadPoolSize =?)threadPoolSize属性告诉TestNG创建一个线程池以通过多个线程运行测试方法。使用线程池,会大大降低测试方法的运行时间。
public class TestMultipleThreads2 {
@Test(invocationCount = 3, threadPoolSize = 3)
public void testThreadPools() {
System.out.printf("Thread Id : %s%n", Thread.currentThread().getId());
}
}
9.TestNG + Spring 集成测试
https://www.yiibai.com/testng/junit-vs-testng-comparison.html