壓測的過程中可能需要自己實現一些代碼邏輯,Jmeter提供BeanShell來輔助我們實現,但是對於BeanShell 來實現一些簡單的代碼比較方便,如果要實現一些復雜的邏輯(AES加密解密、生成用戶三要素等)就會顯得比較臃腫,而且不便於多項目共用,此時我們就需要考慮引入外部代碼,BeanShell 引入Java代碼常用使用到的主要是三種方式,.java,.class,.jar 三種類型的文件,下面介紹下如何通過BeanShell引入外部JAVA代碼;
1、引入之前我們先來實現一段代碼,該代碼主要是為了生成用戶姓名;
/** * @Author xxx * @Date 2020/6/16 14:00 */ public class UserName { private static String firstName = "趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張"; private static String girl = "秀娟英華慧巧美娜靜淑惠珠翠雅芝玉萍紅娥玲芬芳燕彩春菊蘭鳳"; private static String boy = "偉剛勇毅俊峰強軍平保東文輝力明永健世廣志義興良海山仁波寧貴"; public static int getNum(int start, int end) { return (int) (Math.random() * (end - start + 1) + start); } /** * 返回中文姓名 */ private static String name_sex = ""; public static String getUserName() { int index = getNum(0, firstName.length() - 1); String first = firstName.substring(index, index + 1); int sex = getNum(0, 1); String str = boy; int length = boy.length(); if (sex == 0) { str = girl; length = girl.length(); name_sex = "女"; } else { name_sex = "男"; } index = getNum(0, length - 1); String second = str.substring(index, index + 1); int hasThird = getNum(0, 1); String third = ""; if (hasThird == 1) { index = getNum(0, length - 1); third = str.substring(index, index + 1); } return first + second + third; } }
2、BeanShell引入.Java 文件:
- 在BeanShell中通過關鍵字【source】方法引入java文件,然后就可以使用該文件中的方法,具體調用方法和java一樣;
source("D:\\UserName.java"); // 引入java文件
String userName = new UserName().getUserName(); //調用UserName類中getUserName方法
log.info("=============" + userName + "============="); // 控制台日志輸出結果
測試結果展示:

但是通過source 引入java文件弊端在於每次引入只能引入單獨的文件,如果實現的東西比較多,管理起來比較麻煩,而且也不易於后期維護;
3、BeanShell引入.class 文件
- 首先我們需要通過編譯工具或者命令行的方式來把上述的文件編譯成為.class文件;
- 在BeanShell中通過關鍵字【addClassPath】引入 class文件,導入包及類,然后具體調用方法和java一樣;
addClassPath("D:\\");
import UserName; // 導入類
String userName = new UserName().getUserName(); //調用UserName類中getUserName方法
log.info("=============" + userName + "============="); // 控制台日志輸出結果
測試結果展示:

4、引入jar 文件
- 首先需要我們需要引入的代碼有組織的歸類,編譯成為jra文件;
- 然后將自定義的jar文件,存放在jmeter 中lib目錄下ext文件中,然后重新啟動Jmeter;
import com.cfilmcloud.data.UserName; String userName = UserName.getUserName(); // 生成用戶姓名 log.info("=============" + userName + "============="); // 控制台日志輸出結果
測試結果展示:

對比上述三種結果,其實引入的方式都很簡單,每次引入的方式都有自己的優勢和特定根據項目情況來選擇,例如實際項目中經常會使用到用戶的四要素,所以我把這類文件組織起來打包jar,便於共享和維護,根據自己習慣選擇對應的方式,我們的目標主要是為了解決一些問題。
