技术

通用HTTP测试工具开发详解

2018-07-09  本文已影响29人  唐影若凡

声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a

一、背景

由于最近题主在做一些分布式测试工具的开发,想分享一些思路或者想法出来。
具体的产品可见,小米分布式测试平台 (一)- 初识 Pecker
因为涉及公司的项目以及保密性,故只分享一些这种工具的开发思路。

HTTP协议无论在公司内网或者公司外网来讲,尤其重要。但对其进行性能压测和功能压测的工具基本就那几种。且每个公司业务和环境不同,移植或者二次开发难度很大。

因此,大公司在这件事情基本上都投入很多人力,但核心功能还是下面讲到的这些。

声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a

二、HTTP性能测试

1、基本架构

还是搬出下面这个图,HTTP测试功能只是在容器云上运行的一个客户端。
这样做的原因是:控制台和调度层相对独立,功能保持不变。容器云的Pod提供运行时环境,真正跑的任务为一个HTTP测试客户端。

三层架构

清楚了,HTTP测试功能的整体所处的位置后,我们再考虑HTTP功能的各个模块。

2、HTTP功能模块

整个HTTP测试功能,一般需要以下四个模块。分别为:任务基本配置、测试配置、客户端特殊配置以及服务端配置。

我画了一张草图,基本上HTTP测试就是下面这个样子:
题外音:原谅一个不会画原型图的程序员吧!!

HTTP任务编辑

3、基本配置

HTTP任务作为一种任务形态依附于项目,因此需要定义相关的项目和任务名称。基本配置作用于各个任务形态(RPC、HTTP、Jar)。

4、测试配置

也是整个测试平台的通用配置,主要包括压测方式设置以及压力机配置。

5、客户端请求

该模块作为HTTP任务的专用模块。可配置一些HTTP的常见基本参数。

path:/demo
参数:id=?
返回值:id
示例1:www.test.com/demo?id=1&name=1    返回:1
示例2:www.test.com/demo?id=2&name=2    返回:2

对这样的接口测试,我们不可能只请求一个不变的例子(如id===1),也不可能穷举N个任务,每个任务发送一个固定的请求。
所以,我们需要使用变量替换掉id,即:

www.test.com/demo?id=${id}&name=${name}

然后,在CSV中保证有id列和name列,即可。这样平台在测试过程中,会一行行进行遍历和替换。

6、服务端监控

对被压测的服务进行监控,其实现思路常见有2种:服务端开启JMX或者服务端使用我们提供的Agent进行数据回传。

声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a

三、HTTP任务调试

如果任务保存后,再执行。通常会进行一个:保存、Pod测试、报表收集等过程。
假设用户在编辑任务表单时输错了一个字符,仍需要进行以上步骤,其效率将大大折扣。

基于此,我们需要用户在编辑任务表单时,实时调试自己的任务,如下:


HTTP任务调试

其中,概览包括请求及响应头信息、请求Body为POST时请求的数据、响应信息为服务端的真实响应数据。

备注:由于调试功能仅为校验表单的作用,是不能CSV替换模型同时使用。

声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a

四、HTTP定时测试

多数情况下,我们的任务不仅要执行一次,而是多次执行。那任务本身如果支持定时测试,那真是极好的,至少不用外接Jenkins进行定时调度。
通常,我们为用户支持两种方式来支持定时调度,分别为Crontab模式和闹钟模式。

Crontab模式
闹钟模式

至于任务本身的定时调度实现,我们可以使用Spring Schedule或者Quartz组件,但是需要保证多节点不会同时调度的问题。

五、HTTP功能测试

针对HTTP功能来讲,无非就是跑一些case,能够输出判断结果。
可以精简性能测试模块,去掉压力机的相关配置。
任务须配置为CSV模式,其中包括请求参数变量以及检查点变量。具体不再详述。

声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a

上一篇下一篇

猜你喜欢

热点阅读