一个曾经困扰了很久的问题,翻遍全网没有找到相关的答案,分享一下。
比如一个这样的场景:
post请求,使用csv参数化导入data,当响应断言错误的时候,输出并保存该请求传入的参数值(Request Body中的POST data)。
有人看到这会说了:你这不多此一举吗,把东西吃下去然后又吐出来。
没错,就好比我要吃一颗枣。把它放到嘴里,嚼了嚼,发现它坏了,吐出来,我要看看它是哪颗。
所以,并不是多此一举,因为这就是需求,需求即合理:-)
在Jmeter中,是没有类似正则提取器等处理器直接提取post data的方法的。
因此,只能添加一个BeanShell断言,自己写提取和处理方法。
取到post data的数据有两种方法:
1.prev.getSamplerData() //获取所有request body数据
2.prev.queryString //仅获取post data
这里的data已经被url编码了(当参数是中文时会被编码),因此将获取到的post data截取之后,使用URLDecoder解码。
方法:URLDecoder.decode()
如果入参是中文记得指定格式“UTF-8”,否则解码后会乱码。
这里有一点需要注意的是:
函数助手中的${__urldecode()}在Beanshell中是无效的,因为它只对常量有效,对变量无效。
例如:
data是变量,${__urldecode(data)}解码无效;
${__urldecode(“data”)}则会直接输出字符串data;
而输入常量,则有效:${__urldecode("%IT%E6%96%87%E8%89%BA%E9%9D%92%E5%B9%B4")}会正确解码输出;
最后将提取的错误入参保存到指定位置文件即可: