Jmeter使用及压测实战

Jmeter

  • 一、安装
  • 二、使用
    • 1、添加线程组
    • 2、添加Http请求
    • 3、添加察看结果树
    • 4、添加断言
    • 5、添加断言结果监听器
    • 6、添加聚合报告
    • 7、添加用户自定义变量
    • 8、读取CSV和Txt文本文件
    • 9、压测MySql
    • 10、Linux上使用
  • 三、问题总结

一、安装

官网地址:

http://jmeter.apache.org/

(1)需要安装JDK8+。
(2)启动 bin目录下 jmeter.bat。
注意: 如果启动提示 Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(…) returned error code 5。
解决: 用管理员身份运行即可。
(3)切换中文
1、控制台临时修改
options -> choose language
2、配置文件永久修改
bin目录 -> jmeter.properties
默认 #language=en
改为 language=zh_CN

二、使用

1、添加线程组

Test Plan -> Add ->Threads ->Thread Group(控制总体并发)
线程数:虚拟用户数,一个虚拟用户占用一个进程或线程。
准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如100个线程,10秒,则表示10秒内100个线程都要启动完成,每秒启动10个线程。
循环次数(Loop Count):每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,默认是1,如果不填则会自动勾选永远循环。

2、添加Http请求

Thread Group -> Add -> Sampler(采样器) -> Http Request(一个线程组下面可以添加多个Sampler)
web服务器:
默认协议是http
默认端口是80
服务器名称或IP :请求的目标服务器名称或IP地址
路径:请求url,比如 /login
Use multipart/from-data for HTTP POST :当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。

3、添加察看结果树

线程组/Http Request -> Add -> Listener(监听器)-> View Results Tree(察看结果树)

4、添加断言

线程组/Http Request -> Add -> Assertions(断言)-> Response Assertion(响应断言)
apply to(应用范围):
Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有sub sample(比较少用)。
要测试的响应字段:
Text Response(响应文本):即响应的数据,比如json等文本。
Response Code(响应代码):http的响应状态码,比如200,302,404。
Response Message(响应信息):http响应代码对应的响应信息,例如:OK。
模式匹配规则:
contains(包含):只要包含在里面就成功。
Matches(匹配):响应内容完全匹配,不区分大小写。
Equals:完全匹配,区分大小写。

5、添加断言结果监听器

线程组/Http Request -> Add -> Listener(监听器)-> Assertion Results(断言结果)
注意:每个sample下面可以加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总。

6、添加聚合报告

线程组/Http Request -> Add -> Listener(监听器)-> Aggregate Report(聚合报告)
lable: sampler的名称。
Samples: 一共发出去多少请求,例如10个用户,循环10次,则是 100。
Average: 平均响应时间,单位ms。
Median: 中位数,也就是 50% 用户的响应时间。
90% Line : 90% 用户的响应不会超过该时间。
95% Line : 95% 用户的响应不会超过该时间。
99% Line : 99% 用户的响应不会超过该时间。
min : 最小响应时间,单位ms。
max : 最大响应时间,单位ms。
Error%:错误的请求的数量/请求的总数。
Throughput : 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为QPS。
Received KB/sec : 每秒接收数据量。
Sent KB/sec : 每秒发送数据量。

7、添加用户自定义变量

线程组/Http Request -> Add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量)
引用方式${XXX}。

8、读取CSV和Txt文本文件

线程组/Http Request -> Add -> Config Element(配置原件)-> CSV data set config(CSV数据文件设置)
如果是多个参数需要同时引用,则在CSV数据文件里面设置加多个字段,Variabled names(comma-delitited): csv_name,csv_pwd。

9、压测MySql

(1)添加mysql jar包:
Test Plan(测试计划) -> Add directory or jar to classpath -> 选中mysql-connector-java-5.1.30.jar
(2)JDBC Request 配置:
Thread Group -> Add -> Sampler -> JDBC Request
核心配置:
Variable Name of Pool declared in JDBC Connection Configuration:test_jdbc
SQL Query:select * from user;
(3)JDBC connection Configuration 配置:
JDBC request-> Add -> config Element -> JDBC Connection Configuration
核心配置:
Variable Name for created pool:test_jdbc
注意:JDBC Connection Configuration 中Variable Name for created pool 的名字和JDBC Request中Variable Name of Pool declared in JDBC Connection Configuration的名字必须一样。
Max Number of Connections:20 最大连接数
MAX wait:最大等待时间
Auto Commit:是否自动提交事务
DataBase URL:数据库连接地址 jdbc:mysql://127.0.0.1:3306/test
JDBC Driver Class:数据库驱动,选择对应的mysql
username:数据库用户名
password:数据库密码

10、Linux上使用

(1)安装JDK8并配置环境变量。
(2)下载安装包

wget https://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.2.1.tgz

(3)在 /usr/local 目录下创建 jmx、jtl、test-report 文件夹用于存放压测脚本、记录结果文件和测试报告

mkdir {jmx,jtl,test-report}

(4)在Linux服务器上以非GUI界面去执行JMX压测脚本
官方参数地址:

http://jmeter.apache.org/usermanual/get-started.html

非GUI界面,压测参数讲解:
-n 非GUI模式
-t 指定要运行的 JMeter 测试脚本文件
-l 记录结果的文件(要确保之前没有运行过,即xxx.jtl不存在,不然报错)
-e 在脚本运行结束后生成html报告
-o 用于存放html报告的目录(目录要为空,不然报错)

cd /usr/local/jmeter-5.2.1/bin
./jmeter -n -t /usr/local/jmx/users.jmx -l /usr/local/jtl/result.jtl -e -o /usr/local/test-report

(5)下载并查看压测报告
打开jmeter,新建线程组 -> Listener -> Summary Report ->浏览jtl文件
(6)压测减少资源使用的一些优化建议,使压测结果更准确
a、使用非GUI模式。
b、用内网压测,减少带宽影响压测结果。
c、尽可能少地使用断言,因为大量判断或者正则匹配会影响结果。
d、在本地测试阶段如果使用了Listener的一些报告等,则在正式测试时必须使用-l参数,它可以删除或禁用Listener。
e、如果压测大流量,尽量多几个节点以非GUI模式向服务器施压。
(7)分布式压测
114作为主节点,115作为slave节点,压测修改master节点信息:
jemeter.properties 值是slave机器的ip+端口号,如果有多个,用逗号分隔

remote_hosts=10.0.0.115:1099
server.rmi.ssl.disable=true

修改slave节点信息:

server.rmi.ssl.disable=true

注意:master机器启动后会拷贝jmx文件到slave机器,所以不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。如果使用csv进行参数化,则需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

先启动slave机器,注意要同个网段,ip地址用内网ip

cd /usr/local/jmeter-5.2.1/bin
nohup ./jmeter-server &

检查启动是否成功

ps -ef|grep jmeter-server

主节点上执行测试命令(注意远程压测多了 -r 参数):

./jmeter -n -t /usr/local/jmx/users.jmx -r -l /usr/local/jtl/result.jtl -e -o /usr/local/test-report

三、问题总结

(1)Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
解决:
编辑jmeter
搜索 : “${HEAP:=”-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"
改变初始堆内存和最大堆内存。
(2)Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory) An error occurred: Listen failed on port: 0; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
解决:
拥有RMI over SSL的有效密钥库,或者禁用了SSL。
禁用SSL:
jmeter.property里面 server.rmi.ssl.disable 改为 true,表示禁用。

你可能感兴趣的:(测试,jmeter)