JMeter 5.0:基本介绍

25 篇文章 1 订阅
15 篇文章 1 订阅

1 Test Plan

  • Run Thread Groups consecutively,一次只运行一个线程
  • Functional Test Model,JMeter将记录每个sample的返回结果,会影响性能,所以一般用来验证配置是否正确

2 Thread Group

每个线程将独立执行Test Plan,效果上模拟N个虚拟用户

Thread Properties:

  • Number of Threads,线程数(或者并发用户数)
  • Ramp-Up Period,单位秒,指启动全部线程总耗时;比如10个线程设置Ramp-Up=100,则每100/10=10s启动一个线程;线程数过多时,ramp up应足够大,避免启动负载过高,但同时过大的ramp up会导致前面的线程已执行结束,而后面的线程还未启动
  • Scheduler
    • Duration,控制测试总时长
    • Start Delay,线程组每轮启动延时

3 Controllers

二类控制器:Samples 和 Logical Controllers

  • Samples,具体的行为,比如发送http请求
  • Logical Controllers,满足什么条件才触发samples事件

3-1 Samples

  • FTP Request
  • HTTP Request (can be used for SOAP or REST Webservice also)
  • JDBC Request
  • Java object request
  • JMS request (Java Message Service)
  • JUnit Test request
  • LDAP Request (Ligthwight Directory Access Protocol)
  • Mail request
  • OS Process request
  • TCP request

3-2 Logical Controllers

类似于编程语言中的IF、FOR、 WHILE

3-2-1 Sample Controller

无任何作用,只是用来组织结构

3-2-2 LoopController

循环控制器

通过${_jm_LC_idx}获取循环索引,初始值为0,其中LC为controller的名称

3-2-3 Once Only Controller

容器内的sample,在每个线程内只执行一次

即使是在Loop循环中,或者配置线程执行count数,一般用于登录操作

3-2-4 Interleave Controller

在循环中依次选择该容器下的单个sample交错执行

  • ignore sub-controller blocks,子控制器将被视为simple controller
  • Interleave accross threads,跨线程遍历元素,而非单线程遍历

3-2-5 Random Controller

类似于Interleave Controller,只不过遍历元素时是随机抽取,而非顺序

3-2-6 Throughput Controller

控制sample的执行频率

  • percent execution,按比例执行,即容器内的sample执行可能性
  • total executions,指定执行次数

3-2-7 Runtime Controller

控制sample运行时长,内部会一直循环

3-2-8 IF Controller

建议勾选“Interpret condition via Variable Expression”,这样就可以使用${__jexl3()}函数,比javascript更快

3-2-9 While Controller

条件为False时退出循环

  • blank,最后的sample失败则退出循环
  • LAST,controller前一个sample失败,则不进入循环;controller内最后的sample失败退出循环
  • condition

4 Listeners

监听器收集JMeter运行过程中的数据信息,然后以树型,列表型,图型等方式展示

samples越多,Listeners占用的内存就越多;

4-1 Graph Results

在性能测试中一定不要使用Graph Results,因为它会消费大量的资源(内存和CPU)

  • throughput 表示服务器每分钟处理的请求数,计算包括脚本中的延时以及预置处理

4-2 Aggregate Report/Aggregate Graph

  • Label,sample的名称
  • # Samples,相同名称sample的执行数
  • Average,结果平均时间
  • Median,50% sample不超过该响应时间
  • 90% Line,90%不超过
  • 95% Line,95%不超过
  • 99% Line,99%不超过
  • Min,sample执行最短时间
  • Max,sample执行最长时间
  • Error %,失败请求占比
  • Throughput,单位时间内请求数
  • Received KB/sec,每秒接收数据包大小
  • Sent KB/sec,每秒发送数据包大小

4-3 Response Time Graph

以线型方式展示sample的响应时间

4-4 Mailer Visualizer

设置失败任务超过阀值自动发送邮件

4-5 Summary Report

类似于Aggregate Report,但是占用更少内存,建议使用

5 Timers

定时器,保证上下samples不连续执行,防止短时间内过多的请求压力

如果有多个Timer,将合并求和

5-1 Constant Timer

固定时长,比较好理解

5-2 Gussian Random Timer

总延时 = 高斯分布值 * (设置的Diviation + Offset)

5-3 Constant Throughput Timer

确保每分钟的sample执行数在指定值以内

结果只是近似,而且当服务处理性能有限时,实际情况可能低于设定值

5-4 Synchronizing Timer

阻塞指定数量的线程,然后同时释放

6 Assertions

校验响应结果是否符合预期

为了保证只校验指定的sample,需要将assertion添加为sample的子项

6-1 Response Assertion

  • contains, matches,支持正则
    • (?i) 忽略大小写 (?i)Apple pie
    • (?s) 无视换行,内容看作单行
    • (?is) both
  • equals, substring,文本,大小写敏感

6-2 Duration Assertion

响应时间校验

6-3 XPath Assertion

如果指定的xpath路径存在,则认为校验通过,如//title[text()='Text to match']

6-4 JSON Assertion

先校验JSON格式,再校验JSON路径,最后校验路径匹配的值是否与预期相符

$.store.book[0].title

7 Configuration Elements

Samples的配置模板,供同级及子级sample使用,一般配置多个sample的公共属性

7-1 CSV Data Set Config

读取文件内容,并按特定分隔符切割,生成变量

