NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

揭开进程的概念、状态、通信的迷雾。看完瞬间豁然开朗

Linux服务器开发

线程 网络编程 Linux服务器开发 Linux后台开发 进程管理

程序员有哪些不可或缺的效率神器?

Jackpop

开发

2021年您应该知道的技术之一!Java工程师一天工作多久

策划Java工程师

Java 程序员 面试 后端

2021年Java开发实战!Java获取系统日期时间

Java 程序员 面试 后端

2021年您应该知道的技术之一!Javafor循环乘法表

策划Java工程师

Java 程序员 面试 后端

Java磁盘文件IO

文件I/O

Tensorflow日常随笔(一)

毛显新

tensorflow

2021吊打面试官系列!mysql数据库版本最新

Java 程序员 面试 后端

牛客网爆火!面试命中率高达 90% 的阿里 10W 字面试笔记已被疯传

Java 程序员 架构 面试 计算机

体验设计工具:18格窗口

石云升

用户体验 7月日更 体验设计

2021年Java面经分享:mysql创建数据表

策划Java工程师

Java 程序员 面试 后端

2021年Java面试心得:西安Java电商开发招聘

策划Java工程师

Java 程序员 面试 后端

2021春招BAT面试真题详解,mysqlloaddata自增id

策划Java工程师

Java 程序员 面试 后端

2021春招BAT面试真题详解,从单体式架构迁移到微服务架构

策划Java工程师

Java 程序员 面试 后端

2021春招面试,mysql自增主键最大值

策划Java工程师

Java 程序员 面试 后端

阿里面试官把以往的Java面试题全部总结在这份《Java10W字面试复盘笔记》里面了

Java 程序员 架构 面试 计算机

操作系统--虚拟内存

en

2021京东Java面试真题:Java枚举的作用与好处

Java 程序员 面试 后端

2021年Java面试心得:Java基本类型对应的包装类型

策划Java工程师

Java 程序员 面试 后端

Fil行情:什么时候投资fil合适?

区块链 分布式存储 IPFS fil fil行情

Drools 入门

LeifChen

drools 规则引擎 8月日更 业务规则

Text classification with TensorFlow Hub: Movie reviews

毛显新

tensorflow

想要跳槽拿高薪,却没有大型性能调优经验怎么办?淘宝架构师手把手带你前进

Java架构师迁哥

2021年Java面试心得:Java开发工程师试用期一般多久

策划Java工程师

Java 程序员 面试 后端

2021年“金三银四”来袭!Java开发接口利用http协议

策划Java工程师

Java 程序员 面试 后端

redis,memcached,nginx网络组件

赖猫

nginx redis memcached 网络组件

程序员专属的搜索主页

程序员阿杜

搜索技巧 搜索引擎;

开发者必备神器,你真的会用吗?

Jackpop

2021Java高级面试题!Java面试问题大全及答案大全下载

Java 程序员 面试 后端

【翻译】数据包的旅程 - 关键角色

luojiahu

交换机 路由器 OSI模型 ARP协议

熬夜整理的c/c++万字总结(一)

C语言与CPP编程

c c++

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