背景
市面上有很多的测试工具,比如测试接口有Jmeter、Postman等,自动化有Robotframework、Appium、Selenium等,每个人掌握的技能不同,有的用Python,有的习惯用Java,自然掌握的工具也不同,不可能把所有的工具都学习一遍,掌握精通,这样成本就太大了。
在一个公司里面也一样,每个人的技能点是不一样的,也有自己的习惯和擅长的工具。那么就有个问题,不同的工具或者框架,都是独立的,生成的报告风格也是不一样的。比如有三个业务组,每个业务组有一个人负责自动化,因为三个人掌握的技能不同,掌握的测试工具也不同,所以会有三种风格的测试框架、实现逻辑和测试报告,但是向上汇报时是需要合并成一个的。我不提倡要求大家必须统一使用一个框架,当然这样风格保持了一致,但是我觉得对大家的成长帮助不大。每个人都有自己的学习曲线和感兴趣的地方,比如我习惯用Python,觉得Java的学习成本高,不愿意在上面浪费时间,那我可以关注一些基于Python的测试工具,同样可以完成任务,对我而言这是最快投入工作的路径。其他人掌握的是Java,同样使用基于Java的工具可以更快上手。
那么,基于以上的场景,就有了这样一个需求,搭建一个测试中台,用来搜集各种测试工具的数据,生成统一的测试报告,在平台上也可以统一管理测试任务,执行测试任务。基于这样的想法,开发了测试云平台。云平台不用自己实现底层的测试逻辑,利用各个测试工具的开放API,或者提供一套接口供测试工具调用来搜集数据。当然,市面上的云平台产品也很多,有开源的,也有收费的。选择重新造一个,一是需要符合公司的业务,二来也是为了学习。在软件行业都说不要重复造轮子,为了业务快速发展是这样的,但到最后发现,大部分公司都会有一套基于使用过的轮子搭建的适用于自己的一套服务。
测试云平台预览图
云平台整体架构图(还未完全实现)
整体结构简介
云平台由以下几个模块组成:
- 测试环境管理
自动化测试
- GUI测试
- API测试
- 用例管理及用例推荐系统模块
- 任务调度管理
- 测试报告分析
- 底层测试执行框架
- 测试执行机调度
- API文档管理及Mock系统
- Wiki文档知识库
大致的思路是这样的:
大家在自己擅长的测试框架上做一些改造,通过平台提供的接口,将测试执行结果上报给平台,第一次上报后会自动生成用例列表,也可以通过平台提供的接口单独上报管理用例,在执行测试前,通过平台提供的接口获取特定执行的用例列表,框架需要改造可以执行特定的用例列表,一般基于XUnit的框架都可以实现。
将框架封装打包成一个Docker镜像,这一个镜像就相当于一个测试执行机,这个其实就是测试能够跑起来的核心内容。执行一个测试任务,即通过Jenkins基于Docker镜像运行一个临时的容器,测试执行结束容器自动销毁。测试结果通过接口上报给平台,后续的查看测试报告都在平台上完成。不同的测试框架对应一个不同的Docker镜像,对Jenkins的调度也是通过开放API来完成的,操作层面都是在平台上完成。可实现在平台上管理测试任务,执行测试任务和查看测试报告的整个流程。
基于接口测试用例,又可以做一些生成测试数据的工具,提供接口可供测试调用,这样也可以做到跨框架和业务的数据准备,提升测试效率。
对于测试的度量,可通过Jacoco实现代码覆盖率的数据收集,进一步可以做到测试用例和所执行代码的关系绑定,实现用例推荐系统,筛选出冗余的测试用例,可以用最少的用例实现最大的覆盖,提高执行效率。
Mock系统是一个相对独立的系统,目前也有抓包工具可以实现修改返回值功能,基于此,可以更进一步实现自动生成接口文档和测试用例功能。
以上这些模块,单独拎出来其实都有对应的开源工具,云平台不是将这些工具再实现一遍,而是将这些工具整合进来,通过接口或者二次开发来调度他们。云平台只提供一个操作层面的前端,相当于一个测试中台服务。
开源版部署说明
Github地址:https://github.com/BSTester/OpenStark
技术栈:前端是React(Ant Design),后端是Python(Tornado)
其实后端是不限制的,可以使用任何语言,只要提供接口给前端调用即可,可以多人协作实现更多功能,用大家擅长的语言即可,通过Nginx转发到不同的后端服务。
基于Docker启动服务
请在Linux或Mac环境下构建执行
- 构建前端
请先自行安装docker和node服务
cd OpenStarkWEB && npm install && npm run build
- 启动服务
修改 docker-compose.yml
中的 Jenkins
服务配置 将 /this/project/absolute/path/OpenStark
改成存放当前项目的绝对路径
docker-compose up # 会先自动构建docker镜像
- 访问地址
第一个注册的账户为管理员账户
Jenkins:http://localhost:8091
需自行配置,默认管理员密码会打印在控制台上,请留意
后续
如果需要按照架构图整体跑起来,需要结合实际情况配置一些服务,包括配置Jenkins的测试执行项目,docker管理项目,jacoco监控项目等,这里仅供给大家参考和提供一些思路,后面会单独用一个系列的文章介绍怎么从零开始搭建,也算是做一个总结和复盘吧,先放个大纲。