beanshell编程之jmeter调用java程序-java文件,class文件和jar包。包含macos避坑

一、调用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文件调用成功

image.png

二、调用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

image.png

  • 同样的,调用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包

image.png

3、引用jar包

  • 引用jar有两种方式,一种是通过jmeter测试计划添加,一种是将jar包加入到jmeter的lib/ext文件夹中

(1)通过测试计划添加

  • 将jar包的路径添加测试计划中,如图:

image.png

(2)将jar包放在jmeter的lib/ext文件夹下

  • 如图所示

image.png

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包名称)
image.png

  • 调用java程序可以通过以上三种方法执行。

关于beanshell取样器中的String parameters和String []bsh.args

  • beanshell取样器中的入参:

image.png

  • 使用示例,脚本如下:
//获取参数传递过来的值并存入变量。存储在在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内容是所有的传参,打印出来如图:

image.png

  • 为参数传递提供一种思路:这里的参数传的时候还可以传用户自定义的参数或者线程中已经存在的参数,比如用户自定义参数"user" = “test”,这里可以传${user}。

image.png

Integer.valueOf()
  • 将String转换成int类型
toString()
  • 将其他类型转换成String类型
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值