26
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
张杰看月亮爬上来mv1 背景介绍
佣金管理系统是一款保险类办公系统,具有佣金申请、提取、结算、计税等功能,采用微服务结构设计,前后端分离,具体业务逻辑在后端中台实现,共有数百个微服务接口。如果所有接口均由人工测试,将是十分大的工作量。为提高测试效率,减少人工测试工作量,实现快速迭代及回归测试,非常有必要使用自动化方法对这些接口进行测试。2 技术手段介绍
Apache Ant 是由Apache 软件基金会提供的一个将软件编译、测试、部署等步骤联系在一起的自动化工具,Ant 由Java 语言开发,所以可以跨平台。Ant 由一个内置任务和可选任务组成,通过XML 文件来定义构建,通过分析XML 文件,调用target 树来执行测试脚本、监控测试指标及生成测试报告等任务。[1]
Apache JMeter 是Java 桌面应用程序,可用于应用程序的压力测试、功能测试、回归测试等,通过创建带有断言的脚本来验证被测程序返回了期望的结果。JMeter 支持HTTP 、SOAP 等多种服务器/协议类型,支持通过录制/回放方式获取测试脚本,高可移植,采用多线程框架,允许通过多个线程并发取样以及通过独立的线程组对不同的功能同时取样,支持以缓存和离线的方式分析和回放测试结果。JMeter 可以作为Web 服务器与浏览器之间的代理网关,以便捕获浏览器的请求和Web 服务器的响应,如此就可以很容易地生成测试脚本,通过线程组来模拟真实用户对Web 服务器的访问。[2]
WeTest 是腾讯出品的一款测试平台,具有创建用例、用例管理、自动生成测试任务和测试报告等功能。WeTest 可以和TFS 、DevOps 等平台深度整合,实现接口测试的自动化运行及管理。
DevOps 是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障之间的沟通、协作与整合。DevOps 流水线可实现代码变成程序包的自动化持续集成、程序包测试并发布到生产环境的自动化持续部署、程序包线上自动化持续运维,具有无缝对接、灵活配置、高度自动、质量内建、灰度发布等特点。在代码库通过拉取请求将代码从个人分支合并到开发分支并自动触发合入流水线,能够完成代码扫描、安全扫描、单元测试等。可以每日定时或手动触发流水线,完成测试环境部署、自动化接口测试、自动化端到端测试等。本程序正是利用DevOps 流水线的定时触发自动化测试功能,实现数百个接口测试脚本的每天运行。3 整体流程介绍
笔者整合Ant 自动化构建工具、JMeter 测试脚本编写工具、WeTest 测试平台、DevOps 流水线等技术手段,开发出接口自动化测试程序。整体流程如图1所示。
笔者根据系统数百个接口功能,使用JMeter 分别开发出相应的接口测试脚本,这些接口测试脚本是整个接口自动化测试程序的基础。接着将编写好的接口测试脚本部署到WeTest 测试平台上,供该平台批量调用。由于WeTest 平台部署在服务器上,执行速度
基于JMeter、Ant 和WeTest 的佣金管理系统接口自动化测试程序开发
张嘉杰
(中国人民财产保险股份有限公司软件开发中心广州分中心  广东省佛山市  528200)
远比把脚本部署在单机电脑上执行快。根据笔者的经验,数百个脚本在WeTest 上执行只需要十分钟左右,而在单机电脑上执行则需要多于一小时。WeTest 任务创建成功后,将任务挂载到DevOps 流水线,设置流水线每天将开发代码、测试代码重构,并且运行WeTest 任务,即可实现每天批量运行接口测试脚本。但目前版本的WeTest 测试结果可读性较差,只能逐个接口点击,不便于直观地查看测试结果。为此,笔者编写报告生成脚本,根据WeTest 的若干个查询接口获取测试结果,并将其整合成测试报告和结果详情文件。最后部署Ant 定时调用报告生成脚本,实现定时批量测试、自动生成测试报告。4 Ant流程介绍
Ant 构建工具负责调用JMeter 报告生成脚本,主要涉及文件
摘 要:本文为了提高对佣金管理系统的测试效率,笔者使用JMeter 自动化测试软件、Ant
构建工具、WeTtest 接口测试工具等技术
手段,开发自动化测试程序。程序采用模块化设计,针对佣金管理系统的微服务接口进行测试并生成测试报告。
关键词:微服务;JMeter;Ant;WeTest;DevOps 图3:报告生成脚本流程图
图1:整体流程图
图2:Ant 路程图
27
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
Ant 执行的操作主要由run 中的test 和report 组成,具体配置如下:
<target name="run">        <antcall target="test" />        <antcall target="report" />    </target>
其中,test 负责执行报告生成脚本weTestReport.jmx ,该脚本负责收集WeTest 测试结果,并将其整理生成jtl 文件,具体配置如下:
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${sult.jtlName}">
<testplans dir="${report.home}" includes="weTestReport.jmx"/>
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter></target>
report 负责将脚本生成的jtl 文件转换成可读性更好的html 文件。这里需要注意的是,转换的jtl 文件是脚本根据WeTest 结果汇总的jtl 文件,而不是脚本自身运行的jtl 状态文件,具体配置如下:
<target name="report">
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<replace file ="${sult.weTestJtl}" encoding="UTF-8" token="&#" value="&amp;#"/>
<xslt
classpathref="xslt.classpath"            force="true"
in="${sult.weTestJtl}"    out="${sult.weTestHtml}"      >
赵奕欢 魏晨<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<copy todir="${sult.html.dir}">      <fileset dir="${jmeter.home}/extras">      <include name="collapse.png" />              <include name="expand.png" />          </fileset>        </copy>    </target>5 报告生成脚本介绍
报告生成脚本主要负责获取WeTest 测试结果,并将结果整理汇总成定制格式的测试报告。脚本读取
配置文件获取环境信息,调用WeTest 接口获取指定报告编号,根据报告编号获取报告汇总信息,其中包括任务名称、用例总数、执行成功用例数、执行失败用例数等,筛选出执行失败用例名称,逐次调用接口获取各个用例的执行详情,汇总成初步的测试结果,同时根据用例执行结果生成定制格式的测试报告。流程如图3所示。
WeTest 接口返回报告信息以JSON 格式程序,使用主流的
JSON 包解释方法可以方便地提取出状态信息,数据结果如下所示。
"data": {
"Report_Id": 3795,
"Task_id": 1005,
"Remark": "",    "Deleted": 0,
"Start_time": "2020-03-30 08:08:50",
图4:JMeter 接口测试脚本流程图
图5:查询随机数据步骤实现
图6:设置入参步骤实现
28
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
"Stop_time": "2020-03-30 08:15:52",    "Total_case": 300,    "Succ_case": 181,    "Fail_case": 119,
"Task_name": "00002004_V1.0.2.0_D01",
"Task_type": 0,    "Task_remark": "",    "Result": 0,
"Controlcenter": 0,    "Coverrate": 100,    "Caseinfo": [      {
"Fk_report_id": 3795,        "Fk_casesets_id": 997,        "Fk_case_id": 45215,        "Deleted": "0",
"Start_time": "2020-03-30 08:13:52",        "Stop_time": "2020-03-30 08:14:12",
"Snap_case_name": "00002004-133_ProductOut_translateCode_V1.0.2.0_D01.jmx",
"Snap_casesets_name": "00002004_V1.0.2.0_D01",        "Result": 0,
"Err_reason": "",        "Auto_flag": 0      }]}6 接口测试脚本介绍
程序实现自动化测试的基础是测试脚本,笔者编写的接口测试脚本使用数据程序分离模式,将接口地址配置信息、数据库配置信息独立于脚本存放,脚本负责具体测试流程的执行。下面以查询类接口测试脚本为例,说明脚本编写思路及具体代码实现。6.1 整体流程
笔者根据需求文档、接口文档、数据库文档等信息,设计测试用例和测试数据,编写的脚本先根据接
口地址配置信息、数据库配置信息初始化执行环境,查询随机测试数据,设置接口传入参数,编写预期测试结果,调用接口,设置响应断言,校验实际结果和预期结果是否一致。测试脚本流程如图4所示。
6.2 查询随机数据
在查询随机数据步骤中,笔者根据接口的具体业务逻辑功能,从目标数据表中查出已有数据作为后续设置入参步骤的基础。查询随机数据步骤实现如图5所示。6.3 设置入参
downtoearth
查询随机数据后,根据查询结果获取随机行数,并将目标字段值存放在JMeter 自带变量vars 中。设置入参步骤实现如图6所示。6.4 查询预期数据
接口自动化测试的关键之一是获取正确的预期数据,以此才能将接口返回的数据作比对校验,同时获取预期数据又是一个难点,因为根据接口业务逻辑的复杂程序,查询逻辑可能涉及众多外部系统、数据权限、数据转换等操作,因此要写好查询预期数据逻辑,要充分分析需求文档、接口说明文档、数据库说明文档、业务逻辑代码等。查询预期数据步骤实现如图7所示。6.5 调用接口
设置好入参后,即可用保存的数据调用接口,调用接口步骤实
现如图
8
所示。
6.6 校验数据
完成测试用例的三大要素设计,即预期结果、执行操作、实际
图7:查询预期数据步骤实现
图8:调用接口步骤实现
图9:校验数据步骤实现
图10:异常场景步骤实现
29
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
1 开放式实验室现场管理系统的建设背景及功能需求分析1.1 开放式实验室现场管理系统的建设背景
开放实验室的建立,是为了学生能够方便、自主的学习,进行一系列的实践创新[1]。国内本科院校在
实验室开发及管理上做了很多尝试,例如:天津理工大学提出了基于学科竞赛驱动的实验室开放模式。不但有效地提高了实验室开放质量,而且在学生的实践能力和创新精神培养与发展上发挥了重要作用[2];东北农业大学提出了教学与科研实验室协同开放的管理和运行机制[3];西安电子科技大学提出了借助校企联合培养基地加大实验室开放举措,构建学生自主管理新模式[4]。但目前大多数高职院校的实验室开放程度都很低[5],面向创新实践已经不能满足师生的进一步需求,要提高实验质量、提升实验室建设水平,实现资源的合理配置、高效共享, 则必须实行实验室的有效开放。[6]
1.2 开放式实验室现场管理系统的功能需求
在实验室开放的过程中,除了要考虑实验室安全因素之外,还
结果后,需要将预期结果和实际结果作充分比对校验,以此判断接口是否按照预定设计正确地完成功能实现。对于查询接口,关键是比对预期结果和实际结果是否一致,而如何高效地完成比对校验工作,又是脚本设计的关键。笔者根据系统的实际情况,结合脚本测试经验,编写了众多公共方法,并将其保存为独立的程序包。脚本分别获取接口返回数据、查询预期数据,设置目标校验字段,调用适配系统业务功能代码的公共校验方法,代码整洁的同时实现了校验工作的高效执行。
校验数据步骤如图9所示。6.7 异常场景
接口测试不但要包含覆盖业务逻辑的正例测试,还要有各种异常场景测试,如输入数据边界值、非法数据、无效数据等场景。笔者根据接口业务逻辑代码,出所有可以显式、隐式触发接口功能错误的场景,并以此涉及异常场景测试用例。异常场景测试步骤实现如图10所示。
玄彬照片6.8 其它操作类型脚本设计思路
除了上述的查询类脚本,接口测试脚本还涵盖增加类、修改类、删除类脚本,限于篇幅所限,罗列设计思路如下,不展开阐述。李娜南阿弥陀佛歌曲
增加类脚本:
(1)设置接口输入参数;(2)调用接口;
(3)查询预期插入数据;
(4)校验预期数据是否与接口输入参数一致。修改类脚本:
(1)查询数据库已有数据;(2)设置接口输入参数;
特殊音效智能开放式实验室现场管理系统的设计和实践
吴琦  肖李文  苟燕  何裕琨
(四川工商职业技术学院  四川省都江堰市  611830)
有多种因素直接影响了实验室开放的程度,例如:实验室同一时间段为多少学生开放,学生怎么才能获得进入实验室的资格,实验室现场是否要人值守,如果实验室现场无人值守又怎样对学生资格进行审核和判定,学生进入实验室后又能有多少时间进行实践,如果学生超时实验室现场又怎么处理,怎么保障实验过程中学生的人身安全和实验室的设备仪器安全等等。
以我校智能开放式实验室管理系统为例,针对以上因素,将开放式实验室管理分为了实验室管理平台和现场管理系统两大部分,其中实验室管理平台主要实现学生用户的在线人脸注册,对实验室区域预约状态的在线查询,预约实验项目的在线填写等功能。
开放式实验室现场管理系统则主要需要实现四大功能:(1)学生在线预约的信息对接,包括:学生人脸信息、预约时间、预约实验区域等;
(2)预约时间段内,学生现场的人脸识别;(3)预约实验区域的信息化管理,包括:电源管理、设备管理等;(4)实验室各区域运行状态的实时监控,包括:实验区域、
(3)调用接口;
(4)查询预期修改数据;
(5)校验预期修改数据是否与接口输入参数一致。删除类脚本:
(1)查询数据库已有数据;(2)设置接口输入参数;(3)调用接口;
(4)查询预期删除数据;
(5)校验预期删除数据是否存在。7 总结
根据实际工作需要,笔者使用Ant 、JMeter 、WeTest 等技术手段,开发了佣金管理系统接口自动化测试程序。程序全量覆盖系统的中台服务接口,全程自动运行,实现了接口的快速迭代及快速回归测试,大大提高了测试效率。经过一段时间的实际运行,程序运行情况良好,发现了多个被测接口的设计缺陷,为系统质量的提升作出了重要的贡献。限于笔者经验所限,本文所述内容难免有错漏之处,恳请同行批评指正。
参考文献
[1]陈志勇,马利伟,万龙.图书目录[M].北京:人民邮电出版
社,2016:365-371.
[2]温素剑.图书目录[M].北京:电子工业出版社,2016:10-13.作者简介
张嘉杰(1985-),男,广东省佛山市人。硕士学位,工程师。研究方向为自动化测试。
摘 要:本文简要分析了开放式实验室现场管理系统的功能需求,设计了系统的整体架构,分析了系统主要元器件的选型,给出了系统人脸识别、网络通信的开发技术和设计思路,介绍了系统在实际教学中的应用效果。
关键词:开放式实验室;现场管理系统;人脸识别