注释
@Before和@After 注释
这两个就比较多,一般用于在测试构件上。关于测试构件以后详细介绍,测试构件一般有测试之前的操作和测试运行之后的清除数据的操作
Before分类有@BeforeSuite,@BeforeTest, @BeforeGroups,@BeforeClass,@BeforeMethod
After分类有@AfterSuite,@ AfterTest, @AfterGroups,@ AfterClass,@ AfterMethod
每个注释的范围不同而已
举例:
package com.java.learn;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* create by Anthony on 2017/10/29
*/
public class TestNG_Demo1 {
@BeforeClass
public void setUp(){
System.out.println("启动测试的前提条件准备,一般放这个方法中");
}
@AfterClass
public void tearDown(){
System.out.println("测试运行结束后的步骤,一般是恢复环境到测试开始之前的状态");
}
@Test //执行测试
public void test1(){
System.out.println("Hello");
}
}
@DataProvider注释
标记一个方法是用来给其他测试方法提供数据的方法。要求该方法必须返回是object[][]
@Factory
标记这个方法是一个工厂,方法必须返回的是一个对象
@Listeners
在一个测试方法上定义一个监听。例如Selenium自动化测试中需要用到这个事件监听功能,方便我们输出日志
@Parameters
描述了如何给一个测试方法传提参数
例子:
package com.java.learn;
import com.sun.tracing.ProviderName;
import org.testng.annotations.*;
/**
* create by Anthony on 2017/10/29
*/
public class TestNG_Demo1 {
@Test
@Parameters({"Browser", "Server"})
public void test1(String browser, String server){
System.out.println("Hello");
System.out.println("这次启动浏览器是: "+browser+" 测试服务器地址是: "+server);
}
}
项目根目录下的testng.xml内容如下
@Test
在@Test下有很多选项可以设置,例如用例之间的依赖关系等
@Test注释下的属性
属性timeOut
字面意思就是超时判断,如果哪个测试方法需要监听执行的时间,那么就可以考虑采用timeOut属性,监控时间的功能。
例如,实际的接口测试中,加入登录接口时间不能超过3秒中。下面来看看如何监控这个方法如果运行时间超过3秒就抛出异常
package com.java.learn;
import org.testng.annotations.Test;
/**
* create by Anthony on 2017/10/31
*/
public class TimeoutTest {
@Test(timeOut = 3000)
public void loginTest(){
try{
Thread.sleep(3100);
}catch (InterruptedException e){
System.out.println(e.toString());
}
}
}
运行下这个Testng测试用例,看是否抛出异常
更改下Thread.sleep(2800);再次运行,看看效果
属性enabled
在Testng中,如果方法前面添加了@Test注释,然后没有其他的属性,那么默认这个用例会被自动运行。在@Test注释中提供了一个enabled的属性,可以临时去修改该条用例不被执行。Enable属性有两个值true和false
不让test2用例执行
package com.java.learn;
import org.testng.annotations.Test;
/**
* create by Anthony on 2017/10/31
*/
public class TestNG_Demo2 {
@Test
public void test1(){
System.out.println("test1");
}
@Test(enabled=false)
public void test2(){
System.out.println("test2");
}
@Test
public void test3(){
System.out.println("test3");
}
@Test
public void test4(){
System.out.println("test3");
}
}
属性priority
一个类文件下的测试用例按照我们设想的顺序去执行,而不是默认按照方法名的字母排序去执行
@Test注释中有一个属性,叫priority支持设置用例的优先级。如果不带这个属性,默认priority是等于0,而且priority值越小,优先级越高
例子:设置的优先顺序是test4->test3->test1->test2
package com.java.learn;
import org.testng.annotations.Test;
/**
* create by Anthony on 2017/10/31
*/
public class TestNG_Demo2 {
@Test(priority = 2)
public void test1(){
System.out.println("test1");
}
@Test(priority = 4)
public void test2(){
System.out.println("test2");
}
@Test(priority = 1)
public void test3(){
System.out.println("test3");
}
@Test
public void test4(){
System.out.println("test4");
}
}
属性invocationCount和invocationTimeOut
属性和timOut差不多,只不过是监控运行多次同一个用例的总耗时是否达到设置的最大值。
- invocationCount
字面意思就是调用的次数统计,这个属性是的英文解释是:The number of times this method should be invoked. 就是这个测试用例被调用执行的次数。说明这个属性可以设置一个用例可以重复跑多次。
- invocationTimeOut
字面意思是调用的超时,看看英文的解释:The maximum number of milliseconds this test should take for thecumulated time of all the invocationcounts. This attribute will be ignored ifinvocationCount is not specified.这句话,说了两个意思,第一个是设置一个最大的毫秒数来计算执行多次后总共耗时多少,耗时值不能超过设置的最大毫秒数。第二个意思是说,这个属性是和invocationCount结合使用才会工作
代码举例:设置了执行次数数5次,5次执行总共耗时不能超过5100毫秒,否则抛出中断异常
package com.java.learn;
import org.testng.annotations.Test;
/**
* create by Anthony on 2017/10/31
*/
public class TimeoutTest {
@Test(invocationCount = 5, invocationTimeOut = 5100)
public void loginTest() throws InterruptedException{
Thread.sleep(1000);
System.out.println("login test");
}