使用 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
- JAVA介面中的變數Java變數
- snap7讀寫PLC變數變數
- Java中檔案的讀寫操作Java
- Jmeter屬性和變數JMeter變數
- java中變數的作用域Java變數
- Java - 可變引數的使用Java
- jmeter全域性變數和區域性變數JMeter變數
- 『動善時』JMeter基礎 — 23、JMeter中使用“使用者自定義變數”實現引數化JMeter變數
- SQL server中的日期變數縮寫SQLServer變數
- Concurrency(十五: Java中的讀寫鎖)Java
- Jmeter-全域性變數跨執行緒組使用JMeter變數執行緒
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- Java入門系列-04-java中的變數Java變數
- Java使用讀寫鎖替代同步鎖Java
- 『動善時』JMeter基礎 — 19、JMeter配置元件【隨機變數】JMeter元件隨機變數
- 自己對Java中if變數賦值的理解Java變數賦值
- 4、在Shell程式中的使用變數變數
- angular中定義全域性變數及全域性變數的使用Angular變數
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- Java中的類(好似結構體) 物件(好似指標變數)變數 方法Java結構體物件指標變數
- jmeter使用問題——將介面返回變數儲存成csv檔案JMeter變數
- 淺談Java中的鎖:Synchronized、重入鎖、讀寫鎖Javasynchronized
- Java併發(8)- 讀寫鎖中的效能之王:StampedLockJava
- 執行緒組之間的JMeter傳遞變數執行緒JMeter變數
- Java靜態變數塊使用案例Java變數
- JAVA讀寫excelJavaExcel
- java 讀寫cookieJavaCookie
- Java中讀取配置檔案中的內容,並將其賦值給靜態變數的方法Java賦值變數
- c++中的變數型別_C ++中的變數C++變數型別
- Java中的兩個特殊變數this和super (轉)Java變數
- js中變數和jsp中java程式碼中變數互相訪問解決方案JS變數Java
- java變數Java變數
- Java 併發包中的讀寫鎖及其實現分析Java
- Android中全域性變數與區域性變數的使用總結Android變數
- JS中的變數JS變數
- awk中的變數變數
- js檔案中如何讀取app.ux中的全域性變數JSAPPUX變數