前段時間用jmeter進行某個web接口性能測試的時候遇到一個問題,body data中的換行的內容發送后,通過抓包發現總是發送"0D0A"即"\r\n"(wireshark—〉Hex Dump),因為接口中有一個參數需要測試並發多條數據,每個數據規定用"\n"分隔,所以一直沒有找到好方法模擬,51testting問了也沒人答,google了N久也沒有好辦法,今天有時間重新試了幾次,終於找到方法了。
我首先嘗試的辦法是不用body data,改用parameters,增加一條detail,然后把原來在body data的內容貼進去,大概如下
------------------------------c2549808e0df Content-Disposition: form-data; name="em" product=deepscan uv=4 et=1 en=1 md5s=a1d7e3adcdb07ddb6f42386 a1d7e3adcdb07ddb6f42387 ------------------------------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=deepscan uv=4 et=1 en=1 md5s=a1d7e3adcdb07ddb6f42386${__unescape(\n)}a1d7e3adcdb07ddb6f42387 ------------------------------c2549808e0df--