Jmeter壓測實戰:Jmeter二次開發之自定義函數

目錄

1 前言

2 開發準備

3 自定義函數核心實現

3.1 新建項目

3.2 繼承實現AbstractFunction類

3.3 最終項目結構

4 Jmeter加載擴展包

4.1 maven構建配置

4.2 項目打包

4.3 Jmeter加載擴展包

5 自定義函數調用調試

5.1 打開Jmeter函數助手,選擇自定義函數

6 總結


1 前言

Jmeter是Apache基金會下的一款應用場景非常廣的壓力測試工具,具備輕量、高擴展性、分布式等特性。Jmeter已支持實現隨機數、計數器、時間戳、大小寫轉換、屬性校驗等多種函數,方便使用人員使用。如果在使用過程中存在和業務強耦合的常用功能函數,在Jmeter不支持的情況下,那就需要單獨開發自定義函數實現特定功能。

本文介紹如何開發Jmeter自定義函數實現快速生成京東宙斯下單標準sign,同時深刻理解Jmeter的插件化機制及高擴展性特性。

2 開發準備

  1. Java基礎開發
  2. Maven基本使用
  3. 開發依賴版本
    JDK 1.8.0Maven 3.6.3Jmeter 5.4.3

3 自定義函數核心實現

3.1 新建項目

  • 新建maven項目,這里項目名為:JSF_Sampler
  • 因為是基于Jmeter的擴展,需要依賴包Jmeter兩個核心包,分別是:
  • ApacheJMeter_core
  • ApacheJMeter_java
  • ApacehJMeter_functions

pom.xml文件核心配置如下

<groupId>com.jd.jmeter.jsf</groupId>
<artifactId>JSF_Sampler</artifactId>
<version>1.0-SNAPSHOT</version>
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><jmeter-version>5.4.3</jmeter-version>
</properties>
<dependencies><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>${jmeter-version}</version></dependency><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_java</artifactId><version>${jmeter-version}</version></dependency><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_functions</artifactId><version>${jmeter-version}</version></dependency></dependencies>

3.2 繼承實現AbstractFunction類

實現類依次實現以下幾個步驟

1)新建實現類并繼承 AbstractFunction

  • 注意:實現類的包名必須包含xxx.functions.xxx,Jmeter使用命名規則實現實現類的加載。

