TestNG
一、TestNG技术
maven地址:https://mvnrepository.com/artifact/org.testng/testng/7.0.0
文档地址:http://testingpai.com/article/1595507259282
1、TestNg使用
package com.lemon.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
//testng:http://testingpai.com/article/1595507259282
public class TestNgDemo1 {
@Test
public void test() {
//testng插件+testng坐标(依赖)
System.out.println("这是TestNgDemo1-test");
}
@Test(dependsOnMethods = "test3") //表示需要依赖test3方法
public void test2() {
System.out.println("这是TestNgDemo1-test2");
}
@Test()
public void test3() {
System.out.println("这是TestNgDemo3-test3");
}
@Test
public void test4() {
System.out.println("这是TestNgDemo3-test4");
Assert.fail(); //断言失败
}
}
2、并发测试:@Test(invocationCount=5,threadPoolSize=10)
package com.lemon.testng;
import org.testng.annotations.Test;
public class TestNgDemo2_Concurrent {
@Test(invocationCount = 50, threadPoolSize = 10) //可用做并发测试
public void test() {
System.out.println(Thread.currentThread().getName() + "== TestNgCurrent.test");
}
}
3、优先级:priority
package com.lemon.testng;
import org.testng.annotations.Test;
public class TestNgDemo3_Priority {
@Test(priority = 1) //值越小,优先级越高
public void test1() {
System.out.println("test1");
}
@Test(priority = 2)
public void test2() {
System.out.println("test2");
}
@Test(priority = 4)
public void test3() {
System.out.println("test3");
}
@Test(priority = 3)
public void test4() {
System.out.println("test4");
}
}
testng.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
<test name="模块/接口">
<classes>
<class name="com.lemon.testng.TestNgDemo1"/>
<class name="com.lemon.testng.TestNgDemo2_Concurrent"/>
<class name="com.lemon.testng.TestNgDemo3_Priority"/>
</classes>
</test>
</suite>
4、Before/After注解

package com.lemon.testng;
import org.testng.annotations.*;
public class TestNgDemo4_Before1 {
@Test
public void test() {
System.out.println("TestNgDemo4_Before1.test");
}
@Test
public void test2() {
System.out.println("我是TestNgDemo4_Before1中的.test2");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("suite套件中的所有测试运行之前运行-->beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("suite套件中的所有测试运行之后运行--afterSuite");
}
@BeforeClass
public void beforeClass() {
System.out.println("调用当前类中的第一个测试方法之前运行--beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println("调用当前类中的第一个测试方法之后运行--afterClass");
}
@BeforeTest
public void beforeTest() {
System.out.println("运行属于标记内的类的任何测试方法之前运行(test/test2)-beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println("运行属于标记内的类的任何测试方法之前运行(test/test2)-afterTest");
}
@BeforeMethod
public void beforeMehtod() {
System.out.println("每个测试方法之前运行(test/test2)-beforeMethod");
}
@AfterMethod
public void afterMehtod() {
System.out.println("每个测试方法之后运行(test/test2)-afterMehtod");
}
}
package com.lemon.testng;
import org.testng.annotations.Test;
public class TestNgDemo5_Before2 {
@Test
public void test() {
System.out.println("我是TestNgDemo5_Before2中的.test");
}
}
package com.lemon.testng;
import org.testng.annotations.Test;
public class TestNgDemo6_Before3 {
@Test
public void test() {
System.out.println("我是TestNgDemo6_Before3中的test");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
<test name="Before/After1">
<classes>
<class name="com.lemon.testng.TestNgDemo4_Before1"/>
<class name="com.lemon.testng.TestNgDemo5_Before2"/>
</classes>
</test>
<test name="Before/After2">
<classes>
<class name="com.lemon.testng.TestNgDemo6_Before3"/>
</classes>
</test>
</suite>
运行结果如图
5、Parameters参数化
package com.lemon.testng;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestNgDemo7_Parameter {
@Test
@Parameters({"type","version"})
public void test(String type,String version) {
System.out.println("type = " + type + ", version = " + version);
}
}
testng.xml文件中parameter配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="我的项目">
<test name="参数化">
<classes>
<class name="com.lemon.testng.TestNgDemo7_Parameter"/>
<parameter name="type" value="chrome"/>
<parameter name="version" value="81"/>
</classes>
</test>
</suite>
6、DataProvider数据提供者
package com.lemon.testng;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestNgDemo8_DataProvider {
@Test(dataProvider = "datas")
public void test(String username, String password) {
System.out.println("username = " + username + ", password = " + password);
}
//@如果DataProvider注解没有给name属性,name的值就是方法名,如果给了就是name的值。
//@DataProvider(name = "aaa"),顶部@Test(dataProvider = "aaa")
@DataProvider //@如果DataProvider注解没有给name属性,name的值就是方法名
public Object[][] datas() {
Object[][] datas = {
{"zhangsan", "123456"},
{"lisi", "123456"}
};
//excel => POI => 封装到二维数组中
//数据库 => jdbc => 封装到二维数组中
return datas;
}
@Test(dataProvider = "datas2")
public void test2(String username) {
System.out.println("username = " + username);
}
//@DataProvider注解的返回值是一维数组,那么@Test方法必须只有一个参数。
@DataProvider
public Object[] datas2() {
Object[] datas = {"zhangsan", "lisi", "马保国"};
return datas;
}
@Test(dataProvider = "datas3")
//单参数为自定义对象,相当于可以无限扩展参数
public void test3(Teacher t) {
System.out.println("t = " + t.getName() + "," + t.getSex() + "," + t.getAge());
}
//@DataProvider注解的返回值是一维数组,那么@Test方法必须只有一个参数。
@DataProvider
public Object[] datas3() {
Teacher t1 = new Teacher("马老师", 69, "男");
Teacher t2 = new Teacher("泰老师", 59, "男");
Teacher t3 = new Teacher("马老师", 60, "男");
Object[] datas = {t1, t2, t3};
return datas;
}
//dataProviderClass 指定数据支持所在的类,dataProvider所在的方法名,注意方法必须是静态。
@Test(dataProviderClass = TestNgDemo8_DataProviderClass.class, dataProvider = "createData")
public void datas4(String username, String password) {
System.out.println("username = " + username + ", password = " + password);
}
}
package com.lemon.testng;
import org.testng.annotations.DataProvider;
public class TestNgDemo8_DataProviderClass {
@DataProvider
public static Object[][] createData() {
Object[][] datas = {
{"zhangsan111", "123456"},
{"lisi1111", "123456"}
};
return datas;
}
}

浙公网安备 33010602011771号