一、如何解決response內(nèi)容中文亂碼問(wèn)題?

  解決方案:添加一個(gè)BeanShell PreProcessor,然后在Script代碼區(qū)域添加:prev.setDataEncoding("utf-8");

  如圖:

  二、如何提取response中json格式的內(nèi)容?

  解決方案:在請(qǐng)求Samper,添加一個(gè)后置處理器(Json提取器)。

  格式:$.data.report.reportCode

  data代表父節(jié)點(diǎn),report代表子節(jié)點(diǎn),reportCode代表子節(jié)點(diǎn)下面的節(jié)點(diǎn),用點(diǎn)來(lái)一層一層定位。

  例子:

  三、關(guān)于BeanShell參數(shù)傳遞如何使用?

  解決方案:右鍵添加一個(gè)BeanShell PostProcessor, 將前面提取出來(lái)的參數(shù),以java代碼傳入到嵌入的腳本中。

  代碼:String reportCode = vars.get("reportCode");

  例子:

  四、如何使用BeanShell處理response 中json格式的內(nèi)容。

  解決方案:

  步驟1:添加一個(gè)json.jar 包。下載地址:https://mvnrepository.com/artifact/org.json/json/20180813

  步驟2:將json.jar包添加到D:pache-jmeter-2.13libext   和   D:pache-jmeter-2.13lib 目錄中

  步驟3:在測(cè)試計(jì)劃中添加json.jar 包,界面最下面,Add directory or jar to classpath

  步驟4:   重啟jmeter

  步驟5:添加一個(gè)BeanShell PostProcessor,使用java代碼解析json,

  代碼例子:

復(fù)制代碼
import org.json.*;


//獲取獲取請(qǐng)求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印獲取請(qǐng)求的返回值
//log.info(response_data);
//將String類型的返回值構(gòu)造成JSONObject對(duì)象
JSONObject data_obj = new JSONObject(response_data);

//獲取data里面的內(nèi)容
String list_str = data_obj.get("data").toString(); 
//JSONArray list_str = data_obj.getJSONArray("data");

//將data里面的內(nèi)容轉(zhuǎn)成jsonObject
JSONObject jsonTemp = new JSONObject(list_str);
//得到answer里面的內(nèi)容
JSONArray answer_obj = (JSONArray)jsonTemp.get("answer");
//log.info(answer_obj.get(0).toString());

//聲明一個(gè)list數(shù)組用于存放拼接answer里面的內(nèi)容
List answerList = new ArrayList();

//拼接answer數(shù)組里面每一個(gè)內(nèi)容變成一個(gè)["*","*","*"]格式的參數(shù)
for (int i=0; i){
    JSONArray answer_arry = (JSONArray)answer_obj.get(i);
    //log.info(answer_arry.get(0).toString());
    answerList.add("""+ answer_arry.get(0).toString() + """);
}
log.info(answerList.toString());

String trueAnswerList = answerList.toString();
vars.put("trueAnswerStr",trueAnswerList);
復(fù)制代碼

  五、如何將從response得到的數(shù)據(jù)回寫到csv,并且可以追加

  解決方案:在請(qǐng)求samper ,添加一個(gè)BeanShell PostProcessor

  代碼:

復(fù)制代碼
String filePath = "D:/apache-jmeter-2.13/reportCodeData.csv";

BufferedOutputStream bos = null;
FileOutputStream fos = null;
File file = null;
    
String reportCode = vars.get("reportCode");
    BufferedWriter out = null;
    try {
        out = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(filePath, true)));
        out.write(reportCode +"
");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
            try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

     六、if控制器,處理判斷response中的參數(shù)

  解決方案:將參數(shù)提取出來(lái)然后判斷

  代碼:"${topicFinished}"=="false"

  例子:

七、使用正則處理response

  解決方案:添加一個(gè)BeanShell Sampler,里面使用java代碼將提取出來(lái)的參數(shù)重新處理

  代碼:

復(fù)制代碼
import java.util.regex.*;
import java.util.*;

String tempString = vars.get("SelectAnswer"); //SelectAnswer = "[["*"],["*"],["*"]]"; 
String[] array = tempString.split(",");
List templist = new ArrayList();

for(int i = 0; i < array.length; i++){
    //正則雙引號(hào)中間的所有內(nèi)容
    String pattern = ""(.*?)"";
    //創(chuàng)建Patten對(duì)象
    Pattern r = Pattern.compile(pattern);
    //創(chuàng)建mather對(duì)象
    Matcher m = r.matcher(array[i]);
    if(m.find()){
        templist.add(m.group(0));
    }
}
String exceptValue = templist.toString();//String exceptValue = "["*","*","*"]";


vars.put("newSelectAnswer",exceptValue);
復(fù)制代碼