Jmeter压测参数化过程的一次经历

分享一次难忘的Jmeter压测参数化过程

背景

简单的说,就是一哥们离职,我来救火的,几乎0交接,你懂的。

要求

大家都知道,做压测之前我们必须要熟悉压测的接口,奈何遇到紧急救火的情况,你还想了解接口?门儿都没有,上来就直接跟我说,对对对,就这个接口,我们要做压测。什么基本信息都没有,就只知道要压测的接口,得,先抓个包看看。理一下他们所说的逻辑,从生产上抓包拿下来反参的数据,进行该接口的入参,是的,你没看错,就是要拿生产环境一个接口的反参作为要压测的入参,我的表情从一脸懵逼到一丝丝震惊再到一丢丢不安,只用了不到3秒,是的,我此刻的表情足以纳入北影教材。
以下是抓的包: ps:出于公司网络安全考虑,我仅展示我需要讲的参数。实际足有60多个参数

{
    "data":
    [
        {
      		......
            "xxxxxName": "",
            "xxxxxMessage": "",
            "xxxxxInfo": "",
            "xxxxxClass": "",
            "mobileNo": "",
            ......
            "sendTime": "",
            "eventTime": "",
            "initTime": ""
            ......
        }
    ]
}

为方便表达,xxxxName下面统一为 name ; xxxxxMessage 统一为message; xxxxxinfo统一为info; xxxxxClass 统一为class

业务:

会议评审的时候,开发人员告诉我,只需要改一个info值,好,我要资源,开发让运维从生产上给了我一个csv文件里面有info值,name值,message值,嗯?不是只需要改一个info值吗?我试了试每次只变化info值,发现报错。接着再去找开发,开发竟然跟我说,每次都要替换name,class,message,info,而且要数据要对应起来,没错 还要一一对应。我看了看手里的文件,是不是少了啥,对,class呢?不用传吗?好,传个空值 试一下,报错不行。找开发,撇了一眼,要传class,值呢?谁给我,回复我说是截取info参数里面第一行的某一段。纳尼??慢着,就是说info里面的一段信息是class的参数值?很好,这里我很想插一个表情,但是我忍住了。下面就直接介绍一下我的方案:

首先:

最先想到的当然是jmeter做csv参数化,提供的是csv文件,但是大家一定要知道,jmeter做标准的csv文件引用,一定是txt格式,然后每行为所有的参数,每两个参数中间用英文逗号[,]隔开,先将info字段、name字段、message字段做参数化变量,再把class入参也做变量,取info变量的第n到第m范围。方案虽然不完美,但是大家都知道,压测只需要验证响应时间、处理事务能力符合预期就可以了,不太关心灌的数据是否准确,验证数据准确性的测试在功能测试或接口测试的时候,就已经完成了。我只需要保证接口能正确传进去,验证后端服务的能力就可以了。所以我用了jmeter的截取函数:

"xxxxxClass": "${__substring(${xxxxxinfo},5,10,)}"

__substring后跟参数,首先跟一个变量,这个变量必须是在其他字段做好的变量参数,再后跟要截取的值,从0到n,那么5,10意思就是取第6到第11字符。具体大家可以自行调试一下。
自此第一个脱离第一个坑,且解决了4个key值的参数化。

其次:

再后面,就是时间字段。三个时间字段,我一开始大意了,全部取当前时间戳毫秒级。没错就是用的时间函数取当前时间戳的毫秒级,${__time(,)}这个时候接口还是会报错,实在受不了开发的态度,仔细看了一下生产环境的入参,发现时间应该也是有逻辑的,仔细看了一下,也想了一下,应该是 inittime —> eventtime —> sendtime,好自此踩的第二个坑,使用longSum函数完美解决:

"sendTime": "${__time(,)}",
"eventTime": "${__longSum(${__time()},-30,)}",
"initTime": "${__longSum(${__time()},-20,)}"

再次:

没错,还有再次,没想到,竟然还有再次!!
info里面竟然有$符,西巴,Ctrl + A 替换:$符号替换成空格。 不影响压测结果,直接替换。自此才算是把脚本跑起来了。

结论

真难啊,这就是不熟悉接口,又没有接口文档,开发也不熟悉接口的压测。这就是没有接口测试就直接压测的结果,费了大量的人力。辗转腾挪,我只能说 难以推动。可能大家觉得没啥,不就是两个函数搞定的事情吗,如果不是亲身经历很难想象其中的艰辛。没有接口文档的情况下,不要轻易答应做接口测试;完全不熟悉的接口,不要轻易答应做压测;除非你看到他们的入参只有两三个,像我上面的六十多个入参的大接口,只能吐血挨个排查。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值