Jmeter進階使用:BeanShell實現接口前置和后置操作

一、背景

我們使用Jmeter做壓力測試或者接口測試時,除了最簡單的直接對接口發起請求,很多時候需要對接口進行一些前置操作:比如提前生成測試數據,以及一些后置操作:比如提取接口響應內容中的某個字段的值。舉個最常用的例子:

會員注冊接口:需要使用電話號碼作為入參,電話號碼不能重復,注冊接口需要添加前置操作生成不重復的電話號碼。

注冊成功后:需要從接口返回的內容中,提取注冊生成的用戶ID的值,作為后續其他接口操作的入參。

要實現以上的需求,有多種方式,比如:

函數助手生成隨機數;

手動在excel表中準備好足夠多的號碼,通過添加配置元件CSV data set config來獲取(不推薦);

正則表達式提取值;

通過BeanShell編碼實現;

本文主要給大家講解如何通過BeanShell編碼實現,該方法可擴展性強。掌握之后,你會發現很多場景都可以通過編寫相應的編碼來實現,一通百通。

二、BeanShell生成不重復的電話號碼

Sampler前面加一個前置處理器BeanShellPreProcessor:

BeanShell PreProcessor的內容為:

代碼內容:

//獲取指定范圍111-199間的隨機數作為電話號碼的前綴
long phoneTitle=${__Random(111,199,)};
String phoneTitleValue=phoneTitle.toString();
log.info(phoneTitleValue.toString());//當前時間戳,比如:1649038001761,除100000,得到一個8位的時間戳數字。
long num1 = ${__time(/100000,)};
log.info(num1.toString());
//取1個[1,100000]的隨機數字,有極低的概率重復
long num2 = ${__Random(1,100000,)};
log.info(num2.toString());
//num1+num2生成1個新的8位的數值
long num = num1+num2;//通過時間戳值的變化+隨機數字生成新的隨機值、前面再拼接隨機的電話號碼前綴
//生成一個不會重復的電話號碼
String phoneValue=phoneTitleValue+num.toString();
//存為變量phone,供后面的接口使用
vars.put("phone",phoneValue);

每一行我都加了相應的注釋,方便理解該行代碼的作用,應該已經非常好理解了。

接口請求中使用定義好的變量phone:

查看接口效果:

三、BeanShell 從響應結果中提取內容

先在接口Sampler上右鍵,添加后置處理器BeanShell Post Processor:

假設接口返回內容為:
{“code”:“0000”,“msg”:“”,“data”:{“userId”:111111,“phone”:“12011111111”,“cardNo”:“8000000000”}}?

{"code":"0000","msg":"","data":{"userId":111111,"phone":"12011111111","cardNo":"8000000000"}
}

BeanShell Post Processor腳本代碼內容:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;//獲取響應內容
vars.put("reponseContent",prev.getResponseDataAsString());
//獲取響應code
vars.put("reponseCode",prev.getResponseCode());//獲取響應內容,String類型存儲
String resjson=prev.getResponseDataAsString();
log.info(resjson);
//轉為Json對象
JSONObject jso=JSONObject.parseObject(resjson);
//從對象中獲取code的值
String codeValue=jso.getString("code");
log.info(codeValue);
//從對象中獲取子的Json對象data
JSONObject data=jso.getJSONObject("data");
log.info(data.toString());
//獲取子的Json對象data中的userId的值
String useridValue=data.getString("userId");
log.info(useridValue);
//將獲取到的userId的值存為變量userid,供后面的接口使用
vars.put("userid",useridValue);

每一行我都加了相應的注釋,方便理解該行代碼的作用,應該已經非常好理解了。

運行請求,Jmeter運行日志中可以看到各個值都成功獲取到了:

后面的接口使用BeanShell Post Processor腳本中定義好的變量userid:

總結:BeanShell代碼和Java代碼非常相似,有Java編程基礎的同學可以快速的上手,通過編碼的方式可以很好的擴展我們需要的功能,也是Jmeter進階使用的必學必會知識之一 ~

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:【文末領取】


