前段时间用jmeter进行某个web接口性能测试的时候遇到一个问题,body data中的换行的内容发送后,通过抓包发现总是发送"0D0A"即"\r\n"(wireshark—〉Hex Dump),因为接口中有一个参数需要测试并发多条数据,每个数据规定用"\n"分隔,所以一直没有找到好方法模拟,51testting问了也没人答,google了N久也没有好办法,今天有时间重新试了几次,终于找到方法了。
我首先尝试的办法是不用body data,改用parameters,增加一条detail,然后把原来在body data的内容贴进去,大概如下------------------------------c2549808e0dfContent-Disposition: form-data; name="em"product=deepscanuv=4et=1en=1md5s=a1d7e3adcdb07ddb6f42386a1d7e3adcdb07ddb6f42387------------------------------c2549808e0df--
运行测试之后发现原来数据中的换行都变成"\n"了,包括之前一直无法解决的md5s也是用"\n"来换行啦,因为这个接口要求除了md5s这个参数的换行要用"\n",其他地方的换行还是要用"\r\n",所以这样并不能解决问题,但是起码知道原来windows版jmeter也是可以发送"\n"作为换行的了,因为"\n"是个转义字符,所以便从转义方向考虑,只要能把"\n"转义后作为数据发送出去就可以了,google后发现jmeter有转义字符相关的函数:
__char(将一串数字翻译成Unicode字符)
__unescape(用于反转义Java-escaped字符串) __unescapeHtml(用于反转义一个包含HTML字符串,将其变为包含实际Unicode字符的字符串) __escapeHtml(用于转义HTML字符串中的字符)最终找到问题的解决办法,就是一句:
${__unescape(\n)}或${__char(0xA)}
所以只要把body data中需要这样处理的内容修改一下就就可以了,即
Content-Disposition: form-data; name="em"product=deepscanuv=4et=1en=1md5s=a1d7e3adcdb07ddb6f42386${__unescape(\n)}a1d7e3adcdb07ddb6f42387------------------------------c2549808e0df--