2015-04-03 17 views
1

有沒有人知道爲什麼jmeter在我修改請求正文後通過了空POST。jmeter在BSF預處理器修改請求後發送空的http POST正文數據

我有一個主體(不幸的是我不能將圖像與粘貼)

進行大規模的JSON的請求我有BSF預處理器連接到這個請求:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import org.apache.jmeter.config.Argument; 
import org.apache.jmeter.config.Arguments; 
import org.apache.jmeter.samplers.Sampler; 
import org.apache.jmeter.protocol.http.sampler.HTTPSampler; 

Sampler sampler = ctx.getCurrentSampler(); 
String param = sampler.getArguments().toString(); 
String replacerMCI = vars.get("vMainCaseId"); 

Pattern r = Pattern.compile("(?<=mainCaseId\":\")(\\d{2,})"); 
Matcher m = r.matcher(param); 
String paramRep = m.replaceAll(replacerMCI); 

Argument arg = new Argument("", paramRep); 
Arguments argList = new Arguments(); 
argList.addArgument(arg); 
sampler.setArguments(argList); 

當我記錄到控制檯以查看參數是否被修改我可以看到它有一個新的值,但是當我開始測試時,我看到POST使用空數據發送。

POST https://servername:9443/teamworks/ajaxCoach 
POST data: 
Cookie Data: 
[some cookie data] 

回答

0

你的代碼看起來不錯,只是刪除以下行:

Sampler sampler = ctx.getCurrentSampler(); 

  1. org.apache.jmeter.samplers.Sampler類沒有 「setArguments」 mehod
  2. 有一個預定義變量sampler這是一個父母取樣器的簡寫,我想這是HTTPSamplerProxy你的情況

展望未來,如果您遇到任何問題,你的腳本看看jmeter.log文件作爲前置和後置處理器沒有將GUI顯示,即使他們失敗。

如果您使用Beanshell作爲BSF語言,您可以在您的測試的開頭添加debug();線,BeanShell的解釋器將打印調試信息到標準輸出

+0

德米特里你好! 感謝提示。我改變了一下實施。 現在我直接使用HTTPArgument並且正在發送POST,但是...我發現了另一個問題。 1. POST在請求主體開始時以等號發送 有什麼辦法從消息中刪除這個等號? POST看起來像這樣:= {data:「」; ...} – 2015-04-07 10:11:40

+0

您可以將其作爲'arg.setValue(arg.getValue()。replaceFirst(「\\ =」,「」));' – 2015-04-07 10:49:05

+0

Hurra! ;-) 很簡單。感謝幫助。不幸的是,我沒有足夠的聲望點,所以我不能讚賞。 – 2015-04-07 13:40:04