• jmeter之java请求


    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767
    一、核心步骤
     
    1.创建一个Java工程;
    2.将JMeter的lib目录下的jar文件添加进此工程的Build Path;需要引入三个包ApacheJMeter_core.jar,ApacheJMeter_java.jar,logkit-2.0.jar
    3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写:
    • public Arguments getDefaultParameters():设置可用参数及的默认值;
    • public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
    • public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
    • public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

    getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)

    4.Export为Runnable Jar File
    5.将此jar包放入JMETER_HOMElibext目录;
    6.以管理员身份打开JMeter;
    7.创建线程组、Java Request、结果树,进行测试;
    二 测试
    package test;
    
    import java.io.File;
    import java.io.PrintWriter;
    
    public class OutputService {
         public static void output(String filename,int a, int b) throws Exception {  
               PrintWriter out = new PrintWriter(new File(filename));  
                   out.write(a+":"+b);  
                  out.close();  
              }  
    
    }
    测试类:
    
    package test;  
    02.   
    03.   
    04. import org.apache.jmeter.config.Arguments;  
    05. import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;  
    06. import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;  
    07. import org.apache.jmeter.samplers.SampleResult;  
    08.   
    09.   
    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后,结构如下图所示:

    查看聚合报告,分析其中的所有统计数据,得出性能测试结论。

    如果做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。

    Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

    Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

    Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

    Median:中位数,也就是 50% 用户的响应时间

    90% Line:将所有响应时间从小到大排列,第90%的那个响应时间,此数值代表绝大多数用户的响应实际时间,有一定参考价值

    Min:最小响应时间

    Max:最大响应时间

    Error%:本次测试中出现错误的请求的数量/请求的总数

    Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)

    KB/Sec:每秒从服务器端接收到的数据量,相当于Throughput/Sec

    6.1监控插件

    很多时候,测试性能都需要查看内存和CPU等信息来判断系统瓶颈,关于CPU和内存的监控,Jmeter并没有很好的支持,只能通过系统的资源监控器来观察,一闪而过不会记录下来。谷歌开发了一款专门监控的Jmeter插件JMeterPlugins,弥补了这方面的不足,目前使用的版本为JMeterPlugins-Standard-1.2.0。

    首先将下载的文件进行解压,得到JMeterPlugins-Standard-1.2.0与ServerAgent,将JMeterPlugins-Standard-1.2.0libextJMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter。

    然后,将serverAgent目录及下面的文件复制到我们测试的服务器上,windows的话运行startAgent.bat,linux的话打运行startAgent.sh。

    准备工作完成,开始进行性能测试。

    6.2分布式测试

    有时一台压力测试机无法满足性能测试的需求的情况下,需要搭建分布式的Jmeter测试系统,使用Jmeter自带分布式的性能测试功能。

     

    首先开始分布式性能测试之前:

    1 所有的压力机的防火墙应该关闭

    2 所有的压力机应该都在同一个局域网中

    3 确保所有压力机的JMeter可以访问待测服务器

    4 确保所有压力机的JMeter版本都是一致的

    injmeter-server.bat

     

    6-3.png

     

    2 性能测试主机进入Jmeter主界面,并且启用远程控制

     

     可以选择启动某个附属压力机,也可以选择全部启动,通过远程启动,便可驱动远程开启的JMeter同时进行并发测试,这样实现了分布式的性能测试。测试过程中附属压力机的处理器和内存可能全部占满,需要监控压力机的硬件资源防止其崩溃死机,测试结束之后再点击远程全部停止,关闭附属压力机。

  • 相关阅读:
    left join 和 inner join 区别和优化
    认识位移操作符
    動態修改 XML 欄位
    (轉載)sql server xml字段的操作
    (轉)CSS 单行溢出文本显示省略号...的方法(兼容IE FF)
    (轉)Equal height boxes with CSS
    獲得瀏覽器顯示標簽的真實的長寬高
    轉:Jquery绑定img的click事件
    SqlLocalDB 的一些常用命令行
    转:css实现强制不换行/自动换行/强制换行
  • 原文地址:https://www.cnblogs.com/feiyi211/p/6868358.html
Copyright © 2020-2023  润新知