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_HOME\lib\ext目录;
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.0\lib\ext\JMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter。

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

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

6.2分布式测试

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

 

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

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

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

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

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

\bin\jmeter-server.bat

 

6-3.png

 

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

 

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

posted on 2017-05-17 16:53  非一  阅读(3636)  评论(0编辑  收藏  举报

导航