基于线上流量diff的快速接口自动化
2021-09-14闫耀珍
闫耀珍
摘要:接口测试是软件系统测试非常重要的一个方面。某广告接口入参及出参众多,针对该接口进行日常测试时,需要执行的测试用例数量达到指数膨胀状态,且测试用例无法全面覆盖线上流量场景。在软件研发日益敏捷的时代,为了达到快速测试、场景覆盖度高这两大要求,基于unittest、DDT数据驱动测试框架等自动化测试用例组织技术,设计并实现了一套非常实用的接口Diff自动化测试框架。框架支持自动从线上服务器拉取所需的测试请求日志数据,通过在测试、线上两套环境中同时回放请求并收集返回结果,并以优美的Web页面展示测试结果报告。基于该框架的接口Diff自动化测试,能够在非常短的时间内高效完成日常测试,有效缓解了该广告产品因迭代频繁带来的巨大测试压力。
关键词:接口测试;unittest;数据驱动测试;Diff;请求日志
Abstract: Interface testing is a very important aspect of software system testing. Take an advertising interface as an example, there are many input params and output data, when test the interface daily, the number of test cases to be executed reaches an exponential expansion state, and the test cases can not fully cover the online traffic scenarios. In the era of increasingly agile software development, in order to meet the two requirements of rapid testing and high scene coverage, a very practical interface Diff automatic testing framework is designed and implemented based on the automation test case organizing technologies such as unittest and DDT data-driven testing framework. The framework supports automatically pulling the required test request log data from the online server, playing back the request and collecting the returned results in the test and online environments at the same time, and displaying the test result report in a beautiful web page. The interface Diff automatic test based on this framework can efficiently complete the daily test in a short time, and effectively solve the test pressure caused by frequent iterations of the advertising product.
Key words: interface test; unittest; data driven test; Diff; request log
1 背景
隨着现代互联网公司之间的竞争越来越激烈,用户需求也越来越多样化,对软件及服务更新速度和质量的要求也越来越高,如何通过加速产品研发流程,快速满足用户需求,使得在竞争加剧的时代赢得用户的青睐,成为企业关心的重要问题之一。举例来说,某广告业务为提升用户体验,间接提升收入,某后台服务已经达到了一天上线数次的频率,而在这种情况下,测试周期被不断压缩,于是对质量保障的速度以及质量提出了更高的要求。原有的手工回归测试至少也需要半天甚至更多的时间,并且回归测试能够覆盖的线上场景也非常有限,经常发生由于某个场景没有测试覆盖,导致出现线上问题,影响用户体验甚至收入。手工测试已不能满足业务迭代需求,测试同学面临两个问题:一是如何使得接口测试变得更快,二是如何使得测试场景覆盖度变得更高。在这种情况下,自动化测试[1]作为提升测试效率的一种手段,就变得迫在眉睫。在这个后端服务中,接口比较多,为了提升不同接口自动化测试的复用性,方便扩展,以及未来迁移到其他业务服务,如何设计一个好的测试框架就成为关键。为此,本文基于Shell技术、Python技术、unittest[2]单元测试技术、DDT数据驱动测试[3]技术、HTML超文本传输协议与CSS、JS编程语言,设计了一套方便、实用的基于请求日志的接口自动化Diff测试框架。该框架具有结构清晰、易扩展[4]、易维护等特点,能够将线上请求流量经过处理后保存到文件,作为测试数据输入,并通过数据驱动的测试方式,分别在测试、线上两套环境中执行测试并对比测试结果,并且将所有测试数据的测试结果通过Web页面形式的测试报告供开发人员浏览。通过在实际项目中使用该自动化测试工具,可以在五分钟内完成2000条请求日志的快速执行和对比,极大提升了测试的效率和覆盖度,有效解决了版本频繁迭代带来的测试人员压力过大问题,并且对于出现异常结果的测试数据,提供了详尽的错误原因,方便研发人员快速定位问题并修改bug。
2 整体设计
本文设计的接口自动化测试框架主要分为三部分,采用分层设计思想,且测试数据与测试脚本分离[5]。第一部分是测试数据获取模块,主要是通过Shell等技术,实现线上请求日志的抓取、处理,并将数据文件放入指定路径。第二部分是自动化测试执行模块,通过Python等技术,主要实现测试参数的输入及接收解析、Diff任务的执行及结果获取等内容。第三部分是测试结果展示模块,通过HTML、CSS及JS技术,主要实现对以上测试数据执行后的Diff结果报告的生成。