Apache JMeter 压力测试工具 使用说明

时间:2022-10-18 11:44:29

介绍说明

最近公司要做秒杀系统,让我写个demo出来,要测试一下性能,也要求以后自己写的代码最好能自己测试一下(感觉公司的测试怎么离我们这么远呢?)。于是继上一篇文章,学习了一下Spring的定时任务以后,自己鼓捣了一下JMeter。

这个工具可以支持远程控制多台“肉鸡”,来模拟高并发场景。比起之前用过一两次的http_load,功能强大很多了,感觉要求不那么高的话,使用这个工具来做压力测试还是可以的。

本文介绍windows下JMeter的使用说明,

使用说明

下载地址

这里直接使用官方的就可以了,这段时间使用Apache的地址下载还没什么问题。
Download Apache JMeter 下载的时候可以选清华的那个镜像,应该没问题。
最新版本的已经部分汉化了的,中文看不懂可以换英文。。。

软件使用说明

JMeter使用Java写的,对应Java版本请参考官方文档,使用之前请先安装对应jre。

  • 要打开客户端,打开 %JMeter_Home%/bin/jmeter.bat 即可。
  • 要打开远程端(肉鸡端),打开 %JMeter_Home%/bin/jmeter-server.bat即可。

结构介绍

如图所示,测试项目,结构为:

  • 计划任务
    • 线程组
      • 线程动作(我自己取的名字)
        • 结果集

计划任务

Apache JMeter 压力测试工具 使用说明

由于我没有用到导入外部jar或者目录,所以这个就不介绍了,也不懂。

线程组

Apache JMeter 压力测试工具 使用说明

对着左侧树形菜单的计划任务栏目点击鼠标右键,按照图示创建线程组。

Apache JMeter 压力测试工具 使用说明

下面的调度器没用过,不解释了,线程属性里面:

  • 线程数:并发的用户数量
  • Ramp-Up Period:启动上面设置的所有线程需要的周期(时间),如果填0的话,就是立刻启动上面设置的所有线程;如果填“x”的话,就是在x秒内启动完成上面填写的所有线程。
  • 循环次数:就是字面意思,将上面的流程重复执行多少次。

这样加入上面线程数设置:200,循环次数设置5,启动周期设置10,那么相当于总共要执行200*5=1000个线程,当然这些线程是200个线程/10秒这个周期执行的。

线程动作

线程动作有很多东西,设置参数,设置请求等等,按照自己的测试需求配置即可。我这里使用的是HTTP请求和Random Varible这两个。HTTP授权管理器还没搞懂,暂不解释。

Random Varible

Apache JMeter 压力测试工具 使用说明

其实这个随机值创建窗口我的这个测试项目中我是放在和线程组平级的,这样所有的线程都可以使用这个Random Varible窗口,我不用再在每个线程组里面单独创建一个了。

Apache JMeter 压力测试工具 使用说明

这里设置挺简单的:

  • Varible Name :变量名称,如果请求中要使用这个设置的变量,使用${uname}这个格式来引用就可以了。
  • Output Format :输出格式,如果输入纯数字/字母/符号,会将产生的变量值附在输入的字符之后输出。
  • Minimum/Maximum Value:变量的最大最小值。

变量的设置方法还有很多,可以参看网上其他文章,这里不列举了。

HTTP请求

创建方式可以看Random Varible的创建方式那个菜单,里面有。

Apache JMeter 压力测试工具 使用说明

要访问的IP,端口号,填入对应的地方。请求方式按需选择,请求的路径按需填写,最前面可以不加“/”,系统会自动加上的。如果是https协议,在协议输入框填写,参数在下面手动添加,这里可以使用上面Random Varible窗口定义的变量。

结果集

Apache JMeter 压力测试工具 使用说明

这里结果集JMeter为我们搞了很多种,要是想展示说明的话,我觉得图形结果是最好的。自己测试我一般使用结果树,这样每个线程的请求和结果都可以看到。要对比线程之间的数据的话,使用表格的形式比较好。

配置说明

要连接远程肉鸡来做压力测试,需要在JMeter配置文件 %JMeter_Home%/bin/jmeter.properties 中设置:

  • remote_hosts=100.123.0.1:1099,100.123.0.2:1099其中IP为肉鸡IP,1099为JMeter的端口IP,可以在server_port=1099中配置
  • 多个IP用逗号隔开
  • 肉鸡使用的Jre版本和JMeter版本最好与客户端一致。

生成测试报告

这里使用Ant生成JMeter的Html格式的报告。

  • 下载并安装Ant(参考网上教程)

  • 将%JMeter_HOME%/extras/ant-jmeter-1.1.1.jar复制到%Ant_HOME%/lib下

  • Ant的作用其实是将JMeter的.jmx格式的文件转换为.html格式,所以需要先生成.jmx脚本文件,编写脚本文件方法参见前面的内容,运行完成测试以后,保存的那个.jmx格式文件就是了。
  • 新建build.xml文件,放在与.jmx脚本同级目录下

    build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmmss" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录 -->
<property name="jmeter.home" value="D:\Server\web-stress-test\apache-jmeter-3.1" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="${jmeter.home}/report/jtl" />
<!-- jmeter生成html格式的结果报告的路径 -->
<property name="jmeter.result.html.dir" value="${jmeter.home}/report/html" />
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />

<target name="run">
<antcall target="test" />
<antcall target="report" />
</target>

<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本 -->
<testplans dir="${jmeter.home}/test-script" includes="*.jmx" />

<property name="jmeter.save.saveservice.output_format" value="xml"/>

</jmeter>
</target>

<target name="report">
<xslt in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />

<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>

参看文件中注释来修改目录。

  • 在cmd下,进入脚本和build.xml文件所在目录,输入命令 ant 即可运行生成html格式文件了。

    Apache JMeter 压力测试工具 使用说明
    生成的HTML格式文件截图

引用

可以参考 贺满 的博客,写的JMeter教学非常详细:贺满-Jmeter教程索引贴