一、调用Java文件
1、编写测试用的java类
- 工具类为计算两数之和
package jmeter.utils.css;
public class CssSum {
/**
* 计算两数之和
* @param a
* @param b
* @return
*/
public int csssum(int a, int b){
int sum = a + b;
System.out.println(sum);
return sum;
}
2、beanshell取样器中引入并调用
- beanshell取样器中编写如下代码
//引入java文件,参数是java文件的路径
source("F:\\apache-jmeter-5.1.1\\CssSum.java");
//定义两个参数a和b,并且初始化
int a = 1;
int b = 2;
//new一个CssSum对象test
CssSum test = new CssSum();
//定义一个int类型的sum,调用csssum方法,入参是a和b
int sum = test.csssum(a, b);
//toString()方法将非String类型的变量转换成String。不然无法打印
log.error(sum.toString());
- 调用结果如图所示。说明java文件调用成功
二、调用class文件
1、编写测试类
package css.test.jmeter;
public class TestSum {
/**
* 无入参,直接调用
* @return
*/
public int testsum(int a, int b) {
int sum = a + b;
System.out.println("计算和");
return sum;
}
}
- 将测试类编译成class文件,保存在/Users/css/Desktop/apache-jmeter-5.1.1/src/css/test/jmeter 路径下
2、beanshell取样器中引入并调用
//在beanshell中调用class文件
//通过beanshell的关键字addClassPath
//这里的路径不能包含包名,比如包名是package css.test.jmeter;路径只需要写到css的前一级。但是对应的class文件必须按照css.test.jmeter的层级去放
addClassPath("/Users/css/Desktop/apache-jmeter-5.1.1/src");
//import导入类名
import css.test.jmeter.TestSum;
int a = 11;
int b = 2;
TestSum test = new TestSum();
int sum = test.testsum(a, b);
log.error(sum.toString());
【注意】macos上此处有大坑
- 这里有一个大坑,调用class文件时:addClassPath()方法中的路径,在macos上不能写成文件的绝对路径。这个路径只能写到包名的前一级,不能包含包名。
- 如果拿到的是一个单独的class文件,一定要反编译,检查包名,将这个class文件的包名层级新建出来,再将class文件放进去
- 如果写了绝对路径,报错如下:
Typed variable declaration : Class: TestSum not found in namespace
- 同样的,调用java文件时,source()里面必须填完整的绝对路径(精确到文件名)。并且绝对路径中要包含包名,不然也会报错。
- 比如package css.test.jmeter。必须将这个java文件放在dir/css/test/jmeter下。其中dir为任意路径。
【以上总结】
macox系统上class和java文件放的路径要包含包名
三、调用jar包
1、编写测试类并且成jar包
package css.test.jmeter;
public class TestSum {
/**
* 无入参,直接调用
* @return
*/
public int testsum(int a, int b) {
int sum = a + b;
System.out.println("计算和");
return sum;
}
2、将这个文件打成jar包
- 打包方法参考可以参考另一篇博客https://blog.csdn.net/sicychen/article/details/132675038?spm=1001.2014.3001.5502
- 由于这个jar包是没有main方法的,所以打包的时候有一点不同,见下图。
3、引用jar包
- 引用jar有两种方式,一种是通过jmeter测试计划添加,一种是将jar包加入到jmeter的lib/ext文件夹中
(1)通过测试计划添加
- 将jar包的路径添加测试计划中,如图:
(2)将jar包放在jmeter的lib/ext文件夹下
- 如图所示
4、编写beanshell脚本调用
//导入类。格式为import 包名.类名
import css.test.jmeter.TestSum;
int a = 11;
int b = 22;
//new一个CssSum对象test
TestSum test = new TestSum();
int sum = test.testsum(a, b);
//toString()方法将非String类型的变量转换成String。不然无法打印
log.error(sum.toString());
- 导入格式:import 包名.类名
包名通过原始的java文件中的package 包名来看(而非jar包名称)
- 调用java程序可以通过以上三种方法执行。
关于beanshell取样器中的String parameters和String []bsh.args
- beanshell取样器中的入参:
- 使用示例,脚本如下:
//获取参数传递过来的值并存入变量。存储在在bsh.args[]数组中
log.info("第一个传入的参数:"+bsh.args[0]);
log.info("第二个传入的参数:"+bsh.args[1]);
log.info("第三个传入的参数:"+bsh.args[2]);
log.error("参数集合为:"+Parameters);
//这个示例中一共传入"1" "2" "3" "4" 4个元素
//下面调用以下这几个参数
//导入类。格式为import 包名.类名
import css.test.jmeter.TestSum;
//new一个CssSum对象test
TestSum test = new TestSum();
//Integer.valueOf()将String转换成int类型。因为定义的sum是int类型,如果不转换会报错。
int sum = test.testsum(Integer.valueOf(bsh.args[0]),Integer.valueOf(bsh.args[1]));
//toString()方法将非String类型的变量转换成String。不然无法打印
log.error(sum.toString());
- 传参的时候,默认传的String类型,多个参数之间用空格隔开。如图中的1 2 3 4
- 其中bsh.args[0]可以访问参数数组中索引为0的参数,通过循环或者修改索引可以访问其他的参数
- 其中Parameters内容是所有的传参,打印出来如图:
- 为参数传递提供一种思路:这里的参数传的时候还可以传用户自定义的参数或者线程中已经存在的参数,比如用户自定义参数"user" = “test”,这里可以传${user}。
Integer.valueOf()
- 将String转换成int类型
toString()
- 将其他类型转换成String类型