Jmeter使用及压测

目录

安装

使用

1、添加线程组

2、添加Http请求

3、添加察看结果树

4、添加断言

5、添加断言结果监听器

6、添加聚合报告

7、添加用户自定义变量

8、读取CSV和Txt文本文件

9、if控制器

Linux上使用

问题总结

连接mysql

1、查看数据库当前版本

2、官网下载对应的jar包

3、创建线程组和监听器


安装

官网地址

复制代码
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、切换中文

a、控制台临时修改

options -> choose language

b、配置文件永久修改

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次请求。

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(断言结果)

注意:每个Sampler下面可以加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总。

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、if控制器

  • 第一个参数:

    • **Expression (must evaluate to true or false) :**表达式(结果值必须是true或false)。在右边文本框中输入的条件值必须是true 或 false。
  • 第二个参数:

    • **Interpret Condition as Variable Expression?:**默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)
  • 第三个参数:

    • **Evaluate for all children?:**条件作用与每个子节点,默认不勾选。仅在If Controller入口处判断一次
  • 第四个参数:

    • use status of last sample: 作用就是只有当上一个请求成功后,才会执行if控制器下的请求。

注意:

1、文本框上的黄色感叹号 ,就是建议采用默认的jexl3 or groovy 表达式,以提高性能。

2、if 控制器 只能作用于其下的子项。

jexl3 or groovy 表达式

jexl3表达式格式

复制代码
${__jexl3(条件表达式)}

groovy 表达式

复制代码
${__groovy(条件表达式}

逻辑表达式说明

  • ==
    • 含义:是否等于
    • 示例:如{__jexl3({VAR}==1,)},判断${VAR}变量是否等于1。
  • !=
    • 含义:不等于
    • 含义:如{__jexl3({VAR}!=1,)},判断${VAR}变量是否不等于1。
  • !
    • 含义:非
    • 示例:如{__jexl3(!({VAR}!=2),)},对${VAR}的值不等于2,其判断为真,那么执行IF下的子项。
  • &&
    • 含义:并且
    • 示例:如{__jexl3({VAR}1 && "{name}" != "李四",)},也就是{VAR}1和表达式 "${name}" != "张四"均为真时,执行IF控制器下的子项。
  • ||
    • 含义:或
    • 示例:如{__jexl3({VAR}1 && "{name}" != "李四",)},也就是{VAR}1和表达式 "${name}" != "张四"其中一项为真时,执行IF控制器下的子项。
  • >=
    • 含义:大于等于
    • 示例:如{__jexl3({count}>=15,)}。也就是${count}>=15,其判断为真,那么执行IF控制器下的子项。

注意:

如果判断表达式是字符串 ,此时,必须要用引号 ,变量都认为时字符串的形式,如:{__jexl3("{name}"=="成都",)} ,不能用**{__jexl3({name}=="成都",)}**

Linux上使用

1、安装JDK8并配置环境变量。

2、下载安装包。

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.5/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.5/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,表示禁用。

连接mysql

1、查看数据库当前版本

复制代码
SELECT VERSION();

2、官网下载对应的jar包

官网地址

复制代码
https://dev.mysql.com/downloads/connector/j/

需要连接不同版本的数据库下载版本最高的那个jar包

下载解压后将 mysql-connector-j-8.0.33.jar 复制到 jmeter 的 lib 包下然后重启 jmeter

3、创建线程组和监听器

4、创建取样器

然后执行即可从结果树中获取数据。

相关推荐
还是鼠鼠4 小时前
Jmeter 安装包与界面汉化
测试工具·jmeter·单元测试·集成测试·模块测试
还是鼠鼠11 小时前
JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)
网络协议·jmeter·http
还是鼠鼠16 小时前
JMeter 教程:编写 POST 请求脚本访问百度
jmeter·dubbo
明月与玄武2 天前
Jmeter -- JDBC驱动连接数据库超详细指南
数据库·jmeter·配置jdbc连接
数巨小码人2 天前
Window下Jmeter多机压测方法
jmeter
暖暖木头3 天前
Jmeter【测试片段】之登录复用介绍
jmeter
跟我一起学测试呀3 天前
软件测试—接口测试面试题及jmeter面试题
软件测试·jmeter·面试
还是鼠鼠3 天前
JMeter 教程:编写 GET 请求脚本访问百度首页
功能测试·jmeter·单元测试
暖暖木头4 天前
Jmeter变量传递介绍
jmeter