使用 Java 讀寫 JMeter 中的變數
1. 使用Java寫入JMeter中的變數
1.1 需求
一個專案中有很多介面,起初儲存在JMeter中配置元件->自定義變數中,如下圖:
雖然有調整順序的功能,但是量大之後,查詢維護起來還是很麻煩。
1.2思路
將這些介面資訊放在excel中統一管理,如果有調整,直接編輯excel表格,排序、檢索方便,如下圖:
1.3環境準備
JMeter:5.0
JDK:1.8
Java編輯軟體:Eclipse MARS
1.4Java程式碼實現
1.4.1讀取表格資料
現將表格中的資料讀取到程式碼中,我這裡使用的是資料儲存,大家可以按照自己的習慣來寫,由於使用的是jxl.jar讀取excel表格,所以格式必須是xls字尾的,否則無法讀取,程式碼如下:
/*輸入流,宣告讀取變數is 用於讀取excel表格*/
InputStream is=null;
/*構建Workbook物件*/
Workbook workbook=null;
/*傳入path中描述的路徑,讀取到is中*/
is=new FileInputStream(path);
/*將is中讀取到的excel表格賦值給workbook*/
workbook=Workbook.getWorkbook(is);
/*宣告變數sheet,將workbook中的sheet名為sheetname的表格讀取到sheet中*/
Sheet sheet=workbook.getSheet("APIList");
/*宣告一個陣列,用於存放sheet中的值,長度根據sheet中的實際長度定義*/
String cases[][] = new String[sheet.getRows()][sheet.getColumns()];
/*通過兩層迴圈,將sheet中的資料讀取到陣列中*/
for(int i=0;i<sheet.getRows();i++){
for(int j=0;j<sheet.getColumns();j++){
/*宣告一個單元格變數,通過getCell(j,i)得到單元格中的值,讀取每列每行,getCell(j,i)前面的j是列,i是行*/
Cell cellA1=sheet.getCell(j,i);
/*如果當前單元格的格式是label(文字型別)型別的,就讀取到陣列中,注意:excel中所有內容需要儲存成文字型別,包括數字*/
if (cellA1.getType().equals(CellType.LABEL)){
/*獲取string型別單元格的資料*/
cases[i][j]=cellA1.getContents();
}
}
}
//將excel表關閉
workbook.close();
//將輸入流關閉
is.close();
1.4.2儲存到JMeter變數中
將讀取出的陣列cases,迴圈讀取到JMeter變數中,程式碼如下:
JMeterVariables vars = getVariables();
for(int i=1;i<cases.length;i++){
vars.put(cases[i][0],cases[i][1]);
}
1.4.3整體程式碼
完整方法程式碼如下:
public void import_apilist(String path) throws IOException, BiffException{
/*輸入流,宣告讀取變數is 用於讀取excel表格*/
InputStream is=null;
/*構建Workbook物件*/
Workbook workbook=null;
/*傳入filepath中描述的路徑,讀取到is中*/
is=new FileInputStream(path);
/*將is中讀取到的excel表格賦值給workbook*/
workbook=Workbook.getWorkbook(is);
/*宣告變數sheet,將workbook中的sheet名為sheetname的表格讀取到sheet中*/
Sheet sheet=workbook.getSheet("APIList");
/*宣告一個陣列,用於存放sheet中的值,長度根據sheet中的實際長度定義*/
String cases[][] = new String[sheet.getRows()][sheet.getColumns()];
/*通過兩層迴圈,將sheet中的資料讀取到陣列中*/
for(int i=0;i<sheet.getRows();i++){
for(int j=0;j<sheet.getColumns();j++){
/*宣告一個單元格變數,通過getCell(j,i)得到單元格中的值,讀取每列每行,getCell(j,i)前面的j是列,i是行*/
Cell cellA1=sheet.getCell(j,i);
/*如果當前單元格的格式是label(文字型別)型別的,就讀取到陣列中,注意:excel中所有內容需要儲存成文字型別,包括數字*/
if (cellA1.getType().equals(CellType.LABEL)){
/*獲取string型別單元格的資料*/
cases[i][j]=cellA1.getContents();
}
}
}
//將excel表關閉
workbook.close();
//將輸入流關閉
is.close();
JMeterVariables vars = getVariables();
for(int i=1;i<cases.length;i++){
//表格中一共三列,name,values,description,所以只將name和value讀入陣列,第0列一定是name,第1列是value
vars.put(cases[i][0],cases[i][1]);
}
}
說明:excel表中一共三列,第一列介面名稱(Name),第二列介面路徑(Values),第三列介面描述(Description),格式固定好。
1.4.4匯出為jar包
寫好後,需要匯出成jar包,來提供給JMeter使用,方法如下:
右鍵需要匯出的類名,選擇Export...,選擇匯出路徑後儲存,如下圖:
1.5JMeter呼叫
在JMeter呼叫時,有兩種方法,一直接把所需要的jar包,放在JMeter目錄中\lib\ext裡面,第二是將jar包放在某個地方,在計劃中新增,如下圖:
這裡需要匯入兩個包,一個讀取excel的包:jxl.jar,另一個是上面程式碼匯出的包,importAPI.jar
在呼叫時,新增一個BeanShell Sampler,寫程式碼呼叫,程式碼如下:
import jmeterjar.*;
importAPI a= new importAPI();
a.import_apilist("E:\\work\\project\\測試\\data\\data_base.xls");
如下圖:
說明:importAPI是解除安裝jmeterjar包下面的,所以引用的時候,需要匯入包中的類,這裡使用了星號匯入了所有類,如下圖:
在檢視結果樹中檢視結果:
到此,excel中的資料,已經匯入到了JMeter中,後續請求,使用${變數名}可以呼叫。
2.讀取JMeter中的變數,提供給Java程式碼使用
反過來,使用Java讀取JMeter中的變數,也是提供了介面,具體實現如下:
2.1Java程式碼實現
public String getJmeterV(String var){
JMeterVariables vars = getVariables();
String content = vars.get(var);
return content;
}
2.2JMeter呼叫
需要將JMeter中的變數名,當成字串傳入方法,如下圖:
需要jar包請 點選下載。
相關文章
- Java中的讀/寫鎖Java
- snap7讀寫PLC變數變數
- Concurrency(十五: Java中的讀寫鎖)Java
- Java - 可變引數的使用Java
- java中變數的作用域Java變數
- 『動善時』JMeter基礎 — 23、JMeter中使用“使用者自定義變數”實現引數化JMeter變數
- jmeter全域性變數和區域性變數JMeter變數
- Jmeter-全域性變數跨執行緒組使用JMeter變數執行緒
- Java入門系列-04-java中的變數Java變數
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- ReentrantReadWriteLock讀寫鎖及其在 RxCache 中的使用
- 自己對Java中if變數賦值的理解Java變數賦值
- 淺談Java中的鎖:Synchronized、重入鎖、讀寫鎖Javasynchronized
- Java併發(8)- 讀寫鎖中的效能之王:StampedLockJava
- 『動善時』JMeter基礎 — 19、JMeter配置元件【隨機變數】JMeter元件隨機變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- jmeter使用問題——將介面返回變數儲存成csv檔案JMeter變數
- Java中讀取配置檔案中的內容,並將其賦值給靜態變數的方法Java賦值變數
- 精讀《如何在 nodejs 使用環境變數》NodeJS變數
- 執行緒組之間的JMeter傳遞變數執行緒JMeter變數
- java變數Java變數
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- Java讀寫鎖ReadWriteLockJava
- Java中使用新NIO.2讀寫檔案Java
- c++中的變數型別_C ++中的變數C++變數型別
- 執行緒間通訊就是讀寫同一個變數執行緒變數
- MySQL變數的使用MySql變數
- go 的變數使用Go變數
- 變數的基本使用變數
- Java中的讀寫鎖ReentrantReadWriteLock詳解,存在一個小缺陷Java
- js檔案中如何讀取app.ux中的全域性變數JSAPPUX變數
- 利用Java處理Jmeter介面常用引數JavaJMeter
- 一文搞清楚Java中的方法、常量、變數、引數Java變數
- Java中的逆變與協變Java
- 『動善時』JMeter基礎 — 24、JMeter中使用“使用者引數”實現引數化JMeter
- java類變數Java變數
- JS中的變數JS變數