性能测试工具 Jmeter 引入 jar 包踩过的坑

紫晶 · 2017年05月23日 · 最后由 tester_wang 回复于 2018年12月19日 · 5929 次阅读

Jmeter 中调用自己编写 jar 中的类出错

自己编写 Java 类打 jar 包,并将 jar 包放置到 Jmeter/lib/ext/目录下,启动 Jmeter,并在 Jmeter 中编写脚本调用 jar 包中的类,执行脚本出现以下问题:

错误日志:

2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: Running the test! 
2017/01/12 17:29:17 INFO  - jmeter.samplers.SampleEvent: List of sample_variables: [] 
2017/01/12 17:29:17 INFO  - jmeter.testelement.TestPlan: add D:\Tool\Jmeter\apache-jmeter-3.0\lib\ext\uaastool.jar to classpath 
2017/01/12 17:29:17 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(true,*local*) 
2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: Starting ThreadGroup: 1 : getChallenge 
2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group getChallenge. 
2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: Thread will continue on error 
2017/01/12 17:29:17 INFO  - jmeter.threads.ThreadGroup: Starting thread group number 1 threads 1 ramp-up 1 perThread 1000.0 delayedStart=false 
2017/01/12 17:29:17 INFO  - jmeter.threads.ThreadGroup: Started thread group number 1 
2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: All thread groups have been started 
2017/01/12 17:29:17 INFO  - jmeter.threads.JMeterThread: Thread started: getChallenge 1-1 
2017/01/12 17:29:17 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval   Sourced file: inline evaluation of: `` String challenge = vars.get("challenge"); String response = com.uaastool.UaasTo . . . '' : Typed variable declaration : Class: com.uaastool.UaasTool.UaasTool not found in namespace 
2017/01/12 17:29:17 WARN  - jmeter.modifiers.BeanShellPreProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Sourced file: inline evaluation of: `` String challenge = vars.get("challenge"); String response = com.uaastool.UaasTo . . . '' : Typed variable declaration : Class: com.uaastool.UaasTool.UaasTool not found in namespace 
2017/01/12 17:29:17 INFO  - jmeter.threads.JMeterThread: Thread is done: getChallenge 1-1 
2017/01/12 17:29:17 INFO  - jmeter.threads.JMeterThread: Thread finished: getChallenge 1-1 
2017/01/12 17:29:17 INFO  - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test 
2017/01/12 17:29:17 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(false,*local*) 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: Running the test! 
2017/01/12 17:30:09 INFO  - jmeter.samplers.SampleEvent: List of sample_variables: [] 
2017/01/12 17:30:09 INFO  - jmeter.testelement.TestPlan: add D:\Tool\Jmeter\apache-jmeter-3.0\lib\ext\uaastool.jar to classpath 
2017/01/12 17:30:09 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(true,*local*) 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: Starting ThreadGroup: 1 : getChallenge 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group getChallenge. 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: Thread will continue on error 
2017/01/12 17:30:09 INFO  - jmeter.threads.ThreadGroup: Starting thread group number 1 threads 1 ramp-up 1 perThread 1000.0 delayedStart=false 
2017/01/12 17:30:09 INFO  - jmeter.threads.ThreadGroup: Started thread group number 1 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: All thread groups have been started 
2017/01/12 17:30:09 INFO  - jmeter.threads.JMeterThread: Thread started: getChallenge 1-1 
2017/01/12 17:30:09 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval   Sourced file: inline evaluation of: `` String challenge = vars.get("challenge"); String response = com.uaastool.UaasTo . . . '' : Typed variable declaration : Class: com.uaastool.UaasTool.UaasTool not found in namespace 
2017/01/12 17:30:09 WARN  - jmeter.modifiers.BeanShellPreProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Sourced file: inline evaluation of: `` String challenge = vars.get("challenge"); String response = com.uaastool.UaasTo . . . '' : Typed variable declaration : Class: com.uaastool.UaasTool.UaasTool not found in namespace 
2017/01/12 17:30:09 INFO  - jmeter.threads.JMeterThread: Thread is done: getChallenge 1-1 
2017/01/12 17:30:09 INFO  - jmeter.threads.JMeterThread: Thread finished: getChallenge 1-1 
2017/01/12 17:30:09 INFO  - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test 
2017/01/12 17:30:09 INFO  - jmeter.gui.util.JMeterMenuBar: setRunning(false,*local*) 

出现以上错误的原因:

  • 自己代码本身存在问题
  • Jmeter 中引入包名及类名不正确
  • 自己代码中引用的第三方 jar 包直接打入 jar 包
  • 自己代码中引用的第三方 jar 包导入后,与 Jmeter 中已有 jar 包冲突。

解决方法:

  • 首先确保自己的代码在开发工具中运行正常
  • 其次检查 Jmeter 中是否进行正确的引入包名及类名
  • 如脚本中引入正确,检查自己打的 jar 包
    • 将自己的代码打包时不要将引用的其他第三方包打入 jar 包
    • 将自己代码引用的第三方包放入 Jmeter/lib/ext/目录下(需要检查导入 jar 包是否与 Jmeter 目前已有的 jar 包存冲突,需保证不存在 jar 包冲突)
    • 将自己代码打的 jar 包放入 Jmeter/lib/ext/目录下
  • 重启 Jmeter,再次运行脚本问题解决

这是我在使用 Jmeter 引入 jar 遇到过的问题,以及解决方案。欢迎交流,谢谢!

共收到 3 条回复 时间 点赞

想请教一个问题:
引入的 jar 包后:调用其中的一个类方法,发现其中 getter 方法可以正常调用,但是调用 setter 方法提示 --- 这个类对象没有这个方法,不知是何原因。

PEPSI 回复

不好意思才看到,这个需要看你具体出现的异常信息了,还有就是你 setter 方法与 getter 方法有什么区别,可能的原因为调用方式的错误,缺少相关 jar 包,或者 jar 包以及方法冲突等。

自己代码引入的第三方 jar 引入其他第三方 jar,是不是需要把全部关联的 jar 都放在 Jmeter/lib/ext/目录下?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册