速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

使用 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:321325

评论

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

文本检测实战:使用OpenCV实现文本检测(EAST 文本检测器)

AI浩

【得物技术】基于自注意机制的图像识别算法

得物技术

算法 图像识别 识别 图像 算法实践

用Python保住“设计大哥“的头发,直接甩给他10000张参考图,爬虫采集【稿定设计】平面模板素材

梦想橡皮擦

11月日更

Python代码阅读(第60篇):列表是否包括指定的元素

Felix

Python 编程 列表 阅读代码 Python初学者

阿里云发布云原生加速器,携手生态企业拥抱数字时代

阿里巴巴中间件

云计算 阿里云 云原生 中间件 数字化

惊为天人!Alibaba新产SpringBoot深度历险(嵩山版)开源

热爱java的分享家

Java 架构 面试 程序人生 编程语言

传统IT开发与低代码开发争议白热化,技术开发规则或将重构?

优秀

低代码 低代码开发 低代码平台

StarRocks在格洛博电商系统的应用实践

StarRocks

数据库 大数据 数据分析 StarRocks

起飞!Alibaba全新出品JDK源码学习指南(终极版)限时开源

热爱java的分享家

Java 架构 面试 程序人生 编程语言

自定义View:如何手动实现ViewGroup的拖拽

Changing Lin

11月日更

24H营业的无人售药机上线 EasyDL帮你实现“排队自由”

百度大脑

人工智能 百度

大规模任务调度在 AfterShip 的高可用实践

AfterShip

高可用 任务调度 基础架构

MatrixDB 4.3 新特性:从“持续聚集”说起

YMatrix 超融合数据库

时序数据库 分布式时序数据库 MatrixDB

阿里云发布云原生加速器,携手生态企业拥抱数字时代

阿里巴巴云原生

云计算 阿里云 云原生 生态企业 创投

19 K8S之临时/hostPath/网络存储卷

穿过生命散发芬芳

k8s 11月日更

Lenovo x StarRocks:简化数据处理链路,极大提升BI分析效率

StarRocks

数据库 大数据 数据分析 StarRocks

前端遇到的那些技术难点

CRMEB

Can't Connect to MySQL Server on IP Address (10061) 错误的解决方案

蒋川

MySQL 数据库 MySQL 运维 MySQL 数据库

如何巧妙使用Camtasia制作PPT讲解视频?

淋雨

Camtasia

蚁剑的分析和利用

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

“阿里爸爸”又爆新作!Github新开源303页Spring全家桶高级笔记

热爱java的分享家

Java 架构 面试 程序人生 编程语言

NLP进阶,使用TextRNN和TextRNN_ATT实现文本分类

AI浩

中国邮政邮科院 X StarRocks:统一OLAP平台,大幅降低运维成本

StarRocks

数据库 大数据 数据分析 StarRocks

内测邀请|宜搭应用搭建体验全新升级,邀您抢先体验!

一只大光圈

钉钉 低代码 数字化转型 低代码平台 钉钉宜搭

linux shell 命令行移动光标快捷键之跳到行首尾

WindFlying

跨越速运 x StarRocks:统一查询引擎,强悍性能带来极速体验

StarRocks

数据库 大数据 数据分析 StarRocks

我为什么坚持在公司开分享会?

boshi

团队管理 知识管理

Go 语言学习查缺补漏ing Day1

Regan Yue

Go 语言 11月日更

AfterShip 亿级流量 API 网关的演进

AfterShip

架构演进 kong API Gateway

猿辅导 x StarRocks:构建统一OLAP平台,全面升级数据分析能力

StarRocks

数据库 数据分析 StarRocks

技术分享 | 让实时协同的框架绘图变得丝滑起来

ShowMeBug

架构 绘图 实时消息

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