zoukankan      html  css  js  c++  java
  • JMeter入门:04Java Request实例

    目的:对Java程序进行测试;
     
     
    一、核心步骤
     
     
    1.创建一个Java工程;
    2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;
    3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写:
    • public Arguments getDefaultParameters():设置可用参数及的默认值;
    • public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
    • public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
    • public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
    4.Export为Runnable Jar File;
    5.将此jar包放入JMETER_HOMElibext目录;
    6.以管理员身份打开JMeter;
    7.创建线程组、Java Request、结果树,进行测试;
     
     
    二、实例
    利用JMeter对服务进行性能测试,服务为:将输入的两个参数通过IO存入文件;
     
     
    1、编写Java代码
     
     
    服务:
    1.  
      package test;
    2.  
       
    3.  
       
    4.  
      import java.io.File;
    5.  
      import java.io.PrintWriter;
    6.  
       
    7.  
       
    8.  
      public class OutputService {
    9.  
      public static void output(String filename,int a, int b) throws Exception {
    10.  
      PrintWriter out = new PrintWriter(new File(filename));
    11.  
      out.write(a+":"+b);
    12.  
      out.close();
    13.  
      }
    14.  
      }


    测试类:
    1.  
      package test;
    2.  
       
    3.  
       
    4.  
      import org.apache.jmeter.config.Arguments;
    5.  
      import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
    6.  
      import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    7.  
      import org.apache.jmeter.samplers.SampleResult;
    8.  
       
    9.  
       
    10.  
      public class PerformenceTest implements JavaSamplerClient {
    11.  
      private SampleResult results;
    12.  
      private String a;
    13.  
      private String b;
    14.  
      private String filename;
    15.  
       
    16.  
       
    17.  
      // 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
    18.  
      public Arguments getDefaultParameters() {
    19.  
      Arguments params = new Arguments();
    20.  
      params.addArgument("filename", "0");//设置参数,并赋予默认值0
    21.  
      params.addArgument("a", "0");//设置参数,并赋予默认值0
    22.  
      params.addArgument("b", "0");//设置参数,并赋予默认值0
    23.  
      return params;
    24.  
      }
    25.  
       
    26.  
       
    27.  
      // 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    28.  
      public void setupTest(JavaSamplerContext arg0) {
    29.  
      results = new SampleResult();
    30.  
      }
    31.  
       
    32.  
       
    33.  
      // 测试执行的循环体,根据线程数和循环次数的不同可执行多次
    34.  
      @Override
    35.  
      public SampleResult runTest(JavaSamplerContext arg0) {
    36.  
      b = arg0.getParameter("b"); // 获取在Jmeter中设置的参数值
    37.  
      a = arg0.getParameter("a"); // 获取在Jmeter中设置的参数值
    38.  
      filename = arg0.getParameter("filename"); // 获取在Jmeter中设置的参数值
    39.  
      results.sampleStart();// jmeter 开始统计响应时间标记
    40.  
      try {
    41.  
      OutputService test = new OutputService();
    42.  
      test.output(filename,Integer.parseInt(a), Integer.parseInt(b));
    43.  
      results.setSuccessful(true);
    44.  
      // 被测对象调用
    45.  
      } catch (Throwable e) {
    46.  
      results.setSuccessful(false);
    47.  
      e.printStackTrace();
    48.  
      } finally {
    49.  
      results.sampleEnd();// jmeter 结束统计响应时间标记
    50.  
      }
    51.  
      return results;
    52.  
      }
    53.  
       
    54.  
       
    55.  
      // 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    56.  
      public void teardownTest(JavaSamplerContext arg0) {
    57.  
      }
    58.  
      public static void main(String[] args) {
    59.  
      // TODO Auto-generated method stub
    60.  
      Arguments params = new Arguments();
    61.  
      params.addArgument("a", "0");//设置参数,并赋予默认值0
    62.  
      params.addArgument("b", "0");//设置参数,并赋予默认值0
    63.  
      JavaSamplerContext arg0 = new JavaSamplerContext(params);
    64.  
      PerformenceTest test = new PerformenceTest();
    65.  
      test.setupTest(arg0);
    66.  
      test.runTest(arg0);
    67.  
      test.teardownTest(arg0);
    68.  
      }
    69.  
      }


    Export 为 Runnable Jar File;

     

     
    2、设置JMeter
     
     

    以管理员身份打开JMeter,并创建Java Request后,结构如下图所示:
    在Java请求中发现了自己新建的测试类:

     
     
    我们在JMeter中发现参数有三个:
     
    我们在响应的数值中填入:
     
     
    大家一定很奇怪,怎么会有一些看不懂的东西,这是JMeter提供的函数,我们可以在
     
     
    因为我们要做的是性能测试,因此我们需要开多个线程并发测试,因此随机数很重要;
    常用的函数为:
    (1)_Random生成随机整数;
    (2)_RandomString生成随机字符串;
     
    在线程组中设置并发线程数为10000,保存后即可运行;
    图形结果如下所示:
     
    聚合报告:
     
    表格查看结果:
     
    结果成功,成功生成了接近10000个文件:
     
     
    3.期间遇到的问题
     
    1.
    Export为Jar File导致Java Request的类名称无法找到;
     
    2.
    JMeter java.lang.OutOfMemoryError: PermGen space问题:
     
    在JMeter.bat 中修改:
    set HEAP=-Xms512m -Xmx1024m
    set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
    set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
    set TENURING=-XX:MaxTenuringThreshold=2
    set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
    set PERM=-XX:PermSize=256m -XX:MaxPermSize=512m
     
    3.
    JMeter需要以管理员身份打开,否则会出现:
     
     
     
     
     
     
  • 相关阅读:
    C语言头文件stdarg.h(cstdarg)
    C语言头文件ctype.h(cctype)
    内存数库库种类
    C#设计模式单件模式(Singleton Pattern)
    vs2005快捷键,vs2008通用
    移动MYSQL数据库经常遇到乱码的问题
    ie6 ie7 ie8 共存以及Firefox浏览器CSS兼容写法
    用正则表达式替换a标记href值
    IE6 PNG透明终极解决方案(打造W3CfunsIE6PNG最强帖)
    IE的hack
  • 原文地址:https://www.cnblogs.com/xiaochengzi2018/p/14411569.html
Copyright © 2011-2022 走看看