51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1704|回复: 1
打印 上一主题 下一主题

使用JMeter做压力测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-24 16:46:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一月蔷薇_456 于 2019-1-24 16:47 编辑

1.Jmeter下载地址:

http://jmeter.apache.org/download_jmeter.cgi


2.启动jmeter

运行bin/jmeter.bat


3.添加线程组

在TestPlan节点上右键,Add-->Threads(Users)-->Thread Group。



  • Number of Threads (Users):要模拟的并发用户量。
  • Ramp Up Period (in seconds):在多长时间内均匀启动所有的线程。比如Number of Threads设为10,Ramp Up Period设为1,则jmeter每隔0.1秒启动1个线程。
  • Loop Count:单用户任务重复执行的次数。可以设为Forever,这样jmeter就不会自动停止,需要强制终止。


还可以设置Scheduler Configuration。这里有两组设置:指定StartTime和End Time让jmeter在特定的时间区段内执行工作;Startup Delay表示从当前时刻开始延迟多长时间开始运行,Duration设定运行时长。



4.用jmetr向服务器发送Java Request

当然传统的方法是让jmeter向服务器发送Http Request或FTP Request,但这里不作展示。

假如我们要模拟多用户并发向Zookeeper Cluster发送查询znode的请求,首先要写1个程序来指定单用户的请求行为。


新建一个Java Project,导入jmeter/lib/ext下的两个jar包:ApacheJMeter_core.jar和ApacheJMeter_java.jar。



  1. package test;

  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. import org.apache.zookeeper.ZooKeeper;

  7. public class Create extends AbstractJavaSamplerClient{
  8.         private String nodePath=null;
  9.         private String timeout_str=null;
  10.         private SampleResult results;
  11.         
  12.          //设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
  13.         public Arguments getDefaultParameters() {
  14.                 Arguments params = new Arguments();
  15.                 params.addArgument("nodePath","");
  16.                 params.addArgument("timeout_str", "5000");
  17.                 return params;
  18.         }
  19.         
  20.         //初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
  21.         public void setupTest(JavaSamplerContext arg0) {
  22.                 results = new SampleResult();
  23.                 nodePath = arg0.getParameter("nodePath");        //获取在Jmeter中设置的参数值
  24.                 if (nodePath != null && nodePath.length() > 0) {
  25.                         results.setSamplerData(nodePath);
  26.                 }
  27.                 timeout_str=arg0.getParameter("timeout_str");
  28.                 if (timeout_str != null && timeout_str.length() > 0) {
  29.                         results.setSamplerData(timeout_str);
  30.                 }
  31.         }

  32.          //测试执行的循环体,根据线程数和循环次数的不同可执行多次
  33.         @Override
  34.         public SampleResult runTest(JavaSamplerContext arg0) {
  35.                 int timeout=Integer.parseInt(timeout_str);
  36.                 boolean success=true;
  37.                 results.sampleStart();                 //事务的起点
  38.                 try {
  39.                         ZooKeeper zkp=new ZooKeeper("localhost:2181",timeout,null);
  40.                         zkp.getData(nodePath, false, null);
  41.                         zkp.close();
  42.                 } catch (Exception e) {
  43.                         success=false;
  44.                 }finally{
  45.                         results.sampleEnd();        //事务的终点
  46.                         results.setSuccessful(success);                //设置本次事务成功或失败
  47.                 }
  48.                 return results;
  49.         }
  50.         
  51.         //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
  52.         public void teardownTest(JavaSamplerContext arg0) {
  53.         }
  54. }
复制代码

将project导出为jar包,放到jmeter/lib/ext下,重启jmeter。

在Thread Group上是右击,Add-->Sampler-->Java Request。



设置nodePath和timeout的值。


5.添加Listener

在TestPlan上右击,Add-->Listener-->Aggregate Report。Jmeter生成的报告有多种,这里以Aggregate Report为例。



可以指定将report保存到某个文件,如上图中所示保存到report.csv,在非GUI模式下运行Jmeter这是非常必要的。


可以在bin/jmeter.properties中设置report文件的默认格式,你可能要经常要更改这两项配置:jmeter.save.saveservice.output_format=csv #默认有文件格式为jtl jmeter.save.saveservice.default_delimiter=\t #默认使用","作为域之间的分隔符



点击Configure可以自己定义report中你所关心的数据项。



比如我只关心每个请求是否成功,以及每个请求所用的时间,所以只勾选了两项。


6.为Jmeter安装PerfMon插件

PerfMon用来监控Server的CPU、I/O、Memory等情况。

1. 插件下载地址:http://code.google.com/p/jmeter-plugins/wiki/PerfMon

2. 把JMeterPlugins.jar放到jmeter客户端的jmeter/lib/ext下。

3. 启动jmeter,添加Listener时你就看到PerfMon Metrics Collectors了。

4. 另外还需要把下载下来的PerfMon解压后放到所有的被测试的服务器上,并运JMeterPlugins/serverAgent/startAgent.sh,默认工作在4444端口。


5. 使用PerfMon截图:



再次提醒一下,在非GUI模式下运行Jmeter时指定把result保存到一个文件是非常必要的。


7.非GUI模式下运行Jmeter

具体方法是:先在GUI模式下创建TestPlan,保存为jmx文件。命令行启动jmeter:./ApacheJMeter -n -t testplan.jmx (选项-n表示non-GUI,-t指定TestPlan文件)。运行结束后Aggregate Report和PerfMon Metrics Collector就会保存在你指定的文件中。把保存PerfMon Metrics Collector的文件拖到Jmerter GUI中就可以看到CUP等使用状况拆线图了。


8.远程启动jmeter

应用进场景:用一台机器(称为JMeter客户端)上的jmeter同时启动另外几台机器(称为JMeter远程服务器)上的jmeter。

1. 保证jmeter客户端和jmeter远程服务器采用相同版本的jmeter和JVM。

2. jmeter客户端和jmeter远程服务器最好在同一个网段内。

3. 在jmeter远程服务器上运行JMETER_HOME/bin/jmeter-server (UNIX)或者JMETER_HOME/bin/jmeter-server.bat(Windows)脚本 。

4. 在jmeter客户端上修改/bin/jmeter.properties文件,找到属性"remote_hosts",使用JMeter远程服务器的IP地址作为其属性值。可以添加多个服务器的IP地址,以逗号作为分隔。


例如:
#remote_hosts=127.0.0.1
remote_hosts=9.115.210.2:1099,9.115.210.3:1099,9.115.210.4:1099
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099



5. 在jmeter客户端上启动jmeter:
./jmeter -n -t plan.jmx -r #选项-r表示远程启动(remote)
jmeter客户端会自动向jmeter远程服务器上分发测试计划。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-25 15:23 , Processed in 0.065035 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表