随着科技的发展,互联网技术手段正在对传统劳动密集型行业进行全面赋能,而一个科技产品从生产到应用,除产品设计、技术架构、软件编码、项目管控等核心环节外,质量管控作为满足产品交付标准的最后一环,保证生产出稳定可靠、满足需求的产品是它最核心的目标。而这其中,自动化测试作为软件质量管控的一个新兴且重要手段的之一,在替代大量重复性工作和提高回归测试的效率方面上有着极大优势,对我们敏捷开发出优秀的科技产品有重要意义。

打开网易新闻 查看精彩图片

一、背景介绍

软件测试最基本的形式是手工测试,指软件测试的整个活动过程都由软件测试工程师通过鼠标、键盘、麦克风、手机屏幕触控等手工执行完成。

打开网易新闻 查看精彩图片

图1:手工测试

软件的自动化测试是,把人对软件的测试行为转化为由机器执行测试行为的一种实践。对于服务端接口的API测试来说,就是由自动化测试工具模拟需要人工在软件界面上的各种操作后发起的一连串接口请求,并且自动验证其结果是否符合预期。

打开网易新闻 查看精彩图片

图2:自动化测试

事实上,自动化测试覆盖了从 UI (界面测试)到契约(接口测试)以及底层代码方法(单元测试)的整个过程。

打开网易新闻 查看精彩图片

图3:自动化测试

(一)Unit 单元测试

金字塔最低端也是占比最大的单元测试通常是由开发人员编写,质量控制基本成为开发的本职工作,所以这个层级的测试对整个研发&测试团队的技术和人员都有很高的要求,过于理想化,较难推广。

(二)UI 界面测试

最上层的UI测试占比少,是因为UI界面的不稳定性以及UI定位脚本的识别难度较高,且本身对于前端的代码规范性也会有一定的要求,所以一定程度会导致脚本维护成本也非常高。UI自动化测试更适用于测试需要大量重复的、测试功能稳定性和兼容性的单个场景。

(三)Service 测试

模型的中间是Service测试,也就是接口API测试,API接口测试介于单元测试和界面测试之间,是一种灰盒测试方法,在前端界面未完成时,测试人员就可以单独验证内部接口功能的完成性。相较于UI自动化测试,它具有自动化成本低和测试效率高的特点,也将是我们研究测试自动化并应用落地的重要内容。

二、技术预研目标

基于上述背景,我们知道本次技术预研的方向是开发出一套满足公司现有产品以及未来规划(微服务等)的接口自动化测试工具、代码框架或者平台。

(一)纯脚本语言自动化框架

1.调研框架:基于python语言的pytest、unittest、Robot Framewor等

2.优点:使用python语法的框架代码优美、功能强大;使用IDE编写调试方便,unittest、pytest分别为python的标准测试库和第三方开源库,可编写出流程复杂的测试场景和更强大的断言;而RF框架则功能更全面且可提供更多可用关键字,增强了代码阅读性。这些开源框架都有非常丰富的插件体系、社区繁荣

3.缺点:对于测试人员的脚本编写能力要求较高;多人同时编写一个项目的脚本,需要掌握代码维护和解决冲突的能力;管理者较难掌控成员的接口编写过程和进度。

打开网易新闻 查看精彩图片

图4:纯语言脚本框架

(二)工具类

4.调研工具:Postman、ApiFox等

5.优点:门槛低,上手快,界面操作简洁方便,自带各种代码模块,按需使用即可,复杂处理也可使用js语言编写脚本。配合第三方库newman,方便直接在服务器运行,做持续集成。支持抓包、多数据源读取、配合插件实现数据库操作等。ApiFox还自带 Mock 服务,非常适合枚举测试场景。

6.缺点:工具自动化功能简单,适用流程较为简单的系统,接口定义与测试集合模块耦合

打开网易新闻 查看精彩图片

图5:postman工具

(三)平台类

7.调研类:Nei、Rap、Yapi、FasterRunner等

8.优点:保证大型企业级项目的管理、扁平化的权限设计、嵌入Mock服务、提供接口文档管理,且大部分为开源产品,可二次定制开发。

