微信号:mogu_ttech

介绍:蘑菇街测试技术基础

全平台自动化测试框架

2016-06-17 20:09 灵雪

背景

蘑菇街测试团队成立到现在时间还不足一年,大部分的测试还是依赖于手工测试,但是随着业务的迅速扩张以及对质量越来越高的要求和挑战,提高测试的效率已成为刚需,基于此,我们搭建了通用的自动化测试框架。

需求

1、支持各种协议的接口测试,包括常见restful接口,soap接口,以及公司内部的tesla、mwp等接口的测试。

2、支持功能集成测试,包括pc端,app端等

3、可以方便地进行case的集中化管理

4、自动化case开发学习成本低,可以快速开发

设计

一个自动化测试框架基本的思路是从配置解析开始,到测试执行,最后是报告产生。我们的测试框架基本流程也是这样,具体的架构图如下:


1、框架底层

考虑到公司整体的方向在由php切向java,且大部分的业务方也都完成了这个改造,我们框架的底层也使用java,很多库都可以直接使用已经封装好的,然后也能很方便地支持公司内部一些接口协议。现在一些主流的开源测试工具也都支持java。

在框架底层,我们集成了各种测试服务包,包括通用的restful, soap服务,公司内部的Tesla, MWP接口服务,还有pc端的自动化工具WebDriver,App端的自动化工具Appium,以及一些其他的测试服库,如数据库测试等。

2、测试执行与测试脚本/数据的分离

为了与测试管理系统集成,我们希望测试脚本/数据能够与测试执行完全分离,于是选择了在JVM中运行动态语言来实现。考虑到语言上手的速度与测试人员对语言的熟悉程度,我们选用了JDK8中原生支持的nashorn引擎,该引擎运行效率很高,测试脚本的语言支持javascript。引入这个引擎之后,我们在测试脚本中可以直接调用框架底层封装好的服务化的测试包,非常方便。

而测试数据和测试脚本通过配置文件的形式来进行分离管理,数据格式支持json,csv等,同时与我们团队打造的另外一个系统-数据工厂集成,以方便获取在测试过程中可能需要的动态数据,如:用户登录sign等。

3、测试脚本可读性

TDD, BDD现在已经是耳熟能详了,作为一个测试人员而言,我个人认为BDD的语法很清晰,而且其基本思路也是测试行为,更加符合测试的定位,于是我们在测试脚本中引入了javascript的BDD测试框架jasmine来优化测试脚本的可读性。同时BDD本身也支持了很丰富的expect语法,可读性极强。jasmine官方并没有提供对nashorn引擎的支持,在集成的过程中也踩过一些坑,但最终一一填平,这个有机会的时候再分享。

未来与展望

现有的框架整体而言,因为增加了一层抽象,让测试人员调试case的成本略有上升,但框架本身的可扩展性极强,未来支持更多的测试类型也很方便,通过jvm运行动态语言的思路,隔离了测试执行与测试用例,未来要支持更多的语言也只需要引入相应的引擎并进行一定的适配即可,这样可以做到一套测试服务库,支持多种语言。

自动化测试没有业务的落地就是空中楼阁,我们通过与几个业务方的合作已经初步看到自动化测试对业务的价值,现在正在通过对线上数据的抓取进行自动化测试脚本的生成来加快框架在更多业务的落地,同时与持续集成、测试管理等系统打通形成真正体系化的平台服务,更好地为业务服务,为质量加分。

 
MoguTTech 更多文章 欢迎来到蘑菇街测试技术的微信公众号
猜您喜欢 Python里的++和--不是运算符 [转载]一个程序员从Python转向Erlang的自述 PostgreSQL与Linux内核版本 API 调用次数限制实现 你为什么在Redis里读到了本应过期的数据--Redis过期策略解读