? ? ?【下面是我整理的2023年最全的軟件測試工程師學習知識架構體系圖+全套資料】


一、Python編程入門到精通

二、接口自動化項目實戰??

三、Web自動化項目實戰


四、App自動化項目實戰??

五、一線大廠簡歷


六、測試開發DevOps體系??

七、常用自動化測試工具

八、JMeter性能測試??

九、軟件測試全套資料

十、總結(文末尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!

生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!

只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!???

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

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

相關文章

c語言——拷貝數組

這段代碼是一個簡單的數組拷貝示例。它的功能是將一個原始數組 original 的內容拷貝到另一個數組 copied 中,并輸出兩個數組的元素。 代碼執行過程如下: 首先,在 main() 函數中定義了一個整型數組 original,并初始化了它的元素。…

【ARM 嵌入式 編譯 Makefile 系列 15 - Makefile define 宏與調用宏函數詳細介紹】

文章目錄 Makefile define 宏與調用宏函數帶參數的宏函數帶返回值的宏函數Makefile define 宏與調用宏函數 在Makefile中,可以通過define關鍵字來定義一個多行的宏(也稱為變量)。這種宏定義通常用于定義一個復雜的命令序列,然后在其他地方調用。 以下是定義一個宏的例子:…

物聯網在制造業中的應用

制造業目前正在經歷第四次工業革命,物聯網、人工智能和機器人等技術進步正在推動行業的發展。研究表明,到2024年,全球制造商將在物聯網解決方案上投資700億美元,許多制造商正在實施物聯網設備,以利用預測性維護和復雜的…

接口測試工具——Postman測試工具 Swagger接口測試+SpringBoot整合 JMeter高并發測試工具

目錄 Postman測試工具接口測試工具swaggerKnife4j1.引入依賴2.配置3.常用注解4.接口測試 JMeter什么是JMeter?JMeter安裝配置1.官網下載2.下載后解壓3.漢語設置 JMeter的使用方法1.新建線程組2.設置參數3.添加取樣器4.設置參數:協議,ip,端口…

SDK是什么,SDK和API有什么區別

SDK(Software Development Kit)是一種開發工具包,通常由軟件開發公司或平臺提供,用于幫助開發人員構建、測試和集成特定平臺或軟件的應用程序。SDK 包含一系列的庫、工具、示例代碼和文檔,旨在簡化開發過程并提供所需的…

基于Mysql+Vue+Django的協同過濾和內容推薦算法的智能音樂推薦系統——深度學習算法應用(含全部工程源碼)+數據集

目錄 前言總體設計系統整體結構圖系統流程圖 運行環境Python 環境MySQL環境VUE環境 模塊實現1. 數據請求和儲存2. 數據處理計算歌曲、歌手、用戶相似度計算用戶推薦集 3. 數據存儲與后臺4. 數據展示 系統測試工程源代碼下載其它資料下載 前言 本項目以豐富的網易云音樂數據為基…

SQLSERVER 查詢語句加with (NOLOCK) 報ORDER BY 報錯 除非另外還指定了 TOP、OFFSET 或 FOR XML

最近有一個項目在客戶使用時發現死鎖問題,用的數據庫是SQLSERVER ,死鎖的原因是有的客戶經常去點報表,報表查詢時間又慢,然后又有人在做單導致了死鎖,然后主管要我們用SQLSERVER查詢時要加with (NOLOCK),但是我在加完 …

YOLOv5模型訓練流程

此文章只是記錄使用,以便后續查看,不作為教程,剛接觸,可能有錯誤 YOLOv5模型訓練流程 一、數據集的準備 1.在源碼根目錄新建mydata文件夾,在此文件夾下新建images和labels文件夾 目錄樹如下: ├───…

鏈表---

題目描述 一個學校里老師要將班上 N 個同學排成一列,同學被編號為 1~N,他采取如下的方法: 先將 11 號同學安排進隊列,這時隊列中只有他一個人; 2~N 號同學依次入列,編號為 i 的同學入列方式為&#xff…

2023骨傳導耳機推薦,適合運動骨傳導耳機推薦

相信很多人跟我一樣,隨著現在五花八門的耳機品種增多,選耳機的時候真是眼花繚亂,尤其還是網購,只能看,不能試,所以選擇起來比較困難, 作為一個運動達人,為了讓大家在購買耳機時少走彎…

〔012〕Stable Diffusion 之 中文提示詞自動翻譯插件 篇

? 目錄 🎈 翻譯插件🎈 下載谷歌翻譯🎈 谷歌翻譯使用方法🎈 谷歌翻譯使用效果 🎈 翻譯插件 在插件列表中搜索 Prompt Translator可以看到有2個插件選項:一個是基于谷歌翻譯 〔推薦〕、一個基于百度和deepl…

jvm從入門到精通

jvm 1.jvm與java體系結構???????

奧威BI財務數據分析方案:借BI之利,成就智能財務分析

隨著智能技術的發展,各行各業都走上借助智能技術高效運作道路,財務數據分析也不例外。借助BI商業智能技術能夠讓財務數據分析更高效、便捷、直觀立體,也更有助于發揮財務數據分析作為企業經營管理健康晴雨表的作用。隨著BI財務數據分析經驗的…

【RP2040】香瓜樹莓派RP2040之新建工程

本文最后修改時間:2022年09月05日 11:02 一、本節簡介 本節介紹如何新建一個自己的工程。 二、實驗平臺 1、硬件平臺 1)樹莓派pico開發板 ①樹莓派pico開發板*2 ②micro usb數據線*2 2)電腦 2、軟件平臺 1)VS CODE 三、版…

