文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JMeter进阶—详解Java sampler的设计方法(附源码)

2024-12-02 18:55

关注

JMeter Java Sampler介绍

我们通常使用jmeter做http或者https请求的测试,但是有些场景我们需要直接调用Java接口进行性能测试, jmeter通过Java请求可以实现该需求(这样就可以处理一些公司自定义的协议了,开发提供协议接口,然后我们通过java sampler进行调用)。本文将会详细介绍jmeter中如何编写 java请求并对其进行调用!

添加Java请求


Java请求如下:


其中上图里com.my.demo.JmeterDemo2,即我们需要调用的Java类;str是我们需要传入的参数。那么Jmeter中如何实现对java请求的调用呢?我会在本文详细讲解!

设计Java请求思路与代码解析

如何编写jmeter java请求,简单地说分如下几点:

1写一个类,叫做Demo,使其继承AbstractJavaSamplerClient;

在public SampleResult runTest(JavaSamplerContext arg0)方法里,写处理java代码的逻辑;

在public Arguments getDefaultParameters()方法里定义从jmeter中传入java代码的参数;

把类Demo 打成jar包并放入jmeter的\lib\ext 目录下(如果Demo需要依赖其它jar包需要一起放入\lib\ext目录下)

实例代码如下:

  1. import org.apache.commons.lang3.StringUtils; 
  2. import org.apache.jmeter.config.Arguments; 
  3. import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; 
  4. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; 
  5. import org.apache.jmeter.samplers.SampleResult; 
  6. public class JmeterDemo2 extends AbstractJavaSamplerClient 
  7. private SampleResult sr; 
  8. public Arguments getDefaultParameters() { 
  9. Argumentsparams = new Arguments(); 
  10. params.addArgument("str"""); 
  11. return params; 
  12. public SampleResult runTest(JavaSamplerContext arg0) { 
  13. this.sr.setSampleLabel("commonsio-demo2"); 
  14. try { 
  15. Stringstr=arg0.getParameter("para"); 
  16. //使用jar包中StringUtils类的countMatches方法来统计字符串a的个数 
  17. int num=StringUtils.countMatches(str, "a"); 
  18. if (num==0) { 
  19. this.sr.setResponseMessage("ResponseMessage:参数匹配0个"); //Sample Result 中的Response message 
  20. this.sr.setResponseData("ResponseData:参数匹配0个","UTF-8"); //Response Data的值,会被后面的覆盖 
  21. this.sr.setSuccessful(true);//Sample Result 中的结果 
  22. }else { 
  23. this.sr.setResponseMessage("ResponseMessage:参数匹配"+num+"个"); 
  24. this.sr.setResponseData("ResponseData:参数匹配"+num+"个","UTF-8"); 
  25. this.sr.setSuccessful(false); 
  26. }catch (Exception e) { 
  27. this.sr.setResponseMessage(e.getMessage().toString()); 
  28. this.sr.setSuccessful(false); 
  29. }finally { 
  30. //this.sr.setResponseData("结束测试""UTF-8"); 
  31. super.getNewLogger().info("####测试执行####"); 
  32. try { 
  33. Thread.sleep(500); 
  34. }catch (InterruptedException e) { 
  35. // TODO Auto-generated catch block 
  36. e.printStackTrace(); 
  37. return this.sr; 
  38. public void setupTest(JavaSamplerContext context) { 
  39. super.setupTest(context); 
  40. super.getNewLogger().info("####测试开始####"); 
  41. this.sr = new SampleResult(); 
  42. this.sr.sampleStart(); 
  43. public void teardownTest(JavaSamplerContext context) { 
  44. super.teardownTest(context); 
  45. this.sr.sampleEnd(); 
  46. super.getNewLogger().info("####测试结束####"); 

这里对上述代码做详细分析:

主要用到的方法如下:


方法执行的先后顺序为:

getDefaultParameters() -->

setupTest(JavaSamplerContext context)-->

runTest(JavaSamplerContext context) -->

teardownTest(JavaSamplerContext context)

代码运行后,打开日志结果如下,参数para 对应代码String str=arg0.getParameter("para");


从日志中可以看到

setupTest(JavaSamplerContext context) 中的代码被执行1次,打印

####测试开始####

teardownTest(JavaSamplerContext context) 中的代码被执行1次,打印

####测试结束####

而runTest中的方法super.getNewLogger().info("####测试执行####"); 被执行5次,因为在线程组中,设置执行5次。(线程组线程执行的次数,影响java请求中的runTest,而不会影响setupTest和teardownTest)。方法super.getNewLogger().info("")会把值写入日志。

setResponseMessage("ResponseMessage:参数匹配0个");打印到Sample Result 中的Response message里;setSampleLabel("commonsio-demo2");设置java请求的显示名称,如下图:


setResponseData("ResponseData:参数匹配0个","UTF-8"); 打印到Response Data,如下图:


最后,方法setSuccessful(true)会影响测试结果

在IDE中开发Jmeter Java 请求

在IDE中开发Jmeter Java 请求与普通java开发一致,引入需要的java包以及jmeter相关jar包即可,引入Jmeter lib\ext下的ApacheJMeter_core.jar和ApacheJMeter_java.jar到IDE中!

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