本文作者:兴业数金 伍君
为优化系统功能和性能,提高系统代码质量,程序员需要不断对系统进行测试。但看似简单的需求变更或Bug修复实则是一个巨大的工程,需要耗费大量的人力物力。如若采用自动化测试框架,可大幅度提高系统开发效率。本文将详细介绍自动化测试框架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. 离线安装
- 解压org.testng.eclipse.updatesite.zip文件
- 将解压文件所在目录plugins下的jar文件copy到eclipse安装目录的plugins目录下
- 重启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