Jmeter 引入外部Java 文件(九)
压测的过程中可能需要自己实现一些代码逻辑,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,便于共享和维护,根据自己习惯选择对应的方式,我们的目标主要是为了解决一些问题。