Jmeter 原始碼改造入門
緣由
場景:在測試公司智慧家居的TCP介面過程中發現有些TCP響應body返回的是多個不連續的json串,JSON提取器使用jsonpath提取引數的時候預設選擇了第一個json串,導致不能正確的提取到變數。所以嘗試通過改造JSON提取器元件,根據關鍵字的方式過濾出目標json串再做變數提取。
響應body使用換行符分割,下方是多個不連續的json串:
{"":"","A":""}
{"":"","B":""}
{"":"","C":""}
工具準備
- Eclipse
- Apache Ant
- Jmeter原始碼包
- JDK1.8
環境搭建
先配置好Ant、jdk環境變數
開啟Eclipse建立一個Java工程
右鍵Java工程,選擇
import-general-file system
,選中下載的jmeter原始碼資料夾匯入到Java工程中然後根據報錯一個個解決,參考:https://jmeter.apache.org/building.html
在Java工程下使用命令ant重新構建jmeter。如果成功則提示build successful,失敗則提示build failed
改造方法
1.先找到JSON提取器的Java原始檔
2.找到對應的處理方法
3.使用ant構建
變數提取寫法
第一種:使用Beanshell斷言元件
import com.alibaba.fastjson.*;
String responseStr = prev.getResponseDataAsString();
log.info("獲取到的responseStr: " + responseStr);
String[] strArray = responseStr.split("\\n");
for (String str : strArray) {
JSONObject responseJsonObject = JSONObject.parseObject(str);
JSONObject contentJsonObject = responseJsonObject.getJSONObject("content");
String contentStr = contentJsonObject.getString("method");
if(contentStr.equalsIgnoreCase("這裡輸入關鍵字")){
String msg = contentJsonObject.getString("msg");
int code = contentJsonObject.getIntValue("code");
JSONObject resultJsonObject = contentJsonObject.getJSONObject("result");
vars.put("router_id", resultJsonObject.getString("router_id"));
if( !msg.equalsIgnoreCase("OK") || !(code == 0) ){
Failure = true;
FailureMessage = "msg的值不是O K或者 code的值不是0";
}else{
FailureMessage = "msg、code都是期望值";
return ;
}
}
}
Failure = true;
FailureMessage = "沒有找到包含 關鍵字的json串";
第二種:使用改造的方式提取變數
多個變數提取
- 在JSON提取器元件的引用變數中輸入:
var1,key;var2;var3
var1
、var2
、var3
表示引用變數名稱,變數之間使用英文分號分割
key
表示關鍵字,使用該關鍵字來提取目標json串,使用英文逗號追加在變數後邊
- 在JSON提取器元件的預設值輸入框中輸入:
a;b;c
多個變數提取時預設值個數與變數個數必須一致(Jmeter原有邏輯)
單個變數提取
在JSON提取器元件的引用變數中輸入:
var1,key
預設值輸入框可填可不填
備註:原則上說一個key就足夠過濾出目標json串來提取引用變數,所以沒必要使用多個key的方式
結果驗證
注意事項
ant構建之前,先設定好工程的編碼格式(UTF-8),否則重新構建的jmeter皮膚、元件都會亂碼
切勿使用ant clean install 會把依賴的外掛清除掉
相關文章
- Jmeter入門教程JMeter
- Jmeter新手入門必看JMeter
- jmeter學習指南之原始碼匯入 IntelliJ IDEAJMeter原始碼IntelliJIdea
- JMeter 介面測試快速入門JMeter
- JMeter效能測試工具使用入門JMeter
- Jmeter(八) - 從入門到精通 - JMeter配置元件(詳解教程)JMeter元件
- Jmeter(二十七) - 從入門到精通 - Jmeter Http協議錄製指令碼(詳解教程)JMeterHTTP協議指令碼
- Jetpack系列 - Lifecycle從入門到原始碼Jetpack原始碼
- Android OkHttp原始碼解析入門教程(一)AndroidHTTP原始碼
- Android OkHttp原始碼解析入門教程(二)AndroidHTTP原始碼
- jmeter 效能測試入門手冊分享JMeter
- Jmeter(三十) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy3(詳解教程)JMeterHTTP協議指令碼
- Spring Cloud 原始碼學習之 Hystrix 入門SpringCloud原始碼
- Android Compose 入門,深入底層原始碼分析Android原始碼
- ASP.NET CORE 入門教程(附原始碼)ASP.NET原始碼
- Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程)JMeter定時器
- Jmeter(十九) - 從入門到精通 - JMeter監聽器 -上篇(詳解教程)JMeter
- Jmeter(二十) - 從入門到精通 - JMeter監聽器 -下篇(詳解教程)JMeter
- Jmeter(十四) - 從入門到精通 - JMeter定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(三十三) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy6(詳解教程)JMeterHTTP協議指令碼
- Jmeter(三十二) - 從入門到精通 - Jmeter Http協議錄製指令碼工具-Badboy5(詳解教程)JMeterHTTP協議指令碼
- Jmeter(二十一) - 從入門到精通 - JMeter斷言 - 上篇(詳解教程)JMeter
- Jmeter(二十三) - 從入門到精通 - JMeter函式 - 上篇(詳解教程)JMeter函式
- Jmeter(二十四) - 從入門到精通 - JMeter函式 - 中篇(詳解教程)JMeter函式
- Jmeter(二十二) - 從入門到精通 - JMeter斷言 - 下篇(詳解教程)JMeter
- 小白讀原始碼 | RxJava2 入門篇(一)原始碼RxJava
- 深入淺出Mybatis原始碼系列(一)---Mybatis入門MyBatis原始碼
- Java Agent入門實戰(二)-Instrumentation原始碼概述Java原始碼
- Jmeter(十) - 從入門到精通 - JMeter邏輯控制器 - 中篇(詳解教程)JMeter
- Jmeter(十一) - 從入門到精通 - JMeter邏輯控制器 - 下篇(詳解教程)JMeter
- Jmeter(九) - 從入門到精通 - JMeter邏輯控制器 - 上篇(詳解教程)JMeter
- 使用JMeter進行負載測試快速入門JMeter負載
- 小程式入門到實戰(二)--案例原始碼分享原始碼
- 微前端框架 之 qiankun 從入門到原始碼分析前端框架原始碼
- Jmeter(十二) - 從入門到精通 - JMeter邏輯控制器 - 終篇(詳解教程)JMeter
- Jmeter(五十四) - 從入門到精通高階篇 - 如何在linux系統下執行jmeter指令碼 - 上篇(詳解教程)JMeterLinux指令碼
- 效能測試工具 jmeter 原始碼剖析:jmeter 分散式壓測啟動過程JMeter原始碼分散式
- 堪比JMeter的.Net壓測工具 - Crank 入門篇JMeter