2)重寫以下方法,每個方法的用途見下方代碼注釋

  • execute()
  • setParameters()
  • getReferenceKey()
  • getArgumentDesc()
   /*** 京東宙斯 下單標準字段常量*/private static final String APP_KEY = "app_key";private static final String APP_SECRET = "app_secret";private static final String ACCESS_TOKEN = "access_token";private static final String TIMESTAMP = "timestamp";private static final String V = "v";private static final String METHOD = "method";private static final String BUY_PARAM_JSON = "360buy_param_json";/*** Jmeter中自定義的函數名,在Jmeter的函數助手中可以看到*/private static final String FUNC_NAME = "__GenSignFunction";/*** 自定義函數的描述,入參,出參,方便使用人員參考使用*/private static final List<String> desc = new ArrayList<>();static {desc.add("This function is used to generate the JD's JOS sign value");}/*** 此為自定義函數核心實現類,其中,入參SampleResult為上次運行的結果,Sampler為當前的采集器;* 返回值為該函數的返回值* @param sampleResult* @param sampler* @return* @throws InvalidVariableException*/@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {// 入參處理String param = String.valueOf((CompoundVariable)paramValues[0]);String signResult = paramHandler(param);return signResult;}/*** 按京東宙斯sign加密規則生成標準sign* @param param* @return*/public String paramHandler(String param){Map<String,String> valueMap = new HashMap();// 按&符號分割String[] paramArray = param.split("&");for (int i = 0; i < paramArray.length-1; i++) {String key = paramArray[i].split("=")[0];String value = paramArray[i].split("=")[1];valueMap.put(key,value);};// 京東宙斯標準signString josGign = EncryptUtil.getSignature(valueMap.get("app_secret")+BUY_PARAM_JSON+valueMap.get("360buy_param_json")+ACCESS_TOKEN+valueMap.get("access_token")+APP_KEY+valueMap.get("app_key")+METHOD+valueMap.get("method")+TIMESTAMP+valueMap.get("timestamp")+V+valueMap.get("v")+valueMap.get("app_secret"));return josGign;}/**
* 配置入參,jmeter函數助手入參
*/@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {paramValues = collection.toArray();}
/**
* 此方法返回自定義的函數名稱
*/@Overridepublic String getReferenceKey() {return FUNC_NAME;}
/**
* 此方法返回函數描述信息
*/@Overridepublic List<String> getArgumentDesc() {return desc;}

3.3 最終項目結構

4 Jmeter加載擴展包

以上開發完成,打包此項目,注意這里的打包要包含依賴包。

4.1 maven構建配置

<build><finalName>${project.artifactId}</finalName><defaultGoal>install</defaultGoal><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>assemble-all</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

4.2 項目打包

打包指令如下
mvn package -Dmaven.test.skip=true

4.3 Jmeter加載擴展包

將打包后的擴展包放置到Jmeter的ext目錄:apache-jmeter-5.4.3/lib/ext/

啟動Jmeter后,Jmeter會自動加載ext目錄中的擴展包

打開Jmeter函數助手后,可以看到本次實現類中打印的相關日志

5 自定義函數調用調試

5.1 打開Jmeter函數助手,選擇自定義函數

5.2 京東宙斯接口驗證

這里使用京東快遞獲取預制運單號接口,輸入GET請求后,直接點擊運行函數【Generate & Copy to clipboard】,出參返回32位sign值。

GET請求入參
method=jingdong.etms.waybillcode.get&app_key=349559FAE87E66826499890862E40A44&access_token=c8c2bdc8d1684630bb771a503d5b5a7fkyzh×tamp=2022-01-28 15:10:00&360buy_param_json={"preNum":"1","customerCode":"10K43816","orderType":"0"}&v=2.0&sign=EBB52C6CEDA34703ADE72D4AA4D8F316&app_secret=29959e4cadc14ff4998d4fc26d1e5063

6 總結

本文通過自定義函數實現了京東宙斯下單標準sign的生成,希望通過本項目大家可以學習到:

  • 如何二次開發Jmeter,實現自己特有的自定義函數。
  • 理解為何官方介紹Jmeter是插件化的,高擴展性特性。
  • 更好的理解Jmeter內部處理機制。

?以下是我收集到的比較好的學習教程資源,雖然不是什么很值錢的東西,如果你剛好需要,可以評論區,留言【777】直接拿走就好了

各位想獲取資料的朋友請點贊 + 評論 + 收藏,三連!

三連之后我會在評論區挨個私信發給你們~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37391.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

clickhouse 刪除操作

OLAP 數據庫設計的宗旨在于分析適合一次插入多次查詢的業務場景&#xff0c;市面上成熟的 AP 數據庫在更新和刪除操作上支持的均不是很好&#xff0c;當然 clickhouse 也不例外。但是不友好不代表不支持&#xff0c;本文主要介紹在 clickhouse 中如何實現數據的刪除&#xff0c…

單鏈表相關操作(插入,刪除,查找)

通過上一節我們知道順序表的優點&#xff1a; 可隨機存儲&#xff08;O(1)&#xff09;&#xff1a;查找速度快 存儲密度高&#xff1a;每個結點只存放數據元素&#xff0c;而單鏈表除了存放數據元素之外&#xff0c;還需存儲指向下一個節點的指針 http://t.csdn.cn/p7OQf …

【2023年11月第四版教材】《第4章-信息系統管理(合集篇)》

第4章-信息系統管理之管理方法&#xff08;第四版新增章節&#xff09;&#xff08;第一部分&#xff09; 章節說明1 管理方法1.1 信息系統四個要素1.2 信息系統四大領域1.3 信息系統戰略三角1.4 信息系統架構轉換1.5 信息系統體系架構1.6 信息系統運行1.7 運行和監控1.8 管理和…

北郵鄧中亮:深度融合5G+北斗,實現高精準定位

如今&#xff0c;萬物互聯時代&#xff0c;物與物、物與人、人與人之間需要實現更多的互聯。在如此復雜多變的環境中&#xff0c;定位技術面臨著著更多挑戰和需求&#xff0c;需要不斷的創新和改進。唯有如此&#xff0c;才能滿足未來智能交通、無人駕駛和工業互聯網等領域的高…

kafka基本概念及操作

kafka介紹 Kafka是最初由Linkedin公司開發&#xff0c;是一個分布式、支持分區的&#xff08;partition&#xff09;、多副本的 &#xff08;replica&#xff09;&#xff0c;基于zookeeper協調的分布式消息系統&#xff0c;它的最大的特性就是可以實時的處理大量數據以滿足各…

【LeetCode】242 . 有效的字母異位詞

242 . 有效的字母異位詞&#xff08;簡單&#xff09; 方法&#xff1a;哈希表 思路 首先判斷兩個字符串長度是否相等&#xff0c;不相等直接返回 false&#xff1b;接下來設置一個長度為26 的哈希表&#xff0c;分別對應26個小寫字母&#xff1b;遍歷兩個字符串&#xff0c;…

Go語言工程實踐之測試與Gin項目實踐

Go 語言并發編程 及 進階與依賴管理_軟工菜雞的博客-CSDN博客 03 測試 回歸測試一般是QA(質量保證)同學手動通過終端回歸一些固定的主流程場景 集成測試是對系統功能維度做測試驗證,通過服務暴露的某個接口,進行自動化測試 而單元測試開發階段&#xff0c;開發者對單獨的函數…

day-21 代碼隨想錄算法訓練營(19)二叉樹part07

530.二叉搜索樹的最小絕對差 思路一&#xff1a;二叉搜索樹的中序遍歷必為升序數組&#xff0c;加入數組后計算相鄰兩個數差值&#xff0c;即可求出最小絕對差 思路二&#xff1a;同樣的思路&#xff0c;中序遍歷&#xff0c;直接使用指針記錄上一個節點&#xff0c;同時更新…

KAFKA第二課之生產者(面試重點)

生產者學習 1.1 生產者消息發送流程 在消息發送的過程中&#xff0c;涉及到了兩個線程——main線程和Sender線程。在main線程中創建了一個雙端隊列RecordAccumulator。main線程將消息發送給RecordAccumulator&#xff0c;Sender線程不斷從RecordAccumulator中拉取消息發送到K…

03-基礎入門-搭建安全拓展

基礎入門-搭建安全拓展 1、涉及的知識點2、常見的問題3、web權限的設置4、演示案例-環境搭建&#xff08;1&#xff09;PHPinfo&#xff08;2&#xff09;wordpress&#xff08;3&#xff09;win7虛擬機上使用iis搭建網站&#xff08;4&#xff09;Windows Server 2003配置WEB站…

C#應用處理傳入參數 - 開源研究系列文章

今天介紹關于C#的程序傳入參數的處理例子。 程序的傳入參數應用比較普遍&#xff0c;特別是一個隨操作系統啟動的程序&#xff0c;需要設置程序啟動的時候不顯示主窗體&#xff0c;而是在后臺運行&#xff0c;于是就有了傳入參數問題&#xff0c;比如傳入/h或者/min等等。所以此…

YOLO v8目標跟蹤詳細解讀(二)

上一篇&#xff0c;結合代碼&#xff0c;我們詳細的介紹了YOLOV8目標跟蹤的Pipeline。大家應該對跟蹤的流程有了大致的了解&#xff0c;下面我們將對跟蹤中出現的卡爾曼濾波進行解讀。 1.卡爾曼濾波器介紹 卡爾曼濾波&#xff08;kalman Filtering&#xff09;是一種利用線性…

歐拉OS 使用 CentOS 7 yum repo

一、下載CentOS的repo的yum文件 任何基于CentOS的yum的repo 的url是這樣的&#xff1a; 但歐拉OS輸出這個變量為&#xff1a;openEuler 20.03 (LTS-SP3) 那明顯歐拉想要使用這個yum的url找不到這個版本&#xff0c; 所以直接講這個變量替換為 7, Centos 7的7 然后執行&…

wget 詳解

wget 詳解 wget 詳解基本用法&#xff1a;命令參數&#xff1a;遞歸下載&#xff1a;斷點續傳&#xff1a;限速下載&#xff1a;后臺下載&#xff1a; 示例 wget 詳解 wget&#xff08;Web Get&#xff09;是一個用于從網絡上下載文件的命令行工具&#xff0c;常用于在 Linux …

從零實戰SLAM-第七課(多視角幾何)

在七月算法報的班&#xff0c;老師講的蠻好。好記性不如爛筆頭&#xff0c;關鍵內容還是記錄一下吧&#xff0c;課程入口&#xff0c;感興趣的同學可以學習一下。 --------------------------------------------------------------------------------------------------------…

整型int溢出引起的crash

線上系統發生了crash&#xff0c;后發現是整型溢出。 1、初始化函數的偽代碼&#xff1a; init_mem(int count, int size){for(int i0; i<count; i)mem_list[i] i*size; # 溢出發生的地方} 2、問題分析&#xff1a; 原有的變量 i、size 為有符號的int類型&#xff0c;i…

設計模式--策略模式

目錄 一.場景 1.1場景 2.2 何時使用 2.3個人理解 二. 業務場景練習 2.1業務: 2.2具體實現 2.3思路 三.總結 3.1策略模式的特點&#xff1a; 3.2策略模式優點 3.3策略模式缺點 一.場景 1.1場景 許多相關的類僅僅是行為有異&#xff0c;也就是說業務代碼需要根據場景不…

Android數字價格變化的動畫效果的簡單實現

原理&#xff1a;使用ValueAnimator屬性動畫類實現&#xff0c;它通過值的改變手動設置對象的屬性值來實現動畫效果。直接貼代碼&#xff1a; public static void doNumberAnim(TextView tvPrice, float startNumber, float endNumber) {ValueAnimator animator ValueAnimato…

C語言中的 RSA加密和解密算法: 深度探索與實現

C語言中的 RSA加密和解密算法: 深度探索與實現 RSA加密算法是一種非對稱加密算法&#xff0c;即公開密鑰加密&#xff0c;私有密鑰解密。在公開密鑰加密和私有密鑰解密的過程中&#xff0c;密鑰是不同的&#xff0c;這是與其他加密算法的主要區別。RSA算法的安全性依賴于大數分…

ssm+mybatis無法給帶有下劃線屬性賦值問題

原因&#xff1a;mybaitis根據配置&#xff0c;將有下劃線的字段名改為了駝峰格式。 具體見&#xff1a;ssmmybatis無法給帶有下劃線屬性賦值問題&#xff0c;無法獲取數據庫帶下劃線的字段值 - 開發者博客 解決方式&#xff1a; 直接將實體類中的下劃線去掉返回值使用resul…