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

简介: TestNG是一个开源自动化测试框架,相较于Junit而言,功能更强大,使用起来更加方便,比较适合测试人员来进行集成测试或是接口回归测试。

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

一、TestNG的特点

  • 使用java和面向对象的功能
  • 方法的名称就不必受限于某种固定的格式,可以通过注释来识别需要执行的方法;
  • 方法中需要的一些参数可以通过注释传递;
  • 注释是强类型的,所以有错误可以在编译期体现出来;
  • 支持分组测试,依赖测试,并行测试,负载测试等
  • 支持多线程测试

二、TestNG常用的注释类型

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

三、TestNG参数化测试

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

第一种: testng.xml

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

第二种:@DataProvider

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

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

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

四、TestNG分组测试

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

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

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

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

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

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

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

@BeforeMethod
Public void beforeMehod()
@Test
Public void testCase1()
@Test
Public void testCase2()

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

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

@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来设置分组之间的依赖关系

  • 强依赖:在测试方法运行之前,所有的依赖方法都必须运行并且成功,哪怕只有一个失败,测试方法都不会被调用(是skip而不是fail)
  • 软依赖(alwaysRun=true):测试方法在依赖方法运行之后总是会被执行,即便某些依赖方法运行失败。

六、TestNG预期异常测试

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

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

七、TestNG测试报告

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

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

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

作者:王海燕

来源:宜信技术学院

相关文章
|
1天前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
40 4
|
1天前
|
Java 测试技术 数据库
【JAVA基础篇教学】第十七篇:Java单元测试
【JAVA基础篇教学】第十七篇:Java单元测试
|
1天前
|
Java
PTA帅到没朋友(Java语言)+测试点
PTA帅到没朋友(Java语言)+测试点
8 1
|
1天前
|
Java API 容器
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
Java8函数式编程接口:Consumer、Supplier、Function、Predicate
8 1
|
1天前
|
IDE Java 测试技术
Java测试三两事
Java测试三两事
10 1
|
1天前
|
Web App开发 缓存 前端开发
《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
【5月更文挑战第8天】这篇文档介绍了如何在IE、Chrome和Firefox浏览器中处理不信任证书的问题。作者北京-宏哥分享了如何通过编程方式跳过浏览器的证书警告,直接访问不受信任的HTTPS网站。文章分为几个部分,首先简要介绍了问题背景,然后详细讲解了在Chrome浏览器中的两种方法,包括代码设计和运行效果,并给出了其他浏览器的相关信息和参考资料。最后,作者总结了处理此类问题的一些通用技巧。
16 2
|
1天前
|
Java ice
【Java开发指南 | 第二十九篇】Java接口
【Java开发指南 | 第二十九篇】Java接口
9 0
|
1天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
14 4
|
1天前
|
Web App开发 JavaScript 前端开发
《手把手教你》系列技巧篇(四十三)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-上篇(详解教程)
【5月更文挑战第7天】本文介绍了如何在Java+Selenium自动化测试中处理浏览器对不信任证书的处理方法,特别是针对IE、Chrome和Firefox浏览器。在某些情况下,访问HTTPS网站时会遇到证书不可信的警告,但可以通过编程方式跳过这些警告。
13 1
|
1天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
45 3

热门文章

最新文章


http://www.vxiaotou.com