【C++】一文帶你初識C++繼承

食用指南:本文在有C基礎的情況下食用更佳 🍀本文前置知識: C類 ??今日夜電波:napori—Vaundy 1:21 ━━━━━━?💟──────── 3:23 …

CSS中的calc()函數有什么作用?

聚沙成塔每天進步一點點 ? 專欄簡介? CSS中的calc()函數及其作用? 作用? 示例1. 動態計算寬度:2. 響應式布局:3. 自適應字體大小:4. 計算間距: ? 寫在最后 ? 專欄簡介 前端入門之旅:探索Web開發的奇妙世界 記得點…

KCC@廣州開源讀書會廣州開源建設討論會

親愛的開源讀書會朋友們, 在下個周末我們將舉辦一場令人激動的線下讀書會,探討兩本引人入勝的新書《只是為了好玩》和《開源之迷》。作為一個致力于推廣開源精神和技術創新的社區,這次我們還邀請了圈內大咖前來參與,會給大家提供一…

軟件測試技術之單元測試—工程師 Style 的測試方法(3)

如何設計單元測試? 單元測試設計方法 單元測試用例,和普通測試用例的設計,沒有太多不同,常見的就是等價類劃分、邊界值分析等。而測試用例的設計其實也是開發者應該掌握的基本技能。 等價類劃分 把所有輸入劃分為若干分類&…

[UE4][C++]使用qrencode動態生成二維碼

一、使用CMake編譯x64版本qrencode 下載地址 GitHub - fukuchi/libqrencode: A fast and compact QR Code encoding libraryA fast and compact QR Code encoding library. Contribute to fukuchi/libqrencode development by creating an account on GitHub.https://github.…

2023/08/13_______JVM(CG)垃圾回收 算法(復制算法,標記清除,標記清除壓縮)

JVM GC算法 復制算法 1,每一次GC都會將伊甸(Eden)活的對象移到幸存區中:一旦Eden區被GC后 就會是空 只要有內容就是from區 誰空誰是to區 內存會從 伊甸->幸存區to->幸存from(這個時候to和from交換區域&#xf…