Java接口自动化之TestNG单元测试框架(一)

ITester软件测试小栈

共 4269字,需浏览 9分钟

 ·

2021-02-02 08:36














本文3704字

阅读约需10分钟

第203次推送




上一篇Java接口自动化系列文章:Java接口自动化之log4j日志框架,主要介绍log4j日志介绍、日志三大组成部分及日志实战。


以下主要介绍TestNG的简介、@Test注解及其属性。



01
TestNG简介

1 TestNG介绍

TestNG 是java的一个单元测试框架,TestNG吸取了Junit框架的思想,形成了更强大的集成测试框架。

2 TestNG特点

  • 支持注解;

  • 灵活的运行配置;

  • 支持多线程、忽略、异常、参数化等测试。


3 加入TestNG依赖

在maven项目的pom.xml中,添加内容如下:


    org.testng
    testng
    7.0.0


02
@Test注解及常用属性

@@Test是TestNG 最基本的注解,用来将方法标注为测试方法。接下来会介绍@Test注解的常用属性

@Test是TestNG 最基本的注解,用来将方法标注为测试方法。接下来会介绍@Test注解的常用属性。


1 enable 测试方法是否执行

enable默认是 true , 表示执行这个方法,如果设置为 false ,则在运行时不会执行这个测试方法。

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的方法未执行。

2 dependsOnMethods 依赖方法

在依赖的方法运行完成之后运行当前方法,如果依赖方法测试不通过,那么当前方法也不会继续运行了。

依赖的方法可以有多个,格式为:@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方法被忽略运行了。


3 groups 分组

在运行时,一个组的方法会一起运行,然后再运行下一个组的方法;

格式为:@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



timeOut 超时属性

格式:@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方法因为超时运行失败。


5 多线程测试

格式:@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
===============================================



(完)




ITester测试开发小栈(ID:TestDevZone),技术人茶余饭后的充电宝,每周上午11:30更新文章。从精进的软件测试到硬核的测试开发、从精细的前端开发到缜密的后端开发,前沿互联网资讯传送,宝藏IT资源分享,热门招聘发布。

喜欢记得星标置顶,让我们一起守护成长

浏览 138
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报