自动化测试提速之利剑——TestNG

在程序员的日常工作中,最让程序员揪心的莫过于需求变更或系统出现Bug。需求变更要求程序员调整或是新增功能,系统出现Bug则要求程序员Debug,修复缺陷。

而这些变动的背后,还存在着一轮又一轮的单元测试、组件测试、集成测试、发布测试、用户测试等。荷兰计算机科学家E.W.Dijkstra曾说:“程序测试只能证明错误的存在,但不能证明错误的不存在。”所以在系统上线前,程序员们只能不断测试发现新的Bug来达到优化系统的目的。

因此,看似简单的需求变更或Bug修复实则是一个巨大的工程,需要花费大量的人力物力。于是程序员们开始思考,是否能够将这一轮又一轮的测试自动化?老子曰:“君子性非异也,善假于物也。“当需求改变或出现Bug时,使用例如TestNG这样的测试框架就可以一键自动测试系统功能和性能,提高系统代码质量并加快系统上线。

本文将详细介绍TestNG在具体场景中的应用。在介绍TestNG之前,我们首先来回顾一下软件测试相关概念。

软件测试

软件测试目标

任何运行的系统都会存在系统缺陷,软件测试不仅可以向开发者和用户展示软件能够满足的需求,而且能够发现软件中存在的缺陷和不足。

软件测试分为有效性测试和缺陷测试。有效性测试指向待测试的单元、组件或系统输入测试数据,能够得到预期的结果。有效性测试能够证明软件满足用户的需求。缺陷测试指输入导致异常行为的数据,能够发现系统隐藏的缺陷。缺陷测试能够发现软件存在的缺陷和不足,为后期的系统完善提供依据。

软件测试阶段

软件测试大体可以分为开发测试、发布测试和用户测试三个阶段。在开发测试阶段,对系统进行测试来发现故障和缺陷。 在发布测试阶段,对系统的一个完整版本进行测试,然后发布给客户。在用户测试阶段,系统的用户或是潜在的用户,在他们自己的环境中测试交付的系统

本段参考《软件工程(原书第9版)》[英] 萨默维尔 著,程成 等 译

就开发测试阶段而言,又可分为单元测试、组件测试和系统测试。单元测试对单独的程序单元或对象类进行测试。单元测试应该着重测试对象或方法的功能。 组件测试将多个程序单元组合创建一个合成的组件。组件测试应该着重测试组件的接口。系统测试集成系统中的一些或所有的组件作为一个整体进行测试。系统测试应该着重测试组件的交互。

软件测试流程

软件测试流程是一个复杂的过程,每个软件测试阶段都对应着一个测试流程。大体上,测试流程按照测试进度可以分为设计测试用例、准备测试数据、用测试数据运行测试程序和将结果与测试用例进行比较四个过程。

每个测试过程,都对应着输出产物。如图所示,设计测试用例的产物为测试用例,准备测试数据的产物为测试数据。正因为测试工作如此繁琐和重复, 我们急切需要通过运用测试工具,达到提高测试效率的目的。

采用TestNG自动化测试,事先编写好TestNG测试用例,当需求变化或是代码变动时,执行TestNG测试用例,能够迅速检验出系统的缺陷。同时,TestNG能够自动化生成测试报告,通过程序稍加处理优化,便可生成符合用户需求的测试报告,极大的降低了项目的整体时耗。让测试人员从测试工作中解脱出来,专心从事有意义的测试设计等活动。

TestNG概念

TestNG,全称为Testing, Next Generation,即下一代测试技术。

TestNG脱胎于业界标杆的JUnit,但比JUnit更加强大和易于使用。TestNG涵盖几乎所有类型的测试:单元、组件、集成和前端(Selenium+TestNG)等。

TestNG的特点:

• 支持注解

• 支持多线程和线程安全

• 数据驱动( @DataProvider )

• 灵活的运行时配置

• 支持分组

• 支持依赖测试方法,并行测试,负载测试,局部故障

• 灵活的插件API( Eclipse, IDEA, Maven等)

TestNG语法

TestNG基本注解介绍:

TestNG基础语法

编写TestNG测试用例包含两部分,业务逻辑测试类和编写xml格式的测试套件:

1. 业务逻辑测试类,该类继承TestNG抽象类(AbstractTestNGSpringContextTests)并在类中加入TestNG注解。如类中需要测试的方法前要添加注解@Test,需要在当前类第一个测试方法之前执行的代码要添加注解@BeforeTest,需要接收suite套件的参数要添加注解@Parameters

2. 编写xml格式的测试套件suite,用<suite>标签来定义。一个suite能够包含一个或者多个测试,用 <test> 标签来表示一个测试,并且可以包含一个或者多个TestNG类。所谓TestNG类,是一个Java类,它至少包含一个TestNG注解,它由<class> 标签表示,并且可以包含一个或多个测试方法。在套件中可以定义传递给业务逻辑代码类的参数,如<parameter name="contry" value="China" />

TestNG其他语法

Group分组

在TestNG业务逻辑代码类,通过@Test(groups = "group1")方式来指明方法所属的组。

Group分组测试的xml套件,通过标签<groups>定义分组区间,通过标签<define>在套件中定义分组。

参考文献

https://testng.org/doc/index.html

https://testng.org/doc/documentation-main.html

详细语法可以参考TestNG官网。

TestNG实战

本文基于Eclipse开发平台、Spring Boot框架和Maven项目管理工具演示TestNG案列。演示案例包含步骤:Eclipse TestNG插件安装、添加maven依赖、编写TestNG test方法和编写TestNG XML用例。

Eclipse插件安装

可以通过在线安装和离线安装两种方法安装Eclipse TestNG插件。

1. 在线安装

(1)启动Eclipse,点击Help>Eclipse Markerplace...

(2)在find输入框中输入testng查找到 TestNG for eclipse,然后点击install,按照提示安装

2. 离线安装

1.解压org.testng.eclipse.updatesite.zip文件

2.将解压文件所在目录\plugins下的jar文件copy到eclipse安装目录的\plugins目录下

3.重启eclipse

添加maven依赖

在maven库中添加TestNG jar包

 

编写TestNG方法

TestNG测试方法和JUnit测试类相同,只要继承AbstractTestNGSpringContextTests,如:

编写TestNG XML用例

 1.参照TestNG语法编写TestNG XML用例。

2.右击编写好的TestNG xml文件,Run As-TestNG Suite

3. 从Console和Results of running suite中查阅TestNG case运行的结果

执剑人TestNG应用

TestNG自动化测试在执剑人项目组已全面普及,并结合Jacoco自动检测代码覆盖率,执剑人目前代码覆盖率已经达到70%。 在系统迭代过程中,通过TestNG的自动化测试,执剑人软件测试效果事半功倍。

最后,可联系本文作者获取项目DEMO源码。

 

伍君

兴业数金/创新事业群/开放平台

电话:13917873617

邮箱:wujun@cibfintech.com

 

分享到: