上一篇Java接口自动化系列文章:Java接口自动化之log4j日志框架,主要介绍log4j日志介绍、日志三大组成部分及日志实战。
以下主要介绍TestNG的简介、@Test注解及其属性。
01
TestNG简介
TestNG 是java的一个单元测试框架,TestNG吸取了Junit框架的思想,形成了更强大的集成测试框架。
在maven项目的pom.xml中,添加内容如下:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
</dependency>
02
@Test注解及常用属性
@@Test是TestNG 最基本的注解,用来将方法标注为测试方法。接下来会介绍@Test注解的常用属性
@Test是TestNG 最基本的注解,用来将方法标注为测试方法。接下来会介绍@Test注解的常用属性。
import org.testng.annotations.Test;
public class TestDemo {
@Test(enabled = true)
public void testDemo1(){
System.out.println("这是testDemo1");
}
@Test(enabled = false)
public void testDemo2(){
System.out.println("这是testDemo2");
}
}
运行结果为:
从上图可以看出,enabled为true的方法执行了,enabled为false的方法未执行。
在依赖的方法运行完成之后运行当前方法,如果依赖方法测试不通过,那么当前方法也不会继续运行了。
依赖的方法可以有多个,格式为:@Test(dependsOnMethods = { "method1" , “method2” })。
修改testDemo1代码,运行时抛出异常,代码如下:
import org.testng.annotations.Test;
public class TestDemo {
@Test()
public void testDemo1(){
int i=10;
System.out.println(i/0);
System.out.println("这是testDemo1");
}
@Test(dependsOnMethods = {"testDemo1"})
public void testDemo2(){
System.out.println("这是testDemo2");
}
}
运行结果为:
从上图可以看出testDemo1方法运行失败后,testDemo2方法被忽略运行了。
在运行时,一个组的方法会一起运行,然后再运行下一个组的方法;
格式为:@Test(groups = "groupName")。
import org.testng.annotations.Test;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.AfterGroups;
public class TestDemo {
@BeforeGroups(groups = "server")
public void beforeGroupsOnServer() {
System.out.println("服务端组运行前执行的方法。。。");
}
@BeforeGroups(groups = "client")
public void beforeGroupsOnClient() {
System.out.println("客户端组运行前执行的方法。。。");
}
@Test(groups = "server")
public void test1() {
System.out.println("server test1 run ....");
}
@Test(groups = "server")
public void test2() {
System.out.println("server test2 run ....");
}
@Test(groups = "client")
public void test3() {
System.out.println("client test3 run ....");
}
@Test(groups = "client")
public void test4() {
System.out.println("client test4 run ....");
}
@AfterGroups(groups = "server")
public void afterGroupsOnServer() {
System.out.println("服务端组运行之后执行的方法。。。");
}
@AfterGroups(groups = "client")
public void afterGroupsOnClient() {
System.out.println("客户端组运行之后执行的方法。。。");
}
}
运行结果为:
服务端组运行前执行的方法。。。
server test1 run ....
server test2 run ....
服务端组运行之后执行的方法。。。
客户端组运行前执行的方法。。。
client test3 run ....
client test4 run ....
客户端组运行之后执行的方法。。。
===============================================
Default Suite
Total tests run: 4, Failures: 0, Skips: 0
格式:@Test(timeOut = 3000) 设置超时时间,单位为毫秒。
import org.testng.annotations.Test;
public class TestDemo {
// 单位为毫秒值,3秒内没有响应,就运行失败,反之成功
@Test(timeOut = 3000)
public void testSuccess() throws InterruptedException {
Thread.sleep(2000);
}
// 单位为毫秒值,2秒内没有响应,就运行失败,反之成功
@Test(timeOut = 2000)
public void testFail() throws InterruptedException {
Thread.sleep(3000);
}
}
运行结果为:
从上图可以看出,testFail方法因为超时运行失败。
格式:@Test(invocationCount = 10,threadPoolSize = 3)。
参数说明:
invocationCount:线程调用的次数,默认1次。
threadPoolSize:线程池,需与invocationCount组合使用。
接下来编写一个方法,定义3个线程,执行方法10次。
import org.testng.annotations.Test;
public class TestDemo {
@Test(invocationCount = 10,threadPoolSize = 3)
public void testDemo(){
System.out.println("---------");
System.out.printf("Thread Id : %s%n",Thread.currentThread().getId());
}
}
运行结果为:
[TestNG] Running:
---------
---------
Thread Id : 13
---------
Thread Id : 12
Thread Id : 14
---------
Thread Id : 13
---------
Thread Id : 14
---------
Thread Id : 12
---------
Thread Id : 12
---------
Thread Id : 13
---------
Thread Id : 14
---------
Thread Id : 12
===============================================
Default Suite
Total tests run: 10, Failures: 0, Skips: 0
===============================================
(完)
我是CoCo,计算机科学与技术专业,深漂大厂互联网民工(女),坐标深圳。5年工作经验,3年持续输出技术文。ITester软件测试小栈(ID:ITestingA)号主,Boss直聘好文社区签约作者,腾讯云社区优质创作者。专注于软件测试技术和宝藏干货分享,每周准时更新原创技术文章,每月不定期赠送技术书籍,愿我们在更高处相逢。喜欢记得星标⭐我,每周及时获得最新推送,第三方转载请注明出处。
喜欢记得星标置顶,让我们一起守护成长