删除或更新信息,请邮件至freekaoyan#163.com(#换成@)

面向大型管理信息系统的自动化测试设计与实现

本站小编 Free考研考试/2022-01-02

陈果,*, 谢建军,, 周小军,中国科学院计算机网络信息中心,北京100190

Design and Implementation of Automation Testing in Large-Scale Management Information Systems

CHEN Guo,*, XIE Jianjun,, ZHOU Xiaojun,Computer Network Information Center, Chinese Academy of Sciences, Beijing 100190, China

通讯作者: *陈果(E-mail:chenguo@cnic.cn

收稿日期:2021-03-1网络出版日期:2021-04-20

Received:2021-03-1Online:2021-04-20
作者简介 About authors

陈果,中国科学院计算机网络信息中心,工程师,硕士,主要研究方向为软件测试与软件质量管理。
本文中负责测试发展现状调研、自动化测试的设计与实现。
CHEN Guo, master, is an engineer of Computer Network Information Center, Chinese Academy of Sciences. Her main research directions are software testing and software quality management.
In this paper, she is responsible for the research review of the current situation of testing tools, and design and implementation of automation testing.
E-mail: chenguo@cnic.cn


谢建军,中国科学院计算机网络信息中心,高级工程师,硕士,主要研究方向为大型信息系统关键技术和信息安全。
本文中负责ARP系统概述和应用效果分析。
XIE Jianjun, master, is a senior engineer of Computer Network Information Center, Chinese Academy of Sciences. His main research directions are key technology of large-scale information system and information security.
In this paper, he is responsible for the analysis of ARP system architecture and summarizing automatic testing achievement in ARP.
E-mail: xiejj@cnic.cn


周小军,中国科学院计算机网络信息中心,高级工程师,硕士,研究生导师,主要研究方向为大型信息系统关键技术和数据智能应用。
本文中负责测试计划和结论展望。
ZHOU Xiaojun, master, is a senior eng-ineer and the master tutor at Computer Network Information Center, Chinese Academy of Sciences. His main research directions are key technologies of large-scale information system and AI application of data.
In this paper, he is responsible for the testing plan and summ-arizing the conclusion.
E-mail: xjzhou@cnic.cn



摘要
【目的】如今自动化测试已成为软件开发过程中必不可少的一环,中国科学院大型管理信息系统ARP(Academia Resource Planning)采用敏捷开发模式,更是亟需自动化测试来保障软件质量。【方法】本文介绍了设计的自动化接口测试和自动化界面测试两种框架,并详细介绍了利用这两种框架生成的自动化测试在ARP系统中的应用情况。【结果】ARP系统的多次发版表明,自动化测试有效地提高了测试效率,高效地检测出了软件缺陷,保障了软件的质量。【结论】软件质量管理是一个系统工程,全面提升软件质量需要软件工程的各个环节进行保障。
关键词: 自动化测试;接口测试;界面测试;JMeter;Nightwatch

Abstract
[Objective] Automation testing has become a cornerstone in software development projects worldwide. Large-scale management information system ARP(Academia Resource Planning) takes agile software development cycle, which needs automation testing to ensure high quality of software. [Methods] This article introduces the design of the automatic API testing framework and the automatic UI testing framework. The details of how to apply them in ARP system are demonstrated. [Results] The releases of ARP show that automation testing can detect software defects efficiently and ensure software quality. [Conclusions] Software quality management is a comprehensive project, and all stages of the software development process should contribute to ensuring the improvement of software quality.
Keywords:automation testing;API testing;UI testing;JMeter;Nightwatch


PDF (5737KB)元数据多维度评价相关文章导出EndNote|Ris|Bibtex收藏本文
本文引用格式
陈果, 谢建军, 周小军. 面向大型管理信息系统的自动化测试设计与实现. 数据与计算发展前沿[J], 2021, 3(2): 77-85 doi:10.11871/jfdc.issn.2096-742X.2021.02.009
CHEN Guo, XIE Jianjun, ZHOU Xiaojun. Design and Implementation of Automation Testing in Large-Scale Management Information Systems. Frontiers of Data and Computing[J], 2021, 3(2): 77-85 doi:10.11871/jfdc.issn.2096-742X.2021.02.009


1 背景介绍

ARP(Academia Resource Planning)系统是依托中国科技云专用环境建设,面向中国科学院机关和院属单位提供科技管理和信息服务的大型管理信息系统。ARP系统以科研项目管理为核心,融合综合财务、人力资源、科研条件,国际合作和电子公文等多个智能应用模块以及线上业务处理,涵盖计划、执行、统计等主要流程。

像ARP这样的大型管理信息系统的特点是:(1)规模庞大;(2)各智能应用提供了种类繁多的业务,且每个业务都有自己独特的复杂逻辑;(3)业务处理时,信息量大,内容多且格式多样。

ARP目前代码总体量已经达到360万行,且还在以每3~4周发版一次的迭代开发模式继续更新。如此庞大复杂的系统,如果每次发版的时候,单单依靠手工测试去填写众多的表格,执行复杂的业务逻辑,效率很低,且工作量巨大,不可能实现全面的回归测试。如何执行每次发版前的庞大复杂的回归测试集,保障ARP的发版质量,是开发者必须要解决的难题。自动化测试势在必行。

而且这种大型管理信息系统的特点,决定了自动化测试会比一般信息系统遇到更多的困难,体现在:信息体大;系统配置复杂;业务复杂,完成每条业务流程测试需要流转工作流上的多个环节。这决定了在选取测试工具时要考虑到这些因素,而且开发测试脚本也会更为复杂,既要做到能与系统解耦,又要完成更多的逻辑控制。

自动化测试从开发阶段来划分,可以分为自动化单元测试和自动化功能测试。自动化单元测试是指在产品开发阶段,由开发者在撰写产品代码的同时,撰写单元测试脚本。自动化单元测试应该在自动化测试中占最大比重。但自动化单元测试前期投入的成本大,对开发者的技术要求也高。功能测试是指产品在完成单元测试后,对照前期的软件功能设计说明书对软件进行验证的阶段。一般分为API(Application Programming Interface)接口测试和UI(User Interface)界面测试。

本文专注讨论自动化功能测试。ARP系统采用前后端分离的构架模式,前端是ARP界面层,它支持PC浏览器和手机移动端APP两种用户交互模式,后端是Web服务器连接应用服务器和数据库服务器,并提供RESTful API 服务层,负责前后端的通信和数据交换。界面测试针对ARP前端测试,接口测试针对后端提供的服务层进行测试。这两种测试的结合,为全面测试ARP系统提供了保障。

图1

新窗口打开|下载原图ZIP|生成PPT
图1ARP系统构架与ARP测试框架

Fig.1Architecture of ARP system and testing architecture of ARP system



这两种测试,接口测试效率高,注重数据的验证,专注于软件架构的业务逻辑层;界面测试注重验证用户界面的交互,应用程序的外观和使用体验。两者缺一不可,相辅相成。因为自动化接口测试执行稳定,执行效率高,收益大,一般占的比重要比自动化界面测试要大。

软件质量管理应该是贯穿整个软件开发过程的,为了保证软件项目满足软件需求所实施的质量活动。自动化测试作为软件质量管理这个基础平台的质量活动之一,提升了测试效率,保证了回归测试的执行覆盖率,尽可能地在早期检出软件缺陷,为ARP的上层智能应用提供了质量保障。

2 自动化测试

2.1 测试的发展现状

2.1.1 接口测试现状

接口,是指服务端提供的交互通信部分,现在一般指,RESTful API(Representational State Transfer Application Protocol Interface)。它是HTTP协议的最佳实践,作为目前最广泛使用的API 设计风格,被大量使用在系统设计中。它是利用HTTP的GET/PUT/POST/PATCH/DELETE这5种方法,对URL代表的资源进行增删改查。接口测试目的是检查系统前后端之间、各模块之间接口的数据交换、通信是否及时响应,是否满足设计的功能性、可靠性和安全性。在接口测试中,不使用标准的用户输入(键盘、鼠标)和输出,而是使用软件向接口发送调用命令,获取返回信息,并记录系统的响应。

目前实现自动化接口测试的方法有很多。有用代码实现的:比如Java[1],加上HTTPClient; Python,加上unittest[2]。也有成熟的商业工具,比如LoadRunner[3],既可以用来做性能测试,做接口测试的功能也很强大。开源的工具也有很多选择,比如Postman,JMeter[4],Swagger,Soapui等等。

2.1.2 界面测试现状

ARP系统中面向终端用户的客户端有PC端的浏览器和移动端APP,目前业务还是以浏览器为主。本文所指的界面测试则是通过软件模拟PC端浏览器的Web页面上用户的输入,包括键盘操作和鼠标操作等,以用户的身份、视角实际运行软件,以检验软件有无完成预期的功能。

自动化界面测试发展到今天,已经有一些比较出名的测试工具。商业测试工具有早前HP的QTP(QuickTest Professional,后改名为UFT United Functional Testing),它支持的脚本语言是VBScript,具有录制和回放功能,是一款比较成熟的商业界面测试工具。

界面测试工具中,一般都是通过页面元素的CSS Selector、XPATH和ID等信息来定位元素。还有一种不是通过上述信息,而是识别图片来定位元素的UI测试工具,比如Sikuli,但是这类工具易受屏幕分辨率、浏览器缩放等影响,从而引起测试执行的失败。

开源界面测试工具使用最广泛的是Selenium,近年来有不少基于Selenium的Web自动化测试框架研究的报道[5,6,7,8]。Selenium是Thought Works公司开发的主要用于Web应用自动化测试的工具。它支持多种编程语言,比如C#,Python,Java,PHP,Python等。但不管采用哪种语言,对测试人员的编程技术都有较高要求,前期投入比较高。

Selenium为Web程序的UI测试工具引入了一种标准——WebDriver。WebDriver可以从底层操作浏览器,它负责建立一个安全的以浏览器为终点的链接,并提供一组API,允许发现网页中的页面元素并进行交互操作(如点击操作、键盘操作等)。早期的WebDriver是通过JSON通信协议(JSON Wire Protocol)与浏览器通信的,但浏览器遵循的却是W3C协议,造成了在通讯的时候需要编码和解码。2018年,由Selenium的WebDriver派生出了W3C(World Wide Web Consortium)标准的WebDriver[10]。由此,WebDriver与各浏览器(Chrome,Firefox,Safari, Internet Explorer等)之间都遵循相同的协议,浏览器与WebDriver之间的通讯不再需要编码和解码,通讯较之前有了很多改进,界面测试也更加稳定。而且有了W3C标准后,界面测试也不需要针对不同的浏览器编写不同的测试脚本,测试脚本的一致性也得到了保证。W3C WebDriver提供了更丰富的API,比如允许多点触控操作等。W3C标准化的促进也为兼容其他WebDriver API 提供了窗口。

2.2 自动化测试框架

本文设计了两套测试框架。一套是以Jmeter为主的接口测试框架,另一套是以Nightwatch为主的界面测试框架。两个测试框架,都可以很容易地集成在Jenkins持续集成工具里,配合GIT版本管理工具,形成一套按计划执行、自动提取测试脚本,自动生成最终测试报告的完整测试流程。

2.2.1 接口测试框架

JMeter是Apache软件基金会开发的基于Java的开源测试工具,它作为压力测试工具被大家所熟知。同时该工具也适用于Web应用测试[9]。JMeter无需开发过多的代码,操作者可通过其GUI界面进行方便友好的操作。它不仅具有多种配置元件、处理器和监听器,还提供了强大的调试和断言支持。

本文经过调研选择JMeter作为接口测试工具,还有一个重要原因,它有录制脚本功能,通过HTTP代理服务器,可以记录浏览器的行为。ARP系统的消息体虽然大,内容也很丰富,但HTTP的请求和返回的信息都被记录下来了,这为快速形成测试脚本提供了一定帮助。JMeter也提供了各种逻辑控制器,这为测试复杂业务逻辑提供了必要条件。在JMeter录制的测试脚本草稿基础上,通过删减复用、参数化等修改处理,配合逻辑控制器,再加上合理地断言,可以得到一个可重复执行的测试脚本。而且JMeter测试脚本,不但能做功能测试,同时经过优化完善,还可以对系统进行性能测试。

集成工具采用的是Apache的开源工具ANT。ANT是用Java编写的,拥有跨平台性和操作简单的特点。它在框架中负责管理各种测试任务,执行JMeter测试脚本,完成将JMeter的测试结果jtl文件,结合定制的ARP接口测试报告模板xsl文件,转换成方便阅读的HTML格式的测试报告等任务。

该自动化接口测试框架结构清晰,生成测试脚本成本低,且容易维护,有效提高了测试效率,降低了测试成本。

图2

新窗口打开|下载原图ZIP|生成PPT
图2ARP接口测试框架图

Fig.2Architecture of API testing framework for ARP



2.2.2 界面测试框架

自动化界面测试,相对于自动化接口测试,成本稍高,而且执行时间长。但是作为端到端测试,它能从界面上,发现一些接口测试不能发现的缺陷。而且对于ARP系统,业务复杂,流程较多,很多测试用例是光靠接口测试不能覆盖的,模拟用户操作场景的测试是必须的。

经过比较和调研,本文采用了一种新兴的自动化界面测试工具:Nightwatch[11],它是用Node.js编写的,遵循W3C标准的WebDriver,是一个端到端的测试工具。它比Selenium编写更容易,对编码的技术要求没有那么高,可以链式调用命令,语法也比较简单,依赖较少的配置和额外的库,能快速地写出测试脚本。

本文设计的界面测试框架还采用了基于原生ES6 Promise的HTTP库Axios,利用它发送RESTful API命令,来快速构建测试执行需要的条件,及完成恢复测试环境的初始状态等功能。

集成工具采用的仍然是ANT。生成测试报告的模块,也选择的是开源组件Nightwatch-html-reporter,并经过适当改造,可以生成ARP定制的UI测试报告。

图3

新窗口打开|下载原图ZIP|生成PPT
图3界面测试框架图

Fig.3Architecture of UI testing framework for ARP



2.3 自动化测试应用

2.3.1 应用效果

目前,通过本文的测试框架,已生成1 500个接口测试用例,714个界面测试用例,覆盖了ARP六个业务模块,121条业务工作流程。测试执行完成以后,通过ARP定制的测试模板可自动生成测试报告。报告会显示所有模块的测试概况及详细信息。有失败测试的模块会用红色字体显示,下方会列出失败测试的详情,包括名称、失败原因等。失败的界面测试用例还会显示执行失败时浏览器界面的截图,方便分析失败原因。

图4

新窗口打开|下载原图ZIP|生成PPT
图4ARP自动化接口测试报告截图

Fig.4Part of automatic API testing report for ARP



图5

新窗口打开|下载原图ZIP|生成PPT
图5ARP 自动化界面测试报告截图

Fig.5Part of automatic UI testing report for ARP



截止目前,14次ARP发版使用自动化测试工具,总共检出了缺陷51个。其中,综合财务模块检出缺陷数最多,占75%,因为财务模块测试开发最早,用例最丰富复杂,每次发版更新的内容也较多。检出的阻塞性缺陷数超过缺陷总数的一半以上,达到61%。

图6

新窗口打开|下载原图ZIP|生成PPT
图6ARP历次发版检出缺陷一览表

Fig.6Bug lists of ARP releases



2.3.2 经验总结

通过这一年左右时间对自动化测试的建设,本文积累了大量测试资产,包括:两套测试框架,可复用的测试共同组件,大量回归测试用例,也积累了开发大型管理信息化系统自动化测试的丰富经验和最佳实践。

接口测试执行效率高,执行时间短,既可以用于全面的回归测试,又可以用于快速验证,比如冒烟测试。是自动化功能测试的优先考虑类型。ARP的接口测试主要应用在以下几个测试场景:(1)信息一览;(2)简单增删改业务;(3)重要模块的基本业务流程。

前两个场景非常适用于接口测试,脚本开发快捷、效果好。测试信息一览主要是发送HTTP的GET请求,通过HTTP返回状态、返回的JSON消息体中的关键字和对象数量等信息判断测试效果。对于简单业务的增删改测试,主要是发送HTTP的PUT/POST/DELETE请求,通过返回的HTTP状态、返回JSON消息体中的信息,判断事务是否发生了预期的变化。

第三种测试场景,是将JMeter适应于大型管理信息系统接口测试的一次尝试和创新。

这种系统的一个特征就是业务逻辑复杂,且依附于工作流来完成一个完整的业务流程。测试完整的业务流程,需要JMeter处理大量的复杂业务逻辑和进行良好地测试步骤控制,使其完成在工作流的多个环节的业务操作。困难在于,首先,处理业务的JSON消息体都比较长,在ARP中有些JSON消息体经常长达上千行,这对测试脚本的开发和维护都带来一定难度。其次还需要发送多次HTTP请求得到其返回的信息来拼接JSON消息体。同时由于业务上的设计,还需要流转工作流上的多个环节,才能完成一个完整的业务流程测试。本文利用了JMeter的逻辑控制器、JSON提取器、参数化和函数等各种手段,实现了包括财务报销、费用分摊、采购申请等多个业务流程的完整接口测试,保障了在有需要的时候,能用接口测试来快速确认模块主要功能工作正常。

本文采用的Nightwatch这种界面测试工具,实践证明,效果比较理想。笔者目前没有发现其它在国内使用Nightwatch测试大型管理信息系统的先例。

本文积累了大量实践经验,形成了用Nightwatch测试管理系统的最佳实践,包括封装常用的用户操作,如鼠标操作和键盘操作等,以确保测试中达到稳定的界面输入;确定最适合ARP系统的页面元素定位方式,以保持在产品迭代过程中测试执行的稳定性;封装各业务模块的基本业务单元,减少冗余测试代码,提高测试脚本的可维护性;减少测试脚本对测试环境的依赖,提高其鲁棒性等工作。

目前自动化界面测试主要面临的问题是:(1)产品开发时,对自动化测试的呼应考虑不足。主要是体现在对于页面元素,不能用唯一标识定位。这就造成了界面测试脚本里定位元素,使用相对位置,一旦页面有所变更,可能造成测试执行失败,增加了测试脚本的维护成本。(2)如何更好地与测试环境解耦,也是界面测试向纵深发展需要考虑的问题。大型信息系统,系统配置繁多。如何应对当测试系统配置有所变化的时候,测试脚本能维持一定的自适应能力;或者如何将一套测试脚本能面向不同的测试环境进行测试,这些都需要测试脚本能较好地做到与测试环境解耦。本文已经积累了一些经验,测试系统能通过读取当前环境的配置和对环境进行设置等手段,动态调整执行脚本,保证测试目标得到验证,维护测试执行的稳定性。

2.3.3 Devops实践

同时,通过这次自动化测试的建设,也很好地实践了敏捷开发中Devops(Development和Operations的组合词)模式的一部分。自动化测试是Devops流程中持续集成/持续部署中重要的一部分。限于篇幅,本文只涉及到Devops双环模型中的一环,从软件开发、集成、部署到测试执行,再反馈到开发,这个闭环。有了自动化测试后,已经实践了用GIT对各业务的代码进行版本管理,用Jenkins持续集成发版物件,用脚本自动部署测试环境,再对测试环境执行自动化回归测试,检出的缺陷进入缺陷管理系统,反馈给软件开发。在每次软件发版前,通过该闭环,多次迭代更新产品,保障了软件的发版质量。

图7

新窗口打开|下载原图ZIP|生成PPT
图7ARP开发测试闭环

Fig.7Closed cycle of development testing for ARP



3 未来计划

关于自动化测试,还有很多工作需要做,包括: (1)要从广度和深度上深挖各业务模块功能点,提高验证功能点的精细度,制定并达到一定自动化测试覆盖率。为每个模块建立适合自身的回归测试等级,包括最小回归测试级,用于冒烟测试,快速验证基本功能等场景;最大回归测试级,用于全面验证业务模块功能。(2)增加测试脚本稳定性,减少后期维护成本。ARP是一个高复杂性的系统,影响测试稳定性的因素有很多,除了脚本自身的因素外,各种业务参数或者数据的改变都可能影响测试的执行。为了解决这些问题,需要一是提高测试脚本自身的健壮性,二是增强测试脚本的容错性,使其能一定程度适应测试环境或者测试数据的改变。(3)增加ARP移动端的自动化界面测试。虽然目前的界面测试工具也可以模拟移动端的测试,但是专门的移动端界面测试工具,可以更好地区分安卓和苹果操作系统,更好地支持不同机型的测试。(4)继续打通敏捷开发的各个环节。目前距离“一键发版”还有许多工作要做。有些是受制于环境或者软件的限制。力争根据实际情况,逐个解决问题,进一步规范工作流程,降低各环节的沟通成本,更大地发挥自动化测试的作用。

4 结语

随着用户对软件质量要求的不断提高,如何快速满足客户多变的需求,既要缩短软件开发周期,加快软件的迭代开发,又要保障软件质量,尽早纠错,减少开发成本,这是一个很大的课题,需要从软件工程的各个环节入手。从软件的需求分析到架构设计,从软件实现到运维维护,从版本管理到代码审查,无一不是影响软件质量的重要环节。测试只是其中一环,力争做到在有限的时间、人力、物力条件下尽早地高效率地检出缺陷。但想要保障软件质量,单靠测试是不够的,还需要根据自身的特点和条件,实践出更多的敏捷开发过程,建立一套完善的软件质量管理系统,以应对将来面临的竞争。

利益冲突说明

所有作者声明不存在利益冲突关系。

参考文献 原文顺序
文献年度倒序
文中引用次数倒序
被引期刊影响因子

孙立哲. 轻量级接口自动化测试框架设计与实践
[J]. 计算机应用与软件, 2020,37(01):27-30+36.

[本文引用: 1]

王娜. 基于python的接口自动化测试框架设计
[J]. 电脑知识与技术, 2020,16(12):246-248.

[本文引用: 1]

何舒. API接口自动化测试系统设计及实现
[D]. 电子科技大学, 2018

[本文引用: 1]

冯瑶, 秦洪岩, 刘跃光. 基于Jmeter开展接口自动化测试方法探索与实践
[J]. 中国金融电脑, 2020(02):48-50.

[本文引用: 1]

夏克付, 章晓勤. 基于Selenium自动化测试框架的数据驱动技术研究及应用
[J]. 齐齐哈尔大学学报(自然科学版), 2019,35(06):18-22.

[本文引用: 1]

刘伟, 郭秋月, 胡志刚. 基于Selenium的Web自动化测试框架优化及应用研究
[J]. 电子测试, 2018(20):51-53.

[本文引用: 1]

吴毅良, 罗序良, 陆庭辉, 郭凤婵. 基于Java和Selenium的自动化操作工具的设计与实现
[J]. 机电信息, 2019 (06):56-57.

[本文引用: 1]

曹磊, 董科军, 袁博文. 一种基于Selenium的Web应用软件自动化测试平台设计与实现
[J]. 科研信息化技术与应用, 2014,5(06):44-52.

[本文引用: 1]

Building a Web Test Plan
[EB/OL]. https://jmeter.apache.org/usermanual/build-web-test-plan.html.

URL [本文引用: 1]

WebDriver Level 2
[EB/OL]. [2020-08] https://www.w3.org/TR/webdriver/.

URL [本文引用: 1]

Nightwatch.js
[EB/OL]. https://nightwatchjs.org/.

URL [本文引用: 1]

相关话题/测试 自动化 软件 系统 设计