一、官方文档:
http://testng.org/doc/documentation-main.html
二、基本介绍
1、作用:单元测试、集成测试框架
2、特性:使用注解、线程池、参数化、数据驱动
3、步骤:(提前配置好testng)代码中使用注解——配置testng.xml——运行TestNG
三、常用注解:
1. @DataProvider
1.1、作用:提供数据的给test方法
1.2、格式必须返回Object[][],并且里面的元素必须是Object[],可以理解为返回的是一个Sheet,元素都是每条记录
1.3、属性:
name:数据驱动名称,不填写默认为数据驱动方法名
parallel:并行进程,默认false,若设置为true,则需要在.xml文件中的suite标签中添加属性data-provider-parallel-count="?"
2. @Test
2.1、作用:提供测试方法
2.2、注意:参数类型与数据驱动中返回的每列的数据一致
2.2、属性:
dataProvider:数据驱动,值等于数据驱动名称
dataProviderClass:数据驱动类,设置的话值为指定的提供数据驱动的类。
在test方法中先写dataProviderClass属性,在写dataProvider属性
groups:设定groups可以把多个测试方法放一个组中,值为组名,用花括号和双引号
dependsOnGroups:先执行指定组里面的测试方法,再执行本测试方法,值为指定组名,用花括号和双引号,多个组名使用逗号隔开
dependsOnMethods:先执行指定方法,再执行本测试方法,值为指定的方法名,用花括号和双引号,多个方法名使用逗号隔开
invocationCount:调用次数
invocationTimeout:单位毫秒,若invocationCount未设置,则此属性无意义
successPercentage:成功百分率,只有在invocationCount设置时才有意义,一般都写100
ThreadPoolSize:线程池大小,只有在invocationCount设置时有效
timeout:超时,不需要跟着invocationCount出现,使用超时常用此属性
priority:优先级,值越低越优先
enabled:是否执行,默认true
parameters:参数化,引用外部文件,
3.@Parameters:
3.1、作用:参数化,将外部的数据文件批量引入
3.2、属性:
value:参数化的名字,也就是,当.xml文件中有parameter标签时,parameter标签的name属性的值,值使用花括号和引号
3.3、注意:和Before系列的注解一起使用,需在@dataProvider前执行;有该注解后,则不能单独运行TestNG类,而要运行testng.xml文件TestSuit,因为属性引用了testng.xml的标签属性
3.4、举例子:
<!-- testng.xml文件内容 -->
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<!-- 使用parameter标签,引入外部文件,name:起一个名字;value:文件的路径 -->
<parameter name="filePathParam" value="D:\\app_testcase.xlsx"/>
<test name="Test">
<classes>
<class name="com.youce.test.TestRun"/>
</classes>
</test>
</suite>
public class TestRun {
// 初始化文件地址为null
private String filePath = null;
// 使用@Parameters注解引入外部文件,括号内的属性为testng.xml中parameter标签的name的值
@Parameters({"filePathParam"})
// 需使用先于@dataProvider的注解
@BeforeTest
// 该方法的作用主要是给文件地址变量filePath赋值
//testng.xml中parameter标签的value的值,也就是文件的地址自动赋值给方法中的参数fromTestngXMLParam
public void beforeTest(String fromTestngXMLParam){
this.filePath = fromTestngXMLParam;
}
@Test(dataProvider="data")
public void f(Object a,Object b,Object c,Object d,
Object e,Object f) {
System.out.println(a + "\t" + c);
}
@DataProvider
public Object[][] data(){
Object[][] value = null;
try{
// 该类是自己手动写的一个处理.xlsx文件,用来获取单元格内容
// 该处传参为文件地址
ExcelUtil excel = new ExcelUtil(this.filePath);
value = excel.getArrayCellVale(0);
}catch(Exception e){
e.printStackTrace();
}
return value;
}
}
4.按对记的:
@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeGroups
@AfterGroups
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
四、.xml文件测试配置
1、作用:测试套件TestSuit,可编辑测试配置,例如:运行指定的类或包,线程数,测试名称等
2、标签:
2.1、suite标签:
测试套件,属性name为套件名称,属性parallel并行开关,默认false ;若parallel为true,则它的值可为"method"/"tests"/"classes"/"instances",且要新增属性thread-count,指定线程数
2.2、test标签:
测试用例,属性name为测试名称,可以有子标签classes和packages,他们下面继续可以有子class和package
2.3、parameter标签:
参数化标签,属性name为参数化名称,注解@Parameters与之保持一致,属性value为外部文件地址
<!--testng.xml文件 -->
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<!-- <suite name="Suite" parallel="method" thread-count="5"> -->
<!-- <suite name="Suite" parallel="tests" thread-count="5"> -->
<!-- <parameter name="filePathParam" value="D:\\test01.xlsx"/> -->
<parameter name="filePathParam" value="D:\\app_testcase.xlsx"/>
<test name="Test">
<classes>
<!-- <class name="com.youce.test.TestRun"/> -->
<!-- <method>
<exclude name="f"/>
<include name="f"/>
</method> -->
<class name="com.youce.test.NewTest2"/>
</classes>
</test> <!-- Test -->
</suite>
网友评论