9.缺点:基于浏览器的操作可能存在漏洞,相对没有桌面软件便捷稳定,抓包困难,暂时不适合做枚举测试。

无论选择框架还是平台,归根到底只是帮助我们更好完成自动化工具,自动化测试体系的核心资产是测试用例,是测试覆盖率,而不是无用的炫技的代码堆砌出来的东西。个人认为结合公司规模、系统级别、测试人员的素质模型,以及综合三类测试手段的优缺点等,开源的平台类产品,并在之上进行二次定制化开发,更满足现在大部分以业务为导向的企业技术的预研目标方向,使其成为完成接口自动化的利器。

三、相关产品调研

我们调研了市面上开源的接口自动化测试产品,其中具有代表性的分别是网易Nei、阿里Rap、去哪儿Yapi、大疆HttpRunner。

(一)网易Nei(Github start:109)

Nei 是网易前端事业部的产品,在平台类的自动化产品中功能做得较完善,但是 Nei 的主要定位是做 saas 服务,基础模块是跟网易通行证有关,所以它只开源了部分代码,有些基础模块需要自己重新开发。而对于企业来说,购买sass服务,公司机密的接口数据放到第三方平台是个危险的操作。

打开网易新闻 查看精彩图片

图7:网易Nei平台

(二)阿里Rap(Github start:6k)

Rap 是阿里妈妈 MUX 团队2013年出的一款产品,从时间上看是同类产品中最早的,现在已新出Rap2版本,但是界面操作不友好,缺少接口测试功能,而后端使用其他工具(postman)测试接口,将导致不能及时更新接口文档。

打开网易新闻 查看精彩图片

图6:阿里Rap平台

(三)大疆HttpRunner(Github start:2.1k)

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本, 即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求,但是它只提供了底层能力,没有平台界面,需要配合工具和编写脚本。而基于大疆开源HttpRunner测试做的FasterRunner的前端界面功能不完善,不能满足需求。

(四)去哪儿Yapi平台(Github start:16.3k)

Yapi是去哪儿公司开源的接口自动化测试平台,基本包含了前面几款产品的全部功能,优秀特性如下:

1.接口文档管理,将测试集合与接口定义解耦;

2.整合postman接口调试功能;

3.整合mock.js,内置mock server服务,且提供高级mock期望功能;

4.强大的 pre-script 和可视化表达式功能,处理复杂脚本逻辑;

5.插件机制、非常便于功能扩展,且开源社区有众多优秀插件;

6.基于MongoDB高性能数据库,满足企业级测试用例量级;

7.支持浏览器端和服务端自动化测试,测试报告美观;

8.官网文档齐全,开源易部署,方便二次开发扩展功能;

9.扁平化权限设计,保证大型企业级项目的管理,界面美观易用

10.代码可维护性高,最后一次更新时间13天前,社区活跃;

打开网易新闻 查看精彩图片

图8:去哪儿Yapi平台

四、Yapi平台预研成果

Yapi平台相较于其他同类型平台优势较高,且二次开发起来非常方便,适用于大多数的企业做定制化的接口管理和自动化测试平台。具体关于Yapi如何使用以及如何在内网部署&二次开发,我将在下一篇文章详细介绍。

1.Yapi官方文档:https://hellosean1025.github.io/yapi/

2.码云镜像地址:https://gitee.com/mirrors/YApi

打开网易新闻 查看精彩图片

图9:私有化Yapi平台

3.接口管理

打开网易新闻 查看精彩图片

4.测试集合

打开网易新闻 查看精彩图片

5.测试报告

打开网易新闻 查看精彩图片

6.脚本应用:

打开网易新闻 查看精彩图片

7.Yapi支持二次开发,目前我们内部部署的Yapi平台已扩展文件上传功能,优化测试集用例排序方式,解决部分报错bug等,并已使用Git代码管理。

8.Yapi支持与Jenkins集成,目前已可与Jenkins配合使用。

打开网易新闻 查看精彩图片