接下来的几篇文章,我将介绍一下我在2016年,我在美团点评独立开发的一个工具平台,我起名为“Lego平台”。
简单的来说,这是一套关于接口测试的自动化测试解决方案,简单、轻量、灵活是它最大的优点,下面我将划分多个篇章,对“Lego平台”进行介绍,算是对这个项目做一个完整的总结。
有些部分可能不适合对外公开,所以文章将会有两个版本出现,一个版本是针对外部同学进行分享,将在公众号和我的个人网站同步更新;另一个版本是针对公司内同学进行分享,会发布在公司wiki上。
内部wiki版入口:https://wiki.sankuai.com/x/Vu6sNg
好,废话不多说,直接切入主题。
1. Lego简介
Lego平台,公司内网域名 lego.sankuai.com (原 lego.dp),2016年3月Lego平台正式搭建。
Lego平台是一套完整的接口自动化测试解决方案,支持对公司内的 Pigeon、Mapi 和 Http 多种类型的接口进行手工测试和自动化测试。
每日定时执行测试,生成测试结果报告,生成代码覆盖率报告,提供数据统计等。
2. Lego特点
没有代码开发量,让QA更专注于用例的编写
使用Lego平台,没有代码开发量,所以不需要对脚本代码投入过多的代码学习时间。更多的是关注每条测试用例中的参数。
当然,如果有渴望代码开发的同学,也可以使用自己的TestNG脚本等形式,依赖我的接口测试执行的jar包,根据自己需要使用Lego。
更有希望进阶的同学,可以直接来找我,参与Lego平台的设计与开发工作,而不是停留在TestNG的“堆砌脚本”的阶段,相信这更能提高QA的各方面能力。
代码简单
这部分之后会专门提这部分的内容,LEGO由多个项目组成,看的比较多的web页面部分在lego-web项目中,而执行自动化测试用例部分在lego-apiautomation-base这个jar包中。感兴趣的同学可以查看这些代码,其中执行、检查点、前后置动作等编写的十分简单,易于维护。
参数化
这是Lego平台与众不同的几个特点之一。
“参数化”的定义是,测试用例的数据中,有些数据可能需要实时替换掉,或是需要使用最新的数据,或是使用一个通用的字符替换,达到统一修改统一管理的目的等。如配置好 ${userID}=123,当测试用例的参数中,存在 ${userID} 的地方,我就用123进行替换。
目前Lego平台的“参数化”支持:Key-Value参数替换;SQL语句查询结果的参数替换;UserID转Token;shopAccountID转Token等方式。
详细的使用方法,在后面的篇章中会着重说明。
前后置动作
这是Lego平台与众不同的几个特点之一。
“前后置动作”是在测试用例执行之前或之后,为了数据准备而需要做的“动作”。
目前Lego平台支持的“动作”有:SQL语句动作、Http请求动作、Mq消息发送动作、测试用例执行动作、Java方法动作。
可以使用insert或delete等sql语句来准备测试数据。
也可以使用Select语句,将查询出的多行多列数据放置到以这条用例为生命周期的一个全局列表中,以${pre.param}方式或${pre.param[0]}方式来选择需要的数据对测试用例中的数据进行替换。
详细的使用方法,在后面的篇章中会着重说明。
灵活的检查点
这也是Lego平台与众不同的几个特点之一。
常用的“不为空”“异常”“包含”等检查点可以满足简单的返回内容校验。
我们很多的接口返回接口为Json数据类型,这时候“Jsonpath检查点”起到了很大的作用,使用这个检查点可以支持更多样化的数据校验,详细的内容将会在之后的篇章中介绍。
检查点支持上述的各种“参数化”“前后置动作”操作的组合使用,大大的增加了数据的灵活性和健壮性。
3. Lego平台的由来
最初,入职点评后,Lego只是我给交易平台KTV组用来进行pigeon接口自动化测试的一个jar包(如下图)
相信看到这样的模型并不陌生,因为很多的测试都是这么个组成方式。
- 由Jenkins的job任务定时执行;
- 使用最基本的TestNG结构;
- 用@DataProvider读取Excel中的测试数据;
- 利用Pigeon的4080,发送Http请求,并得到接口请求的返回结果;
- 最后生成在线的报告和发送Email报告。
这是一个接口自动化测试很普遍的做法。它的优势也很明显:
- 简单;
- 不管从代码,还是到实现,都非常的轻量;
- 测试脚本代码行数不到80行;
- 满足日常自动回归要求;
- 由于将测试数据与代码隔离,其他QA不用coding,可以更关注自动化测试用例的设计。
之后,我从KTV组调整至团购主频道组,并将这套方案也带到团购主频道的日常接口测试中。在使用的过程中,慢慢地有了更多的优化:
- 根据测试需要,不使用Assert,而是自己封装了一层检查点;
- 为了便于用例管理,将测试用例数据从Excel移至MySQL数据库中;
- 数据在MySQL数据库中,为方便录入与维护,开发了一个数据管理的页面小工具;
- 测试结果、覆盖率数据等,也可以采集至数据库;
- 测试结果数据也在数据库了,那我们可以再做个页面小工具展示出来。
于是便有了一个团队主频道专用的自动化测试工具-“TuanTest”。
再之后,开始有其他团队也有使用这套方案的意愿,所以加入了不同BG、BU团队的维度,并更名为“LEGO”,申请了公司内网的服务器,以及lego域名。
之后的半年,大量的功能的加入,形成了现在功能强大的”LEGO平台”。
4. 现在的“Lego平台”
所以现在的Lego,不再只是一个小小的Jar包,
还包含了一个完整的维护网站:
能直接管理和编辑测试用例的界面:
展示执行情况的统计页面:
快速配置覆盖率的辅助工具(图略)
文档管理的wiki(图略)
每日自动测试的邮件报告:
详细的在线报告:
相关信息告知使用的大象公众号:
简单好用,上手快,日常维护简单快捷,在没有正式做工具推广的情况下。
使用团队:
- 由最初的2个团队,变成现在的37个团队使用。
- 由最初的只有QA使用,到现在有的开发使用Lego进行自测。
- 由最初的大众点评团队使用,到现在有部分美团侧团队也在使用。
- 部分团队甚至将Lego平台使用加入到自己团队的新人培训中。
测试用例:
- 从最初的80条,到现在的上万条。
开发人员:
- 也从只有我一人,到今年2人左右;
- 甚至还开发了BUG提交和需求提交页面,和任务白板,来管理各种问题。
好了,介绍篇结束~
源码能发来学习下么
开源吧老大,真的太想用用了
全栈的节奏啊
最近也写了一个平台,能留个微信交流一下么
可以啊,首页有微信二维码,或者搜cydblack
要是有个Demo能体验一把就更好了,不错赞
之后如果有时间,我会做个demo版本的
请教下,Java 处理http请求用什么jar包呢?
发送http请求我是用的Jsoup
jsoup 不是处理html的么
可以发送请求的
挺不错!
提一点意见: 那个Lego的logo相信有版权的,还是自己设计一个比较好。美团毕竟是大公司
嗯,毕竟是内部使用嘛,如果什么时候开源了或者对外了,肯定会改名字的
有使用版不?
准备开源不?
支持那些协议?
是把所有工具整合到一起了么?
求来源哦,
开源
我尽力~
厉害不错不错,动手能力强,落地不错。
和我的想法很多较一至,可惜我招了2人整了近3个月还是无法适应所有类型的http或dubbo接口
能分享就更好了,为测试行业提供大大的帮助
秀的一手好前端,这是要走全栈的路线啊