适合测试人员使用的原因
比Junit涵盖功能更全面的测试框架
Junit更适合隔离性比较强的单元测试
TestNG更适合复杂的集成测试
TestNG使用引入版本到pom文件中
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
</dependency>
</dependencies>
下图为TestNG基本注解说明
- 输入注解@Test 选择testng包,自动引入
TestNG套件测试
- 验证多个类中加入Test注解,配置resources下的xml文档,把多个类分别引入,如下图
再有一个befortest与aftertest注解,beforesuit与aftersuit注解
运行配置文件,查看运行结果为先运行suit套件再运行beforetest注解再运行test注解
//一个Test注解类代码:
public class PayTest {
@Test
public void paytest(){
System.out.println("支付宝支付成功");
}
}
//一个套件注解类代码:
public class suitConfig {
@BeforeSuite
public void BeforeSuite() {
System.out.println("before suit 运行");
}
@AfterSuite
public void AfterSuite() {
System.out.println("After suit 运行");
}
@BeforeTest
public void BeforeTest() {
System.out.println("BeforeTest yunxing");
}
@AfterTest
public void AfterTest() {
System.out.println("AfterTest yunxing");
}
}
配置文件与运行结果展示:
TestNG忽略测试
- 注解后加enabled,则运行时跳过此方法
@Test(enabled = false)
public void enable2() {
System.out.println("enable2 执行");
}
TestNG组测试
- 注解后加groups 对一个类中不同方法分组
@Test(groups="server") //注解写在方法上
public void test1(){
System.out.println("这是服务端的测试方法111");
}
@Test(groups="client")
public void test2(){
System.out.println("这是客户端的测试方法111");
}
@BeforeGroups("server")
public void test3(){
System.out.println("这是服务端组运行之前运行的方法");
}
@AfterGroups("server")
public void test4(){
System.out.println("这是服务端组运行之后运行的方法");
}
运行结果:
这是服务端组运行之前运行的方法
这是服务端的测试方法111
这是服务端组运行之后运行的方法
这是客户端的测试方法111
- 注解后加groups对不同类分组
@Test(groups = "stu")//注解写在类上
public class GroupClass1 {
public void test1(){
System.out.println("班级 1 中的 男 学生");
}
public void test2(){
System.out.println("班级 1 中的 女 学生");
}
}
对应配置文件
TestNG异常测试
什么时候用到异常测试:传入某些不合法的参数,期望程序抛出异常的预期结果
@Test(expectedExceptions = RuntimeException.class)
public void runTimeExceptionFailed(){
System.out.println("注解方式抛出异常");
}
@Test(expectedExceptions = RuntimeException.class)
public void runTimeExceptionSuccess(){
System.out.println("throw方式抛出异常");
throw new RuntimeException();
}
TestNG依赖测试
如果被依赖方法未执行通过,则依赖方法不执行
TestNG参数化测试
类方法
@Test
@Parameters({"name","age"})
public void paramTest1(String name,int age){
System.out.println("这个小哥哥的name是 "+name+"age为 "+age);
}
通过xml传递参数
<?xml version="1.0" encoding="utf-8" ?>
<suite name="parameter">
<test name="xiaoge">
<classes>
<parameter name="name" value="张三"/>
<parameter name="age" value="23"/>
<class name="Exception"/>
</classes>
</test>
</suite>
通过本类中注解传递 参数
通过方法名传递参数 - 引入java-long包中的Method
TestNG多线程测试
注解实现多线程
@Test(invocationCount = 10,threadPoolSize = 3)
xml配置文件实现多线程
<!--
parallel线程是方法级别的 ,
methods级别:所有用例都可以在不同的线程下执行。tests级别:不同的test tag下的用例可以在不同的线程下执行,相同的test tag下的用例只能在同一个线程中去执行 。class级别:相同的class tag下的用例在同一线程中执行,不同的class tag下的用例可以在不同的线程中运行
thread-count:最大并发线程数
xml文件配置这种方法不能指定线程池,只有方法上才可以指定线程池
-->
<suite name="thread" parallel="methods" thread-count="2">
TestNG超时测试
@Test(timeOut = 3000)
public void testSusess() throws InterruptedException{
Thread.sleep(2000);
}
@Test(timeOut = 3000)
public void testFaild() throws InterruptedException{
Thread.sleep(4000);
}