基本测试
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—>线程组
这里设置线程数为100个模拟100个用户;
Ramp-Up Period为10s,在10s内建立全部的线程;
循环测试为10,每个线程重复执行10遍
具体参数说明:关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念
2)添加http请求
右键线程组
,添加Sampler->HTTP请求
设置好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. 脚本录制
在地址栏输入网站地址,完成一系列的用户操作,点击停止按钮即完成脚本的录制
点击File->Export to JMeter
,保存脚本为JMeter可读取的格式
JMeter测试脚本
在JMeter中打开该脚本,可以看到该脚本被保存为一个测试案例,里面一些参数需要做参数化处理,比如登录的用户名和密码,具体操作:
- 新建一个csv文件,用记事本打开,里面填写用户名和密码,用半角逗号隔开
- 在函数助手里,选择
_CSVRead
,填上文件绝对路径和参数的列号,点击生成 - 填写请求参数
参数处理好之后,同之前一样,设置线程组属性,添加监听器,点击运行
WebSocket测试
安装JMeter WebSocketSampler
由于 JMeter 里没有针对 WebSocket 的 Sampler,所以就需要安装开源的插件,以使其支持 WebSocket 协议。
-
下载 JMeter-WebSocketSampler,百度云:http://pan.baidu.com/s/1nuEGHEp
-
下载 Jetty Bundles 9.1.1.v20140108依赖包,百度云:http://pan.baidu.com/s/1hrXhJtq
-
将
JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar
放到lib\ext
中 -
将依赖包放到
lib
中org.eclipse.jetty.http_9.1.1.v20140108.jar org.eclipse.jetty.io_9.1.1.v20140108.jar org.eclipse.jetty.util_9.1.1.v20140108.jar org.eclipse.jetty.websocket.api_9.1.1.v20140108.jar org.eclipse.jetty.websocket.client_9.1.1.v20140108.jar org.eclipse.jetty.websocket.common_9.1.1.v20140108.jar
-
重启之后,可以看到
Sampler
中新增一个Websocket Sampler
建立WebSocketSampler
同之前一样,首先建立一个线程组,然后添加一个WebSocketSampler
,设置相关参数
-
填好地址和端口:
-
timeout设置尽量长一些,不然连接建立一会儿就断了
-
websocket 的路径,这两个都勾上
-
request data 通过浏览器抓包,发送相应的数据
-
websocket response设置,response pattern是服务器发送的数据匹配到了,就会响应response;close pattern是服务器发送的数据匹配到了,就会关闭连接
注意
-
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,点击
运行->远程全部启动
。注意:设置线程数时填写的是每台机器的线程数,而不是总的线程数