一种用Jmeter进行json+base64报文测试的方法
摘要:我们在接口测试过程中,可能会遇到一类报文,它是在json报文中嵌套了一部分base64编码数据,而这部分数据恰恰包含需要参数化的部分,因此必须对其进行重编码。对于我这样的代码手残党,以前只会使用base64工具,对其中的base64编码解码后,手工替换其中的参数部分,然后再用工具重新编成base64码,进行报文发送。自从开始学习使用Jmeter之后,我就被它在性能测试和接口测试过程中表现出来的灵活性和扩展性所吸引。于是就在大神的指导下找到了一种使用Jmeter对base64编码部分通过解码+参数化+重新编码进行报文重构的方法。这个过程用到了两个Jmeter插件:Dummy Sampler和 JSON Extractor。
一、两个插件
Dummy Sampler
Dummy Sampler 即虚拟采样器,常用于在服务端尚未开发完毕时,模拟服务器响应。
Dummy Sampler 可通过Jmeter的Plugins Manager 进行下载安装,如图:
下载完成后,即可在取样器中找到它:
JSON Extractor
JSON Extractor即JSON提取器,可用于提取响应报文中的单个参数。
我们可以在后置处理器中找到它:
二、实现方法
第一步,解码:
首先在线程组中添加Dummy Sampler。在这里我们不是为了模拟服务响应,而只是借用它的输出进行base64解码。
参数如下:
其中,Response Code和Response Message设定为默认值即可。为了不对交易响应时间产生较大影响,我们把Dummy Sampler的模拟连接时间(Connect Time)、延迟时间(Latency)、响应时间(Response Time)均设置为1ms。并在Response Data部分用base64Decode()函数进行解码,并保存在Content变量中。
第二步,提取:
接下来,添加JSON Extractor,将Dummy Sampler模拟输出中需要参数化的变量提取出来:
其中:Names of created Variables即保存变量名,本例中为ReqSeqNo。
JSON Path expressions即json 路径表达式,也就是Dummy Sampler输出中我们要提取的字段名。
Match Numbers即匹配数字,0代表随机,1代表第一个,-1代表所有。
Default Values即默认值。
Compute concatenation var(suffix_ALL):是否统计所有,即保存所有匹配到值。
第三步,替换:
之后,就是把真正的HTTP请求报文中,base64编码部分提取出的变量用参数进行替换,然后重新编码,组成新的报文了:
这里我们用strReplace()函数将Content中ReqSeqNo变量对应的部分使用time()函数生成的字符串替换后,重新利用base64Encode()进行base64编码,这样一个新的报文就大功告成了。
如果你想看响应报文是否符合预期,还可以按照上面的说明如法炮制,把HTTP请求响应结果中的base64报文通过JSON Extractor提取,并使用另一个Dummy Sampler对其进行解码。
最后添加监听器组件,这样整个测试计划基本完成了:
三、总结
通过上述方法,我不必再使用其它工具对base64编码进行手工解码、编码,而且参数也是自动生成,轻松又愉快。当然你也可能会说,使用Dummy Sampler 只是用来对base64进行解码,为什么不直接在HTTP请求中用公式进行Decode和 Encode呢?这个方法我确实也尝试了,但是最后出来的结果始终存在差错,手残党的悲哀啊。恰好我刚学习了两个新的插件Dummy Sampler和 JSON Extractor,于是就想出了这个像拼乐高一样的办法。学习的过程是循序渐进,在不断尝试的过程中灵活应用,往往也能有新的发现。希望随着自己对Jmeter学习的深入,能够想出更简单有趣的方法和大家交流。
65555
页:
[1]