Jmeter BeanShell PreProcessor 引用jar包、java源文件、class文件

本文介绍了如何在JMeter中通过BeanShell PreProcessor引用java源文件、class文件以及jar包。首先,可以通过source()函数引用java源文件并调用其中的方法。其次,使用addClassPath()添加class文件目录,然后import相关类。对于jar包,将其放入lib/ext目录,直接导入所需包和类。文章还详细说明了从IDEA导出jar包到JMeter的过程,并给出了具体代码示例。在旧版本JMeter中可能会遇到Map和ArrayList参数化报错的问题,升级到新版本可解决。

1,引用java源文件:

source("java代码路径");

然后new一个源文件中的class进行方法的调用。

2,引用class文件:

addClassPath("class文件所在目录");

然后再import里面的类及方法即可;

3,引用jar包:

在“测试计划”中添加jar包文件路径,或者直接将jar包放在jmeter目录的lib/ext下,

然后直接引用jar包里的包及类方法即可;

示例(jar包方法):

java源文件如下:

package com.Header;
import java.util.*;

public class Sign {
    public static Map<String, String> getSign1(){
        Map<String, String> m = new HashMap<>();
        m.put("sign1", "this is sign1");
        m.put("sign2", "this is sign2");
        m.put("sign3", "this is sign3");
        return m;
    }
    public static ArrayList<String> getSign2(){
        ArrayList<String> mylist = new ArrayList<>();
        mylist.add("sign1");
        mylist.add("sign2");
        mylist.add("sign3");
        return mylist;
    }
    public static void main(String []args){
        Map<String, String> s = Sign.getSign1();
        System.out.println(s.get("sign1"));
        ArrayList<String> m = Sign.getSign2();
        System.out.println(m.get(2));
    }
}

步骤1::在idea中的file->Project Structure->Artifacts->点击“+”->选择JAR->“From modules with dependencies...”->选择Main Class->确定;

步骤2:点击Build->Build artifacts->选择build所用的类导出jar包;

步骤3:将jar包放到jmeter的lib/ext目录;

步骤4:添加线程组、http请求组件、响应断言、聚合报告、查看结果树等(略);

步骤5:添加Pre Processer->BeanShell PreProcessor;

在BeanShell中写入以下代码:

import java.util.*;
import com.Header.*;

public static String getTime(){
    Long t = new Date().getTime();
    return t.toString();
}

Map map_args = Sign.getSign1();
ArrayList list_args = Sign.getSign2();
vars.put("k_arg", map_args.get("sign1"));
vars.put("l_arg", list_args.get(2));
vars.put("_t", getTime());

步骤6:在配置请求参数中的url为http://www.baidu.com?msgid=${__Random(111111,999999,)}&karg=${k_arg}&larg=${l_arg}&_t=${_t};

发送请求即可,测试结果图如下:

 

PS:

1,关于老版本使用Map及ArrayList参数化报错问题,以上代码在老版本jmeter中报如下错误:

java.net.URISyntaxException: Illegal character in query at index 40: http://www.baidu.com?msgid=335822&karg=${k_arg}&larg=${l_arg}&_t=${_t}
    at java.net.URI$Parser.fail(Unknown Source)
    at java.net.URI$Parser.checkChars(Unknown Source)
    at java.net.URI$Parser.parseHierarchical(Unknown Source)
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at java.net.URL.toURI(Unknown Source)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:286)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1146)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1135)
    at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
    at java.lang.Thread.run(Unknown Source)

貌似老版本对这两种类型的数据不太兼容,升级到最新版本后错误消失,貌似跟什么泛型支持有关系,java新手不太懂。。。。、

2,在beanshell中定义Map方式为:Map map = new HashMap();//不能用 Map<String, String> map = new HashMap<>();

参考网址:

1,https://www.cnblogs.com/puresoul/articles/4949889.html

2,http://jmeter.apache.org/usermanual/component_reference.html#BeanShell_Sampler

内容概要:本文详细阐述了基于非线性反步法(Backstepping)与Lyapunov函数引导的模型预测控制(Lyapunov-MPC)相结合的自主水下航行器(AUV)轨迹跟踪控制策略,并完整集成了经典的Fossen水下航行器动力学模型。通过Matlab代码实现,精准复现了高水平期刊的研究成果,重点攻克了AUV在强非线性、强耦合及外部干扰复杂的海洋环境中实现高精度轨迹跟踪的技术难题。该方法充分发挥反步法在系统化构造控制器方面的优势,利用虚拟控制律逐层推进,并结合Lyapunov函数严格证明系统的全局渐近稳定性,同时引入MPC优化未来时域内的控制输入,有效处理系统约束,显著增强了控制器的鲁棒性与动态响应性能。; 适合人群:具备自动控制原理、非线性系统分析、现代控制理论基础,并熟练掌握Matlab/Simulink编程的研究生、博士生、科研人员及从事水下机器人、无人艇等复杂系统控制算法研发的工程技术人员。; 使用场景及目标:①深入研究并掌握非线性反步控制的设计思想、虚拟控制量构建方法及Lyapunov稳定性分析的核心技巧;②理解如何将Lyapunov稳定性判据与模型预测控制框架有机结合,实现稳定性与最优性的统一;③应用于自主水下航行器、无人潜航器(UUV)、水面无人艇(USV)等复杂动力学系统的高精度运动控制、路径跟踪与自主导航的算法开发与仿真验证;④作为撰写高水平学术论文或学位论文的理论与代码参考。; 阅读建议:建议读者首先深入理解Fossen动力学模型的物理意义与数学表达,然后循序渐进地分析控制器设计的每一步推导过程,重点关注虚拟控制律的选取、Lyapunov候选函数的构造以及MPC优化问题的建立与求解。务必动手调试提供的Matlab代码,结合Simulink进行可视化仿真,对比不同工况下的控制效果,以全面掌握该复合控制策略的精髓与实际应用要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值