Jmeter书中不会教你的(40)——在beanshell中引入java文件

本文介绍了如何在Beanshell脚本中引入外部Java类文件,以便调用预定义的方法。通过使用关键字`source`加载Java源文件,然后直接使用类名和方法名来调用处理字符串的方法,例如处理逗号和双引号。这种方法在需要复用已有Java代码的场景下非常有用,简化了Beanshell脚本的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        上一节中讲了在beanshell中直接写java代码使用,如果开发人员跟你说有个现成的处理逗号双引号的方法,你只需要把要处理的字符串传给他就行了,那咋整?

        今天要说的一种方法是开发人员可以直接提供这个方法的java文件,我们在beanshell中引入这个java文件就可以调用他的方法了。

        比如说上一节中这个处理逗号双引号的方法,在eclipse中新建一个名为specialProcess的java文件,默认class就是这个名字,在这个类下编写一个名为specialPr的方法,接收参数为pd

 有了这个java文件,我们在beanshell中进行加载,通过beanshell的关键字source加载源码,source(),括号中可以是绝对路径也可以是相对路径,不知道的同学可以去参考

Jmeter书中不会教你的(35)——相对路径和绝对路径_agrapea的博客-优快云博客

source("specialProcess.java");

加载好源文件后可以直接使用   类名.方法名(参数),将处理后的字符串赋值给新的变量,用新的变量值写入csv文件

String pd1=specialProcess.specialPr("${priceDetail_1}");

完整代码如下,大家可以和上一节中直接写方法的对比下,多思考想要解决什么问题,再去找解决方案


//在beanshell中引入本地java文件
//通过beanshell的关键字source加载源码
source("specialProcess.java");



//定义一个写入csv文件的地址
//String filePath1 = "D://xntest//result.csv";
String filePath1 ="${filePath1}";
//创建类对象sp
//specialProcess sp=new specialProcess();
//String pd1=sp.specialProcess("${priceDetail_1}");
//String pd2=sp.specialProcess("${priceDetail_2}");


String pd1=specialProcess.specialPr("${priceDetail_1}");
String pd2=specialProcess.specialPr("${priceDetail_2}");




//创建写入对象
FileWriter fw=new FileWriter(filePath1,true);
BufferedWriter bw=new BufferedWriter(fw);
//读取csv文件字段值,写入result.csv,逗号表示字段间的分隔符,需要用英文逗号
bw.write("${originprovince}"+",");
bw.write("${origincity}"+",");
bw.write("${origindistrict}"+",");
bw.write("${destprovince}"+",");
bw.write("${descity}"+",");
bw.write("${desdistrict}"+",");


//将查询时效的提取值写入
bw.write("${reachTime_1}"+",");
//bw.write("${priceDetail_1}"+",");
bw.write(pd1+",");
bw.write("${reachTime_2}"+",");
//最后一个字段写入后需要用换行符\n
//bw.write("${priceDetail_2}"+"\n");
bw.write(pd2+"\n");
bw.flush();
fw.close();

### Beanshell后置处理器简介 Beanshell后置处理器是JMeter中的一个重要工具,用于在HTTP请求完成后对响应数据进行进一步处理。它可以显著增强测试脚本的功能性和灵活性[^3]。 ### 如何添加Beanshell后置处理器 为了使用Beanshell后置处理器,在JMeter中需要先将其添加至指定的采样器下。操作过程如下: 1. 右键点击目标线程组下的任意采样器; 2. 依次选择 `Add` -> `Post Processors` -> `BeanShell PostProcessor` 来完成添加动作[^2]。 ### 基础语法与示例代码 Beanshell支持大部分标准Java语法规则,因此熟悉Java编程的人能够快速上手。以下是几个常见的应用场景及其对应的代码片段: #### 场景一:打印响应内容 当希望查看服务器返回的具体消息时,可以通过以下方式实现: ```java import org.apache.jmeter.samplers.SampleResult; SampleResult res = prev; log.info(res.getResponseDataAsString()); ``` 此段代码会将前序请求所获得的结果记录到日志文件当中以便后续分析[^1]。 #### 场景二:验证特定字段是否存在 假设我们需要确认某个JSON对象内部是否包含预期的关键字,则可以采用类似下面的方法来进行校验: ```java String jsonResponse = prev.getResponseDataAsString(); if (jsonResponse.contains("expectedKeyword")) { log.info("Expected keyword found!"); } else { throw new RuntimeException("Missing expected keyword"); } ``` 上述例子展示了如何利用字符串匹配技术检测关键字的存在状态,并据此决定继续流程还是中断运行[^4]。 #### 场景三:动态设置变量值 有时候可能需要基于当前请求的实际反馈调整某些参数或者标志位的状态,这时就可以借助于setVariable()函数达成目的: ```java vars.put("dynamicVar", "newValue"); // 或者读取已存在的全局属性再做修改后再保存回去 String oldValue = vars.get("existingGlobalAttr"); int updatedValue = Integer.parseInt(oldValue) + 10; vars.put("updatedCounter", String.valueOf(updatedValue)); ``` 这里介绍了两种不同的设定新变量的方式——直接赋初值以及通过对已有数值计算得出的新结果重新绑定名称的过程。 ### 注意事项 尽管Beanshell提供了极大的自由度给开发者去定制化自己的需求解决方案,但也正因为如此其潜在风险不容忽视。务必小心谨慎对待每一行编写的逻辑以免引入难以追踪定位的问题;另外考虑到性能因素,在大规模并发环境下应尽量减少复杂运算量较大的自定义脚本执行次数以保障整体效率不受影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

agrapea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值