当前位置: 首页 > news >正文

Jmeter使用及压测

安装

官网地址

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

相关文章:

  • Bash fork 炸弹 —— :(){ :|: };:
  • Android studio Could not move temporary workspace
  • 扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松
  • 10.11 LangGraph多角色Agent开发实战:生产级AI系统架构与性能优化全解析
  • CVE-2018-1273 漏洞深度分析
  • 数据库DDL
  • ubuntu18.04通过cuda_11.3_xxx.run安装失败,电脑黑屏解决办法
  • Zookeeper 入门(二)
  • 数据库约束-SQL创建表
  • 数据库blog2_数据结构与效率
  • Flink 的窗口机制
  • 数据结构 -- 树形查找(三)红黑树
  • 【数据结构】2-3-1单链表的定义
  • 索引与数据结构、并行算法
  • 【Linux】进程的基本概念
  • 云原生安全:IaaS安全全解析(从基础到实践)
  • C++ 之 继承
  • 批量处理 Office 文档 高画质提取图片、视频、音频素材助手
  • 鸿蒙系统电脑:开启智能办公新时代
  • 【HarmonyOS 5开发入门】DevEco Studio安装配置完全指南
  • 全中国最好的十个博物馆展陈选出来了!
  • 菲律宾选举委员会公布中期选举结果,马科斯阵营选情未达预期
  • 专访|《内沙》导演杨弋枢:挽留终将失去的美好
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 刘晓庆被实名举报涉嫌偷税漏税,税务部门启动调查
  • “三个集中”之后:图说浦东新区28次撤乡并镇