首页
JMeter压力测试实践

基本测试

Jmeter环境安装

1. JDK下载:

2. Jmeter下载:

3. 环境变量配置:

  • JAVA_HOME C:\Program Files\Java\jdk1.8.0_91
  • PATH %JAVA_HOME%\bin
  • CLASSPATH .;%JAVA_HOME%\lib;
  • JMETER_HOME D:\Program Files (x86)\apache-jmeter-3.0

http请求测试

1. 启动jmeter

jmeter无需安装,解压后在apache-jmeter-3.0\bin目录下有个jmeter.bat文件,双击执行

2. 建立测试Sampler

1)建立线程组

右键测试计划,添加Threads—>线程组
image_1av868ukubhq1mkuto81m021h0813.png-27.8kB
这里设置线程数为100个模拟100个用户;
Ramp-Up Period为10s,在10s内建立全部的线程;
循环测试为10,每个线程重复执行10遍
具体参数说明:关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念

2)添加http请求

右键线程组,添加Sampler->HTTP请求
image_1av86u0bl1oji1iths67nfp1n3i1g.png-33kB
设置好web服务器的名称,端口号,协议,方法,字符编码,路径
如果只对一个页面进行压力测试,路径填该页面的路径即可,比如:测https://www.leangoo.com/blog.html,路径填写/blog.html
如果测多个链接,可以将链接保存到一个文本文件中,然后随机读取,具体操作:

  • 新建一个txt文件,里面保存链接路径,格式如下
/blog.html
/event.html
/11664.html
/leangoo_app.html
/leangoo_guide/leangoo_guide_login.html
  • 点击选项->函数助手对话框,选择_StringFromFile,填上文件的绝对路径,点击生成。将生成的结果填写到路径中即可

3)运行查看运行结果

右键线程组,添加监听器,一般我们观察Summary Report查看结果树用表格查看结果
点击启动按钮,即可观察测试的结果

脚本测试

BadBoy录制操作脚本

1. BadBoy下载:

2. 脚本录制

image_1av88rqn3tr6kforum1rne8rm9.png-80.6kB
在地址栏输入网站地址,完成一系列的用户操作,点击停止按钮即完成脚本的录制
点击File->Export to JMeter,保存脚本为JMeter可读取的格式

JMeter测试脚本

image_1av8947pf171517v3dnd14uihe6m.png-134.7kB
在JMeter中打开该脚本,可以看到该脚本被保存为一个测试案例,里面一些参数需要做参数化处理,比如登录的用户名和密码,具体操作:

  • 新建一个csv文件,用记事本打开,里面填写用户名和密码,用半角逗号隔开
  • 在函数助手里,选择_CSVRead,填上文件绝对路径和参数的列号,点击生成
  • 填写请求参数
    image_1av89ipd01ifc15l8ahb2fd7bg13.png-13.5kB

参数处理好之后,同之前一样,设置线程组属性,添加监听器,点击运行

WebSocket测试

安装JMeter WebSocketSampler

由于 JMeter 里没有针对 WebSocket 的 Sampler,所以就需要安装开源的插件,以使其支持 WebSocket 协议。

建立WebSocketSampler

QQ截图20190618144629.png-77.7kB

同之前一样,首先建立一个线程组,然后添加一个WebSocketSampler,设置相关参数

  • 填好地址和端口:
    image_1ddklgki11jh315bm1db965ahnk2o.png-4.7kB

  • timeout设置尽量长一些,不然连接建立一会儿就断了
    234.png-3kB

  • websocket 的路径,这两个都勾上
    QQ截图20190618145320.png-3kB

  • request data 通过浏览器抓包,发送相应的数据
    11120190618145356.png-3.5kB

  • websocket response设置,response pattern是服务器发送的数据匹配到了,就会响应response;close pattern是服务器发送的数据匹配到了,就会关闭连接
    QQ截图20190618145652.png-5.4kB

注意

  • Streaming Connection TCP session要不要保持
    如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭。

  • Request data:填入将要发送的请求,这里填的是[5,${__counter(false,num)}]用了一个计数器,使每个线程每次发送的数据都不一样,保证每个websocket连接都是新开的。

分布式测试

Jmeter 是java 应用,对于CPU和内存的消耗比较大,单台机器模拟数以千计的并发用户量,会引起JAVA内存溢出错误。所以JMeter支持多台机器分布式测试。操作步骤:

  • 一台机器作为controller,其他机器作为agent。所有机器的JMeter环境要相同,注意agent机器是否开启防火墙
  • 在controller机器的bin目录下,找到jmeter.properties文件,编辑该文件
找到remote_hosts将agent的ip地址都填上
remote_hosts=192.168.0.121,192.168.0.106

  • 所有的agent机器执行jmeter-server.bat文件
  • controller机器建立好测试Sampler,点击运行->远程全部启动。注意:设置线程数时填写的是每台机器的线程数,而不是总的线程数