Java自动化测试框架--TestNG详解

2024-05-11 01:12

本文主要是介绍Java自动化测试框架--TestNG详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 什么是TestNG

TestNG是一个开源的自动化测试框架,它受JUnit和NUnit启发,其中“NG”即表示Next Generation,其功能更强大使用更方便。

二. TestNG配置

2.1 POM文件配置

在maven工程的pom.xml文件中加入以下依赖:

<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.2</version></dependency>

2.2 TestNG插件安装

三. 用例运行方法

3.1 单个用例

选中该用例->右键,Run As ->TestNG Test

3.2 单个类的用例

打开类文件,空白处右键,Run As ->TestNG Test

和单个用例一样,不同之处只是在类文件里空白处点击右键。此操作会执行该类下所有的测试用例

3.3 多个类的用例(Test Suite)

使用testng.xml文件,该文件用来管理测试用例,并运行testNG。

<suite>:套件就是将所有的测试类整理在一块,形成一套测试用例

<test>:测试集是指测试模块,一般一个项目可以按照模块分为几部分,即不同的test

<classes>:测试集下的所有测试类

<class>:具体测试类,name 属性指定测试类的路径

<methods>:测试类下具体的测试方法,如果不写此标签则默认包含测试类下的所有方法。

举例,本文的testng.xml内容如下:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="testng test" parallel="false"><test name="API test"><classes><class name="com.apitest.APITest"/><class name="com.apitest.APITest2"/></classes></test><test name="GUI test"><classes><class name="com.seletest.FirstWebTest"/></classes></test></suite>

 

注:<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 必须要添加,这是testng.xml文件的规范要求。

运行结果如下:

四. TestNG注解

4.1 Before/After注解

4.2 Test注解

@Test 注解的作用很简单,即用来标识当前方法是测试方法。它可以加很多参数:

1) denpendsOnMethonds: 用来设置用例依赖。

 @Testpublic void apitest01() {System.out.println("in APITest, apitest01");Assert.assertEquals(false,true);}@Test(dependsOnMethods= {"apitest01"})public void apitest02() {System.out.println("in APITest, apitest02");}

 如上的两个用例,apitest01执行通过,则执行apitest02;如果apitest01执行失败,则apitest02直接跳过,不会执行:

2) alwaysRun:默认是false,设置为true时,无论什么情况都会运行。一般和dependsOnMethods结合。

@Testpublic void apitest01() {System.out.println("in APITest, apitest01");Assert.assertEquals(false,true);}@Test(dependsOnMethods= {"apitest01"},alwaysRun=true)public void apitest02() {System.out.println("in APITest, apitest02");}

 如上的两个用例,不管apitest01是否失败,apitest02都运行。运行结果如下:

3) enabled:默认是true,设置为false时表示用例失效(即不运行)。使用方法:

@Test(enabled=false)

4) Priority:设置用例运行的优先级。默认是0,优先级P0最高,其次是P1;高优先级的用例优先运行

 @Test(priority=3)public void apitest01() {System.out.println("in APITest, apitest01 -- P3 ");//Assert.assertEquals(false,true);}@Test(priority=2)public void apitest02() {System.out.println("in APITest, apitest02 -- P2");}@Test(priority=1)public void apitest03() {System.out.println("in APITest, apitest03 -- P1");}

上述用例的运行结果如下:

5)timeOut:指定测试方法执行的超时时间,如果超过指定的毫秒数,则认为执行失败并终止执行抛出异常。使用方法:

@Test(timeOut = 1000)

6)Groups: 指定用例所属的组,一般是对用例进行逻辑划分,譬如只想执行一部分用例,例如冒烟测试,可以定义一个冒烟用例集:

@Test(groups="smoke")public void apitest01() {System.out.println("in APITest, apitest01 -- P3 ");//Assert.assertEquals(false,true);}@Test(groups="regression")public void apitest02() {System.out.println("in APITest, apitest02 -- P2");}@Test()public void apitest03() {System.out.println("in APITest, apitest03 -- P1");}

注意,group需要在testng.xml中加入以下配置:

则运行结果如下,即“API test”中,只有属于smoke组的用例才会执行:

 

五. 用例的传参

即给测试方法传递参数,更进一步说,如何实现数据-脚本的分离。

5.1 Parameters

需要首先在testng.xml里设置,注意此时必须通过testng.xml来运行,否则找不到parameter。

 @Test()@Parameters({"name","age"})public void apitest01(String name, int age) {System.out.println("in APITest, apitest01");System.out.println(name + "'s age is: " + age + ".");}

 运行结果如下:

这种方式传参缺点很明显:

·只能通过testng.xml来运行,不够灵活

· 只能传递基础类型的参数

· 只能传递一组参数

5.2 DataProvider

DataProvider是更灵活更强大的参数传递方式。它支持各种数据类型的参数,可以传递多组参数。其返回值类型是Object类型的二维数组,定义如下:

@DataProvider(name="paraDatas")public Object[][] paraDatas(){Object[][] paras = {{"zhang san", 20},{"li si", 21},{"wang wu", 22}};return paras;}

 在测试用例的Test方法里,使用方法如下:

@Test(dataProvider = "paraDatas")public void apitest01(String name, int age) {System.out.println("in APITest, apitest01");System.out.println(name + "'s age is: " + age + ".");}

运行结果如下:

DataProvider比较灵活且强大,但它也有局限,即实际上还是在代码中hardcode的方式。如果多一种情况,还需要修改case(paraDatas)。

5.3 POI技术

Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。简而言之,可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。

本质上它还是使用DataProvider的方式传参,但可以真正实现数据-脚本的分离。

这里不多讲了~

此外还可以将数据库查询的结果作为参数传递,但本质是一样的。

六. 思考与总结

testNG还有很多很强大的机制,例如用例失败重试,需要实现IRetryAnalyzer接口,相比其他参数的使用,其稍微复杂一些,有空了再搞吧~

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

这篇关于Java自动化测试框架--TestNG详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978089

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分