默认情况上,文件只打开一次,每个线程按执行顺序读取文件每一行

  • Recycle on EOF,开启后,将循环从头开始读
  • Stop Thread on EOF,如果Recycle on EOF关闭,Stop on EOF开启,那么线程读到文件EOF处将停止
  • Sharing mode,默认全局共享,可以设置线程独享,或者线程组共享

7-2 User Defined Varviables

定义脚本的初始化参数,无论置于何处都是最先执行

可以使用${__P()}方法,读取properties属性

7-3 Random Variable

  • Variable Name,变量名称
  • Format String,随机数据格式,可以定义为USER_000,表示最少3位数据,并添加USER_前缀
  • Random seed,使用相同的种子,可以保证每次随机数一致
  • Per Thread,全局 or 线程独享

8 Pre-Processor Elements

前置处理器,一般用来设置Sample的参数

8-1 HTML Link Parser

从上一个response中抽取protocol, host, path, parameter names,并填充到上级sample中

8-2 User Parameters

指定单线程变量

8-3 JDBC Pre Processor

预先执行SQL语句,存储过程等

8-4 RegEx User Parameters

从前一个请求中提取正则表达式参数,一般前一个请求使用了post processor

9 Post-Processor Elements

后置处理器,一般用来提取响应结果

9-1 Regular Expression Extractor

  • 每组匹配结果以[refname]_g#的形式存储,其中[refname]是正则表达式的引用名,#指匹配的组号,0表示整个匹配结果
  • 在Template中指定$N$,可以选择匹配小组
  • 由于一个正则表达式可能匹配多次,所以指定Match No.限制具体的匹配结果

9-2 CSS Selector Extractor

通过css选择器锁定dom元素,并返回指定attribute值

如果不指定attribute,则返回text

10 执行顺序

  1. Configuration elements
  2. Pre-Processors
  3. Timers
  4. Sampler
  5. Post-Processors (unless SampleResult is null)
  6. Assertions (unless SampleResult is null)
  7. Listeners (unless SampleResult is null)

11 Properties && Variables

JMeter属性定义在jmeter.properties中,为全局型变量

Variables为本地变量,不同的线程可以一样,也可能不一样

在Test Plan和User Defind Variables中均可定义变量,且支持覆盖

12 远程执行

一个JMeter实例可以控制无数台远程服务,并汇总所有的数据

  • 不需要将Test Plan复制到远程服务器上
  • 每个远程服务器将完全执行Test Plan,即10个线程的任务分布给5台远程服务器,总共产生10 * 5 = 50个线程
  • 如果依赖外部数据,则需要保证每台远程主机对应目录下有文件

12-1 启动方式:

  1. 启动远程JMeter,$JMETER_HOME/bin/jmeter-server.bat
  2. 客户机在$JMETER_HOME/bin/jmeter.properties中添加远程机IP地址,配置项remote_hosts,以逗号“,”分隔;或者使用-R [remote hosts]在启动时动态指定
  3. 客户机在GUI模式下,可以在“run -> remote start”中查看远程机的连接情况;由于客户机自身也会执行Test Plan,所以还是应在非GUI模式下启动jmeter -n -t script.jmx -R host1, host2

12-2 配置SSL

从4.0开始,jmeter的RMI将默认使用SSL,所以需要配置密钥和证书

执行bin/create-rmi-keystore.bat将在本地生成rmi_keystore.jks,将文件复制到其他的服务机以及客户机

13 命令行执行

启动参数

  • -n,非GUI模式
  • -t,指定JMX文件
  • -l,记录sample执行结果
  • -j,jmeter运行日志,默认是启动目录下的jmeter.log
  • -r,远程执行,服务器信息取自jmeter.properties->remote_hosts
  • -R,远程执行,后接具体的远程主机列表

覆盖属性

  • -D[key]=[value],jvm系统属性
  • -J[key]=[value],JMeter本地属性
  • -G[key]=[value],全局属性,可供远程主机使用
  • -L[key]=[value],logging设置,日志级别可直接使用-LDEBUG
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在JMeter中执行测试时,可能会遇到"failed: Connection refused: connect"错误。这个错误通常是由于以下原因之一引起的: 1. 服务端连接处理能力不足:这个错误可能是由于服务端的连接处理能力不足导致的。服务端只能同时处理有限数量的连接,如果超过了这个数量,就会拒绝新的连接请求。 2. 网络问题:这个错误也可能是由于网络问题引起的。可能是服务端无法响应连接请求,或者网络中存在阻塞或故障。 为了解决这个问题,你可以尝试以下几个方法: 1. 检查服务端连接处理能力:确保服务端的连接处理能力足够。如果服务端只允许同时建立1万个连接,而你的测试中超过了这个数量,就会出现连接被拒绝的错误。可以与服务端管理员沟通,了解服务端的连接处理能力,并相应地调整你的测试设置。 2. 检查网络连接:确保网络连接正常。可以尝试使用其他工具或命令来测试与服务端的连接是否正常,例如使用telnet命令。 3. 调整JMeter设置:可以尝试调整JMeter的设置来减少连接数或增加连接超时时间。可以通过减少线程数或增加连接超时时间来降低连接请求的频率,以便服务端能够处理更多的连接。 4. 使用合适的插件:如果你需要提取JMeter请求的JSON响应结果,可以使用JSON Extractor插件来提取所需的数据。确保你已经正确安装了JSONPathExtractor插件,并按照插件的文档说明来使用它。 希望以上方法能够帮助你解决"failed: Connection refused: connect"错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值