写点什么

使用 java+TestNG 进行接口回归测试

  • 2020-02-12
  • 本文字数:2114 字

    阅读完需:约 7 分钟

使用java+TestNG进行接口回归测试

TestNG 是一个开源自动化测试框架,TestNG 表示下一代(Next Generation 的首字母)。 TestNG 类似于 JUnit(特别是 JUnit 4),但它不是 JUnit 框架的扩展,相较于 Junit 而言,功能更强大,使用起来更加方便,比较适合测试人员来进行集成测试或是接口回归测试。


TestNG 有以下几大特点:


使用 java 和面向对象的功能


方法的名称就不必受限于某种固定的格式,可以通过注释来识别需要执行的方法;


方法中需要的一些参数可以通过注释传递;


注释是强类型的,所以有错误可以在编译期体现出来;


支持分组测试,依赖测试,并行测试,负载测试等


支持多线程测试


TestNG 常用的注释类型


col 1col 2
注释描述
@Test将类或是方法标记为测试的一部分
@BeforeSuite在该套件的所有测试都运行在注释的方法之前,仅运行一次。
@AfterSuite在该套件的所有测试都运行在注释的方法之后,仅运行一次
@BeforeClass在调用当前类的所有测试方法之前执行,注释方法仅运行一次
@AfterClass在调用当前类的所有测试方法之后执行,注释方法仅运行一次
@BeforeTest注释的方法将在属于标签内的类的所有测试方法运行之前运行
@AfterTest注释的方法将在属于标签内的类的所有测试方法运行之后运行。
@BeforeGroups此方法是保证在运行属于任何这些组的第一个测试方法之前,该方法被调用
@AfterGroups此方法是保证运行属于任何这些组的所有测试方法执行之后,该方法被调用
@BeforeMethod被注释的方法将在每个测试方法之前执行
@AfterMethod被注释的方法将在每个测试方法之后执行
@DataProvider被注释的方法的作用是提供测试数据,如果某个测试方法希望从这个DataProvider接收数据,就必须使用一个名字等于这个注解名字的DataProvider
@Parameters介绍如何将参数传递给测试方法


TestNG 参数化测试


TestNG 提供了 2 种传递参数的方式。


第一种: testng.xml 这种方式的优点是使得代码和测试数据分离,方便维护;缺点就是如果需要传递的参数不是基本的 java 类型,或是需要的值只能在运行时创建,这种方法就不再适用。


1544586294349010007.png


1544586305336091979.png


第二种:@DataProvider 这种能够提供比较复杂的参数(也叫 data-driven testing)。


我们项目中使用的是第二种


1544586328213024573.png


如图示:首先给测试方法添加值为 WithdrawBatchQueryLoopData 的属性 dataProvider,然后提供一个 name 与之对应的 @DataProvider 方法,这个方法里的具体实现,就是从配置文件或是数据库中读取数据。


TestNG 分组测试


分组测试是 TestNG 中的创新功能,分组测试使得我们可以进行各种灵活的测试,在想要并行多组不同的测试时,不需要重新进行编译。


1544586360115063491.png


分组可以应用在方法上(一个方法可以属于一到多个分组),也可以应用在类上,应用在类上时,这个类中的所有 public 方法都变成测试方法,即便他们没有被注解,也可以继续在需要增加属性的方法上重复 @Test 注解。分组执行测试方法有多种形式:


可以通过在 testng.xml 配置,来指定具体要执行的分组


1544586380975048469.png


也可以通过集成到 jenkins 中,通过参数化构建来设置要执行的分组


1544586396408043412.png


还可以通过运行 Run Configurations 时,设置要执行的分组


1544586407241095917.png


需要注意的一点:Group 标签会导致 @BeforeMethod 失效


@BeforeMethod 的作用是标明所注解的方法在每一个测试方法运行之前会执行一次。例如:


col 1col 2


1


2


3


4


5


6 | @BeforeMethod


Public ``void beforeMehod()


@Test


Public ``void testCase1()


@Test


Public ``void testCase2()


正常的执行的顺序为:beforeMehod—> testCase1—> beforeMehod—> testCase2


但是,在将 testCase 放入某一个 Group 之后,@BeforeMethod 就失效了


col 1col 2


1


2


3


4


5


6 | @BeforeMethod


Public ``void beforeMehod()


@Test(groups = ``"group1"``)


Public ``void testCase1()


@Test(groups = ``"group1"``)


Public ``void testCase2()


再次执行脚本,执行顺序变为 testCase1—>testCase2


解决方法:


1、将 @BeforeMethod 同样加入 group1


2、设置 @BeforeMethod 的属性 alwaysRun=true


TestNG 依赖测试


