注解
@Parameters
通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数
@Test
标识了一个测试用例
下面是此注解的常用属性
1.priority 标识了测试用例的执行顺序(后续在专门讲执行顺序)
2.description 描述用例
3.enable 标记的test方法是否要执行 默认为true 执行
4.dependsOnMethods 标记测试方法要依赖的测试方法
例如此方法依赖于testTwoMethod:
@Test(dependsOnMethods={"testTwoMethod"})
public void testOneMethod(){
System.out.println("Test One Method");
}
5.groups 指定标记方法归属于哪个组 对于组的概念的话后续讲
@Parameters 进行参数传递的功能 次注解应用于方法上 参数要对应于形参 参数的声明在testng.xml中。
@Optional 应用于方法的形参中 表示给这个参数一个默认值 进行数据传递
@BeforeClass 标记的方法在测试类运行之前运行。(会运行一次)一般用于初始化
@BeforeMethod 标记的方法会在每个测试用例执行之前执行(会执行多次) 一般用于清理环境等修改配置等
@BeforeTest 在整个测试运行之前执行
@ 相对应的有AfterMethod AfterClass AfterTest
@Listeners 定义测试类的监听器
执行顺序
1.用例面默认的执行顺序是根据方法名字母 (谁的字母大先执行 一般可以在方法名加上字母+数组 例如:test1_方法名)
2.在同一个类中使用@Tset(priority=1)注解的会按照priority的顺序执行 默认不写的话是0,则会按照方法名执行)
3.需要运行多个测试类:配置了testng.xml文件
<test verbose="10" preserve-order="true" name="报销单演示demo1">
<parameter name="phoneNumber" value="14082978625"/>
<classes>
<class name="com.test.api.testcase.Test1"/>
<class name="com.test.api.testcase.Test2"/>
<class name="com.test.api.testcase.Test3"/>
</classes>
</test>
@Test
public void test(){
System.out.println("first test1");
}
@Test
public void test1(){
System.out.println("first test2");
}
preserve-order主要是控制test下节点classes执行顺序的
则上面的执行顺序为
first test1
first test2
secord test1
secord test2
third test1
third test2
4.当我们在testng.xml文件中配置了preserve-order =true ,也在用例中设置了优先级,那么执行顺序是什么样呢?
首先xml 的配置还是上面的,我们给测试类Test2中的test2方法的优先级改为1,给Test3中的test2的方法的优先级改为1,
比如:
@Test
public void test1(){
System.out.println("third test1");
}
@Test(priority = 1)
public void test2(){
System.out.println("third test2");
}
那么现在的情况是Test2的方法test2和Test3中的test2方法的优先级都为1;
输出结果为:
first test1
first test2
secord test1
third test1
secord test2
third test2
分析:Test1 中的方法的优先级都为0,则按照字母顺序运行,接下来运行了仍然是优先级为0的方法 ,最后在运行了优先级为1的。
总结:这样的配置不能保证一个测试类的方法执行完成后再运行下个测试类。如果是同一priority优先级方法,按照配置的顺序执行。也即priority的优先级>preserve-order。
如果想要执行完这个测试类的方法再去执行下个测试类的话:
1.设置的priority 的优先级不能重复
2.不设优先级默认为0,按照方法名运行。
参考:
testng.xml tag详解
<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestAll" parallel="tests" thread-count="2"> ------测试套件的名称
<parameter name="phoneNumber" value="14082978625"/>
<test name="order">
<classes>
<class name="com.yiibai.TestConfig" />
<class name="com.yiibai.TestOrder" />
</classes>
</test>
<test name="database">
<classes>
<class name="com.yiibai.TestConfig" />
<class name="com.yiibai.TestDatabase" />
</classes>
</test>
</suite>
parallel -- TestNG是否运行不同的线程来运行这个套件。
thread-count -- 线程数
verbose="10" 运行的测试用例级别或详细程度
preserve-order="true" 是否按照顺序执行 默认是true
parameter -- 标签标识了传递的参数 对应了用例中的@Parameter
<class name="com.test.api.testcase.Test1">
<methods>
<include name=""></include>
<exclude name=""></exclude>
</methods>
</class>
<method> 标签可以标识方法包含了子标签<include>需要运行的测试方法,<exclude> 需要排除在外的测试方法。
网友评论