1.testng.xml结构规则
<test name="xxxx">
<!-- 参数定义的方法 -->
<parameter name="first-name" value="Cedric"/>
<!-- groups的用法,前提是需要存在classes的组,否则所有方法不被运行 -->
<groups>
<!-- 定义组中组的方法 -->
<define name="groups_name">
<include name="group1"/>
<include name="group2"/>
</define>
<run>
<!-- 此处用组名来区别 -->
<inclue name="groups_name" />
<exclue name="groups_name" />
</run>
</groups>
<!-- classes的用法,classes中包含类名,类名底下可以包含方法名或排除方法名 -->
<classes>
<class name="class1">
<methods>
<!-- 此处用方法名来区别 -->
<include name="method_name" />
<exclude name="method_name" />
</methods>
</class>
</classes>
</test>
2.TestNG注解
用于在测试类中注解:
TestNG注解.png
注解 | 描述 |
---|---|
@BeforeSuite | 在该套件的所有测试都运行在注释的方法之前,仅运行一次。 |
@AfterSuite | 在该套件的所有测试都运行在注释方法之后,仅运行一次。 |
@BeforeClass | 在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。 |
@AfterClass | 在调用当前类的第一个测试方法之后运行,注释方法仅运行一次。 |
@BeforeTest | 注释的方法将在属于<test> 标签内的类的所有测试方法运行之前运行。 |
@AfterTest | 注释的方法将在属于<test> 标签内的类的所有测试方法运行之后运行。 |
@BeforeGroups | 配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。 |
@AfterGroups | 此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。 |
@BeforeMethod | 注释方法将在每个测试方法之前运行。 |
@AfterMethod | 注释方法将在每个测试方法之后运行。 |
@DataProvider | 标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [] ,其中每个Object [] 可以被分配给测试方法的参数列表。 要从该DataProvider 接收数据的@Test 方法需要使用与此注释名称相等的dataProvider 名称。 |
@Factory | 将一个方法标记为工厂,返回TestNG 将被用作测试类的对象。 该方法必须返回Object [] 。 |
@Listeners | 定义测试类上的侦听器。 |
@Parameters | 描述如何将参数传递给@Test 方法。 |
@Test | 将类或方法标记为测试的一部分 |
3.Java文件的测试用例中通过获取数据
-
方法一,Parameters:
@Test(parameters=“para1”) public void testcase(string para1){ <!--具体的测试用例,参数的para1自动获取@test中声明的变量, 读取的是testng.xml中声明的参数para1的value值 --> System.out.println("参数值为:"+"para1"); }
调用数据的方法: @Test(parameters="para1")
说明:如果有多个参数,可以使用:@Test(parameters={"para1","para2"})
-
方法二,DataProvider:
@DataProvider public Object[][] dataprovider(){ return new Object[][]{{1,2,3},{3,2,1}}; }
调用数据方法: @Test(dataprovider="dataprovider")
说明:
- @DataProvider只能返回Object数组结果
- Object的行中的每一列标识一个参数(比如上面的例子是3个参数),列数决定了调用的方法要执行的次数(比如上面的例子是执行2次)
- 方法的执行次数为赋值参数的遍数。比如提供数组为1行,则只执行一次;如果是数组为3行,则执行3次。
- 获取数据的dataprovider()和方法调用数据时的“dataprovider”要相同,这里的值是区分大小写的
扩展:
- @DataProvider写在单独的class里,增强复用性。
这时调用该数据的方法为:@Test(dataprovider="XXX",dataClass=YYY.class)
说明:读取YYY.class下的@DataProvider为XXX的Object数组数据 - @DataProvider下定义的数组,通过其他文件读取,比如读取excel,返回一个Object数组
- @DataProvider和@Parameters不能同时声明,但是可以通过其他方法实现同时使用。
- @DataProvide可以通过parallel实现并行执行线程,默认10个,可以在testng.xml中进行修改(<suite name="XXX" data-provider-thread-count="YYY">)
@DataProvider(name = "dataprovider1",parallel = true)
public Object[][] dataprovide(){
return new Object[][]{{1,2},{2,1}};
}
网友评论