JMETER與BeanShell
變數
Beanshell應用自定義變數有兩種方法:
#第一種方法,使用${key}格式,但是需要注意這是用應用的變數是沒有定義數據類型的 #log.info(String Key)只能列印字元串,所以按下述寫法會報錯 name = ${name}; log.info(name); #需要改成 name1 = "${name}"; log.info(name1);
#第二種使用vars.get(String key),這裡需要注意應用的變數需要加上引號 name3 = vars.get("name");
把變數A賦值給變數B
#這時候+號拼接完就是字元串了 int a = 123; b = "abc" + a; log.info(b); #注意put賦值給的變數需要加上引號vars.put(String key,String value) vars.put("c",b); log.info(vars.get("c"));
區別:
${key}
引用的都是最開始設置的自定義變數。vars.get
會獲取最新變數
name = "${name}"; vars.put("name",name + 123); log.info("vars.get獲取變數:" + vars.get("name")); // vars.get獲取變數:xiaojianjian123 log.info("${}獲取變數:" + "${name}") // ${}獲取變數:xiaojianjian
實例:
我們現在有一個自定義變數設置在執行緒組裡,cnt初始值為0,循環10次,每次循環我們需要讓cnt+1
cnt = "${cnt}"; nextCnt = Integer.parseInt(cnt) +1; log.info("第一種整型轉字元串:" + nextCnt.toString()); //log.info("第二種整型轉字元串:" + String.valueOf(nextCnt)); vars.put("cnt",nextCnt.toString())
這裡我們需要將字元串先轉數字,再將數字轉回字元串
這裡要特別注意:
寫BeanShell的時候不要使用Debug sampler,因為Debug sampler會再次調用一次BeanShell造成錯誤多次計算,正式運行的時候記得禁用Debug sampler
跨執行緒取值
A執行緒擁有一個用戶自定義變數,這是B執行緒使用vars.get
同樣可以取到值,但是如果實在A執行緒的BeanShell
中設置的變數用vars
就取不到了
//BeanShellTestElement: null002 取上一個執行緒的BeanShell變數 name = vars.get("name"); log.info(name+"002");
//BeanShellTestElement: xiaojianjian001002 取上一個執行緒的用戶自定義變數 name = vars.get("name"); log.info(name+"002");
那如果要取上一個執行緒的BeanShell變數就需要用props
//A執行緒 name = "xiaojianjian"; props.put("name1",name); //B執行緒 BeanShellTestElement: xiaojianjian002 name = props.get("name1"); log.info(name+"002");
通過使用假介面來將腳本簡化
安裝JMETER插件Dummy Sampler
有了這個模擬器後,就可以根據它代替很多真實介面
那我們有了介面同樣可以通過BeanShell去獲取它的請求和響應
在介面下添加一個BeanShell後置處理器(以上面Dummy的取樣器為例子)
// print request data log.info(prev.getSamplerData()); // //www.123321.com // print response data log.info(prev.getResponseDataAsString()); // {"data":1} // print response code log.info(prev.getResponseCode()); //200
條件判斷
與其他語言類似
1)比較相等用equals、==、!=
2)比較大小用>、<、>=、<=
3) 包含關係contains
// 判斷狀態碼是否為200 resCode = prev.getResponseCode(); log.info("響應碼:"+resCode); if (resCode.equals("200")){ log.info("請求成功"); } else{ log.info("請求失敗"); }
// age1是之前的介面提取出來的變數 age = vars.get("age1"); log.info(age); if (Integer.parseInt(age) > 14){ log.info("已經不是小孩子:"+age); } else{ log.info("年齡小於14" + age); }
age = vars.get("age1"); if (!age.contains("1")){ log.info("不包括1"); } else{ log.info("包括1"); }
對list的相關操作
// 對於list的操作 import java.util.List; import java.util.ArrayList;
創建一個list
// 創建一個list List list1 = new ArrayList();
// 添加元素:add list1.add("first"); // 在指定位置插入元素 list1.add(0,"l am the first"); log.info("添加後"+list1); // 添加後[l am the first, first]
除了使用add我們還可以使用addAll的方法
// 創建一個list2 List list2 = new ArrayList(); // 把list1所有的元素添加到list2中,成功同時返回True,失敗返回False,addAll(index,list); Boolean isAdd = list2.addAll(0,list1); log.info("是否加入成功:"+ isAdd + " 加入後的list2"+list2); //是否加入成功:true 加入後的list2[l am the first, first]
根據索引找值,根據值返回第一個匹配到索引
// 獲取list中的值 value1 = list2.get(0); log.info(value1); // l am the first // 獲取list中值對應的第一個索引 List list3 = new ArrayList(); list3.add(1); list3.add(2); list3.add(1); log.info(list3.indexOf(1).toString()); // 0
返回list的長度
//返回list長度 log.info(list3.size().toString()); // 3
循環list取值
//for循環取值 for(int i=0 ; i < list3.size();i++){ log.info(list3.get(i).toString()); }
友情鏈接:
//www.cnblogs.com/yetangjian/p/16818697.html