我们经常会遇到要测试的多个接口之间存在依赖关系,即某一个接口的执行需要依赖上一个接口的返回结果,比如执行批付查询时,需要先执行批量代付,那么这时就使用到了 TestNG 的依赖测试,TestNG 使用 dependsOnMethods 配合 alwaysRun 来设置测试方法之间的依赖关系,使用 dependsOnGroups 来设置分组之间的依赖关系


1544586490403026007.png


  • 强依赖:在测试方法运行之前,所有的依赖方法都必须运行并且成功,哪怕只有一个失败,测试方法都不会被调用(是 skip 而不是 fail)

  • 软依赖(alwaysRun=true):测试方法在依赖方法运行之后总是会被执行,即便某些依赖方法运行失败。


TestNG 预期异常测试


测试中,有时候我们期望某些代码抛出异常。


TestNG 通过 @Test(expectedExceptions) 来判断期待的异常, 并且判断 Error Message


1544586527275076597.png


TestNG 测试报告


执行完测试用例之后,会在项目的 test-output(默认目录)下生成测试报告


打开 index.html 文件可以看到测试结果摘要,包括:套件名、测试用例成功数、测试用例失败数、测试用例忽略数、执行时间和 testng.xml 文件。


测试用例都成功的话,测试结果以绿底标志,测试用例有失败的话,测试结果以红底标志。testNG 自带生成的测试报告不太美观,可以使用 testng-xslt 进行美化。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/196


2020-02-12 15:321313

评论

发布
暂无评论
发现更多内容

【直播回顾】参与ArkUI,共建OpenHarmony繁荣生态

OpenHarmony开发者

Open Harmony

Docker下RabbitMQ延时队列实战两部曲之一:极速体验

程序员欣宸

RabbitMQ 5月月更 RabbtiMQ延时队列

并发编程从入门到放弃系列开始和结束

艾小仙

Java 并发编程 多线程 异步

web前端培训带你学习 Midwayjs 实战

@零度

node.js 前端开发

蛟分承影,雁落忘归——袋鼠云一站式全自动化运维管家ChengYing(承影)正式开源

袋鼠云数栈

成为零代码布道者,推广明道云获取奖励

明道云

C/C++ 单元自动化测试解决方案实践

vivo互联网技术

c c++ 自动化测试

Python 中堪称神仙的6个内置函数

开发微hkkf5566

墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划

墨天轮

数据库 Apaache Doris 国产数据库

ironSource LevelPlay 聚合平台,现已适配应用开发框架工具包 Flutter

Geek_2d6073

【LeetCode】火柴拼正方形Java题解

Albert

LeetCode 6月月更

Serverless Job——传统任务新变革

阿里巴巴云原生

阿里云 Serverless 云原生 Job

自己如何做一个网站

源字节1号

网站开发

面试突击53:常见的 HTTP 状态码有哪些?

王磊

Java 面试

阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测,业务稳定性保障利器

阿里巴巴云原生

阿里云 云原生 性能压测 PTS

优酷老片修复算法,超高清重温童年回忆

阿里巴巴文娱技术

算法 计算机视觉 视频 多媒体

《数字经济全景白皮书》证券期货用户数字化篇 重磅发布

易观分析

证券 期货

焱融看|非结构化数据场景下,数据湖到底有多香?

焱融科技

数据湖 文件存储 非结构化数据 分布式文件存储 分布式文件系统

隔空手势交互,如何在现实世界上演“得心应手”?

阿里云视频云

计算机视觉 音视频 视频云

git代码管理可视化工具 :Sourcetree(mac环境)

西格玛男人Jerry

macos git 工具 代码管理

听说你写sql很溜,一条sql查询语句是如何执行的?

西格玛男人Jerry

sql 流程 查询 MySQL 数据库

泰山众筹代币燃烧模式dapp系统开发逻辑分析

开发微hkkf5566

java培训 | 零基础学习java开发的学习方法有哪些

@零度

Java 学习方法

浅拷贝、深拷贝

源字节1号

软件开发 前端开发 后端开发 小程序开发

MYSQL 几个常用命令使用

CRMEB

Android技术分享| 利用Kotlin协程,多任务并行,测试RTM SDK性能

anyRTC开发者

android kotlin IM 移动开发 实时消息

大数据培训如何使用DPM规划用户画像

@零度

大数据 dpm

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

手把手推导分布式矩阵乘的最优并行策略

OneFlow

模型 教程分享 分布式矩阵乘 数据并行

TDengine 2.6 正式发布,新增大量计算函数

TDengine

数据库 tdengine 物联网

为什么你的网站不被收录了呢?

源字节1号

使用java+TestNG进行接口回归测试_安全_王海燕_InfoQ精选文章