冶金自动化

软件测试工程师必备如何做好接口测试Yapi自动化

 

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

一、背景介绍

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

图1:手工测试

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

图2:自动化测试

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

图3:自动化测试

(一)Unit单元测试

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

(二)UI界面测试

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

(三)Service测试

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

二、技术预研目标

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

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

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

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

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