编辑推荐: |
本文来自于infoq,本文主要讲解,如何巧用Docker的天然优势,构建一个扩展性强的接口测试平台,以及构建平台过程中遇到的技术细节。
|
|
HTTP接口测试是大家接触较多的一种测试类型,也是做自动化验证、快速回归的重要手段。
1 接口测试基本流程
接口测试的基本流程是这样的:根据接口规范文档,构造请求参数(正面的、反面的、边界值等),然后发送http请求到服务端,服务端处理完返回对应的数据,然后验证返回值是否符合预期。整个流程如下图所示:
2 常见接口测试工具
下图对比了一些常见的接口测试工具:
3 理想中的接口测试平台需要具备哪些功能
作为一个点点点工程师,希望接口测试可以通过点点鼠标就可以轻松完成一次接口测试,上面的那些工具虽然各有优势,但是用起来并不那么轻松。
下面列出各种理想中接口测试是怎样的:
1)可视化的编辑http请求
2)无缝接入持续集成
3)方便的准备测试数据
4)灵活的圈定用例集
5)用例可复制共享协作
6)支持定时任务
7)支持场景化的测试
8)用例可以快速的在不同环境中执行
9)支持并发执行
10)直观看到测试过程中的各种数据
4 接口测试平台功能分析
基于上面的需求,我们开发了一个定制化的接口测试平台,外观如下图所示:
核心功能是用例创建、执行、管理,下图是产品架构图:
5 平台的架构
下图是接口测试平台主要的架构:
从架构图中可以看到,主要的核心服务有三个:
1)web服务,主要负责用例、环境等的管理
2)调度器,负责下发任务、数据转发等
3)执行器,是轻量的Docker容器,是具体用例的执行就是在执行器里面操作的
6 具体的功能介绍
1)用例创建:
用例五元组: URL、请求类型、用例名、请求头、请求参数
用例参数获取方式: 固定值、外部获取、系统生成、其他用例
校验方式支持:json校验、请求包含、请求不包含、正则表达式、httpcode
支持单用例多组数据
支持用例复制、重新编辑
执行记录有保存
2)用例执行
动态指向不同的测试环境
执行环境相互隔离
列出执行结果中的关键信息
给出校验结果
3)用例集
任意用例组合成一个集合
执行时可以指定执行器
支持单次执行和并发执行
动态的显示执行结果
7 技术改进
point1:用例并发执行
用例并发执行的原理是将任务推送到broker,然后通过启动多个消费者worker来并发的消费任务,从而达到并发流量的目的。但是这样会带来一个问题,当多个用户同时在平台上面提交了并发执行任务后,由于任务没有区分优先级,导致有些用户的请求必须等到前面的任务执行完了才能得到响应,用户体验很不好。解决的方案就是让消费者worker有区别的去消费不同的任务,例如user1的任务,只让worker1来消费,其他的worker不会消费,这样就达到了用户并发任务都能达到及时响应。
下图给展示了任务并发的架构改进:
point2:协议的设计演进
刚开始,调度器和执行器之间是基于http请求的,但是发现http请求对资源的消耗比较大,而且随着执行器不断的增加,对调度器而言开销会越来越大,性能会急剧下降。现在将协议改成socket,调度器和执行器之间维护长连接,这样减少了http创建连接的开销。任务通过msgpack下发,消息体里面定义任务的类型。
point3:执行器管理
上面提到执行器是通过docker实现的,这样做的好处有:
通过docker来实现网络隔离
swarm做调度,shipyard做可视化的集群管理
可以动态的扩展资源,接入成本更低
|