通用HTTP测试工具开发详解

声明:原创文章,转载请注明出处。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参数设置以及检查点配置。
  • 服务端配置:待监控的服务端信息。

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

HTTP任务编辑

3、基本配置

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

  • 任务环境:通常来讲,环境分为测试环境和生产环境,当然也可以根据不同的机房进行定义;该项设定主要是决定了任务运行的Pod属于哪个环境。
  • 任务类型:由于为HTTP任务,故此项无需改动。其他的选项为:RPC、Jar任务等。
  • 测试类型:主要分为性能压测和功能测试两部分。

4、测试配置

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

  • 压测方式:可设置为用户数模式和TPS模式。二者的主要区别在于用户数模式,客户端会模拟等量的用户进行不间断测试;而TPS模式仅仅是保证在一个自然数周围进行测试(如设置TPS=1000,则客户端会尽量保证在这附近进行测试)
  • 压力机配置:需要配置压力机的数量、CPU核数以及内存大小。其实就是对Pod的设置。

5、客户端请求

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

  • CSV功能替换模型:该模型比较难以理解。我们辅助一个例子来说明:假设有一个后端服务提供一个这样的接口:
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列,即可。这样平台在测试过程中,会一行行进行遍历和替换。

  • 检查点:对结果进行断言验证。提取点包括:ResponseHeader和ResponseBody;其中ResponseHeader只支持键值对匹配,ResponseBody支持JSON提取、文本提取和正则匹配等。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342