性能测试
- 性能测试的概念
性能测试针对系统的性能指标,建立性能测试模型,制定性能测试方案,制定监控策略,在场景条件之下之下性能场景,分析判断性能瓶颈并调优,最终得出性能结果来评估性能指标是否满足既定值。
通俗的讲:是为描述测试对象与性能测试相关的指标,并对其进行评价而实施和执行的一类测试,它主要通过自动化的测试工具模拟多种正常、峰值、及异常负载条件来对系统的各项性能指标进行测试。
- 性能指标:一般可以分三类:时间指标,容量指标,资源利用率指标
- 性能测试模型:对真实场景的一种抽象描述,(模拟用户执行操作)
- 性能测试方案:包含测试需求分析、测试资源准备、测试风险、测试执行策略、测试报告输出这几个关键点。
- 测试需求分析:测试中涉及的测试目的、测试指标、测试对象的分析定义。
- 测试资源准备:测试中涉及的测试环境、测试工具、测试数据、测试桩、测试人员&周期的分析准备。
- 测试中涉及的环境风险、人力风险、技术风险的分析定义。
- 测试中涉及的测试类型、测试用例、测试轮次的分析定义。
- 测试中涉及的测试结果分析,并输出测试进度报告和测试结论报告的规范定义。
- 监控策略:要有全局监控、定向监控的能力。在全局监控发现问题之后再去做定向监控
- 性能场景:性能场景可以分为基准场景,混合场景,稳定性场景,异常场景
- 基准场景:基准场景就是对单接口或者单业务的测试
- 混合场景:混合场景就是对多个接口或者业务的测试
- 稳定性场景:稳定性场景主要目的为测试系统在压力下长时间运行是否能保持稳定
- 异常场景:异常场景的目的是检测在一定的压力下,当系统环境出现一些异常的时候,系统是否还能正常运行
- 性能瓶颈:
- 硬件上的性能瓶颈:一般指的是CPU,内存,磁盘I/O方面的问题,分为服务器硬件瓶颈,网络瓶颈(对局域网可以不考虑),服务器操作系统瓶颈(参数配置),中间件瓶颈(参数配置,数据库,web服务器等),应用瓶颈(sql语句,数据库设计,业务逻辑,算法等)。
- 应用软件上的性能瓶颈:一般指的是应用服务器,web服务器等应用软件,还包括数据库系统
- 应用程序上的性能瓶颈:一般指的是开发人员新开发出来的应用程序;
- 操作系统上的性能瓶颈:一般指的是windows,UNIX,Linux等操作系统;
- 网络设备上的应用瓶颈:一般指的是防火墙,动态负载均衡器,交换机等设备;
- 性能指标:
- 并发用户数:是指在同一时刻与服务器发生数据交互的所有数量
- 吞吐量:是指单位时间内服务器处理的用户请求数量
- TPS:是指每秒钟服务器处理事务或交易的次数
- 点击数:是指客户端向服务器处理事务或交易的次数
- 响应时间:是指应用系统从发出请求开始到服务器接受所有数据所消耗的时间
- 平均响应时间:是指测试线程向被测系统发送的所有请求的响应时间和平均值
- 性能测试的流程
- 需求分析,分析系统的性能指标
- 准备环境,包括工具、场景等一系列的性能测试相关需求
- 准备脚本,基于不同的性能场景完成测试准备
- 执行脚本,获取数据
- 判定指标是否满足要求。
- 如果达标,还会继续进行进一步的性能测试。
- 测试系统的阈值,测试系统是否具备有抗风险的能力
- 如果不达标,进入到性能诊断
- 如果达标,还会继续进行进一步的性能测试。
- 性能诊断
- 提供优化建议
- 性能测试工具介绍
- Jmeter
Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。
同时,JMeter可以帮助你对你的应用程序进行回归测试。通过你创建的测试脚本和assertions来验证你的程序返回了所期待的值。为了更高的适应性,JMeter允许你使用正则表达式来创建这些assertions.
下载JMeter压缩包后,解压到任意位置,双击bin目录下面的jmeter.bat
即可启动JMeter,启动后的界面如下。
-
- Loadrunner
LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试,适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
安装注意事项
- 安装前,把所有的杀毒软件和防火墙关闭;
- 若以前安装过LoadRunner,需将其卸载;
- 安装路径不要带中文字符;
- LoadRunner 12已经不再支持XP系统,浏览器建议使用IE10以上版本。
包含三大组件:
- 脚本用户脚本(Virtual user generator):录制、调试脚本
- 控制台(controller):设置场景参数,管理虚拟用户
- 结果分析器(analysis):生成测试报告
- Fiddler (辅助工具)
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
- 基于jmeter
- 启动脚本后,将jmeter设置成中文
-
- 脚本开发
启动脚本后,进入如下所示的工作区
相关元素如下:
- 测试计划:是JMeter测试脚本根节点,每一个测试脚本都是一个测试计划
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 用户定义的变量:是全局变量
- 独立运行每个线程组:如果一个测试计划中有多个线程组,设置此项可以生效。不设置时每个线程组同时运行
- 主线程结束后运行tearDown线程组:关闭主线程后运行tearDown程序来正常关闭线程组
- 函数测试模式:只有当你需要记录每个请求从服务器取得的数据到文件时才需要选择函数测试模式,如果记录较多的数据会影响测试效率,所以在执行性能测试时,最好关闭此项了。
- 添加目录或jar包到ClassPath:把测试需要依赖的jar包或包所在的目录加入类路径。测试需要依赖的jar包还可以直接放到%JMETER_HOME%\lib目录下(%JMETER_HOME%:JMeter安装目录)。
- 脚本添加
JMeter中一个脚本即是一个测试计划,也是一个管理单元。JMeter的请求模拟与并发数(设置线程数,一个线程代表一个虚拟用户)设置都在脚本文件中一起设置
测试计划要素如下:
- 脚本中测试计划只有一个
- 测试计划中至少要有一个线程组
- 至少要有一个取样器
- 至少要有一个监听器
- 添加线程组
线程组是模拟虚拟用户的发起点,在此可以设置线程数及运行次数或者运行时间,还可以定义调度时间和运行时长。
添加线程组:测试计划>添加>Threads(Users)>线程组。
线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值
上图可以看到,jmeter有三个添加线程组的选项,名字不一样, 但是创建之后,其界面是完全一样的。
- setUp 线程组
一种特殊类型的ThreadGroup,用于在执行常规线程组之前执行一些必要的操作。在“setup thread group ”下提到的线程行为与普通线程组完全相同。不同的是执行顺序---它会在普通线程组执行之前被触发。
- tearDown 线程组
一种特殊类型的ThreadGroup,用于在执行常规线程组完成后执行一些必要的操作。在“teardown thread group ”下提到的线程行为与普通线程组完全相同。不同的是执行顺序---它会在普通线程组执行之后被触发。
- 线程组
这个就是我们通常使用的线程。通俗的讲,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 在取样器错误后要执行的动作
- 继续:继续执行接下来的操作
- Start Next Thread Loop:开始下一次循环
- 停止线程:停止线程,退出该线程(不再执行此线程的操作)
- 停止测试:等待当前执行的采样器结束后,结束整个测试
- Stop Test Now:马上停止测试
- 线程属性
- 线程数:相当于模拟的用户数量,性能测试时经常会设置
- Ramp-Up时间(秒):达到指定线程需要的时间,例如线程数为100,时间设定为10s,那么就是10s加载100个线程
- 循环次数:如果填具体的数值,就是循环对应的时间;如果选择永远,则一直执行下去,直到手动停止。
- Same user on each iteration:在每次迭代中使用相同的用户;选中,每次循环用第一次的cookie,不再更新;可以理解为每次循环都是同一个用户。不选中,每次循环都是用新的cookie值;可以理解为每次循环都是不同的用户。
- 延迟创建线程 直到需要:延迟线程创建,直到需要才创建
- 调度器配置
- 需要选中调度器,调度器配置才生效
- 持续时间(秒):测试计划持续多长时间,会覆盖结束时间
- 启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间
2.添加配置元件
1.添加HTTP Cookie 管理器
在用浏览器访问Web页面时,浏览器会自动记录Cookie信息,JMeter通过加入HTTP Cookie管理器来自动记录Cookie信息,添加Cookie管理器后选择默认即可。
添加HTTP Cookie管理器:线程组>添加>配置元件>HTTP Cookie管理器。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 选项
- 每次反复清除Cookies? :每次循环就清空一次Cookies
- Use Thread Group configuration to control cookie clearing:使用线程组配置来清除cookie
- 存储在Cookie管理器中的Cookie:
一般情况下不需要输入什么值,默认即可
2.HTTP信息头管理器
支持用户添加或者重写HTTP请求头。JMeter支持多个信息头管理器。多个信息头条目合并成一个信息头列表,跟随http请求一并提交到服务端。
添加HTTP 信息头管理器:线程组>添加>配置元件>HTTP 信息头管理器。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 信息头存储在信息头管理器中
- 名称:请求头的名称,比如Content-Type
- 值:请求头的值,比如application/json
3.HTTP缓存管理器
浏览器缓存:
浏览器缓存(Browser Caching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。
HTTP缓存管理器用于在其范围内向HTTP请求添加缓存功能,用于模拟浏览器缓存功能。每个虚拟用户线程都有自己的缓存
添加HTTP 缓存管理器:线程组>添加>配置元件>HTTP缓存管理器。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 在每次迭代中清除缓存?:如果选中此选项,则在线程开始时清除缓存
- Use Thread Group configuration to control cache claering: 使用线程组的设置来控制清除cookie。建议与线程组设置中的不勾选Same user on each iteration一起使用来模拟每次迭代登录使用不同session登录的情况
- Use Cache-Control/Expires header when processing GET requests:对照当前时间检查“Cache-Control/Expires”值。当是GET请求,并且时间戳记在缓存之后,则取样器将立即从缓存中取后返回,而无需从远程服务器请求URL。如果Cache-Control标头为“ no-cache ”,则响应将在过期时存储在缓存中,再次进行GET请求时将重新请求远程服务器。
- 缓存中元素的最大数量:每个虚拟用户线程都有自己的缓存。默认情况下,缓存管理器在每个虚拟用户线程的缓存中最多存储5000个项目
4.HTTP请求默认值
HTTP 请求默认值,用来把这些重复的部分封装起来,一次设置多次使用
添加HTTP 请求默认值:线程组>添加>配置元件>HTTP请求默认值。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https
- 服务器名称或IP:HTTP请求发送的目标服务器名称或者IP地址
- 端口号:目标服务器端口
- 路径:目标URL路径
- 内容编码:内容的编码方式
5.计数器
计数器,顾名思义就是在测试执行过程中会记录迭代次数。可以在线程组任何位置创建,允许用户配置起点、最大值和增量。配置后,计数器将从起点循环到最大值,然后重新开始,直到线程结束。允许用户创建一个计数器,可在线程组中任何地方被引用
添加计数器:线程组>添加>配置元件>计数器。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- Starting value:启动,记录数量起始值
- 递增:递增,记录迭代次数步长
- Maximum value:记录的最大值
- 数字格式:计算器格式,可以是数字,例如000000(6位长度,000,000(6位长度,3位间隔开);字符加数字,例如CUST_000000(字符加6位数字 )
- 引用名称:引用变量名称,可供其他元件调用
- 与每用户独立的跟踪计数器:与每位用户独立的跟踪计数器,每个线程都有自己的计数器,相互不干扰
- 在每个线程组迭代上重置计数器:每次迭代复原计数器
6.HTTP授权管理器
HTTP授权管理器使可以为使用服务器身份验证限制的网页指定一个或多个用户登录名。当使用浏览器访问受限页面时,可以看到这种身份验证,并且浏览器将显示一个登录对话框。当遇到此类页面时,JMeter可通过HTTP授权管理器发送登录信息
添加HTTP授权管理器:线程组>添加>配置元件>HTTP授权管理器。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 在每次迭代中清除认证?:如果选中此项,即使在上一个线程组循环中已经进行了身份验证,也将在每次迭代中进行身份验证。
- Use Thread Group configuration to control clearing:使用线程组配置来控制清除
- 基础URL:与一个或多个HTTP请求URL匹配的部分或完整URL
- 用户名:用于授权的用户名
- 密码:用户的密码。(注意,未加密存储在测试计划中)
- 域:用于NTLM的域
- Realm:用于NTLM的Realm
- Mechanism:要执行的身份验证类型。JMeter可以根据使用的Http Samplers执行不同类型的身份验证。Java:BASIC ;HttpClient 4:BASIC, DIGEST 和 Kerberos
7.FTP默认请求
被用于设置FTP请求的默认值
添加FTP默认请求:线程组>添加>配置元件>FTP默认请求。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 服务器名称或IP:FTP服务器的域名或IP地址 (必填項)
- 远程文件:FTP服务器的文件路径,下载时有效
- 本地文件:本地文件要上传的路径
- 本地文件内容:提供上传内容,忽略本地文件属性,如果上传必填
- get(RETR):表示下载文件
- put(STOR):表示上传文件
- 使用二进制模式?:表示是否使用二进制模式
- 保存文件响应?:将下载文件的相应数据保存到结果树中(使用二进制模式下载时可用)
8.JAVA 默认请求
添加JAVA默认请求:线程组>添加>配置元件>JAVA默认请求。
3.添加取样器
- HTTP请求
用来向服务器发送HTTP/HTTPS请求
添加HTTP请求:线程组>添加>取样器>HTTP请求。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 协议:向目标服务器发送的HTTP请求时的传输协议,可设置为http或https,默认为http
- 服务器名称或IP:接受HTTP请求的目标服务器名称或IP地址
- 端口号:目标服务器的端口号,缺省值为80
- HTTP请求方法:可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等;
- 路径:URL路径
- 内容编码:请求内容的编码方式
- 自动重定向:选中则表示,当发送HTTP请求后若响应为301/302,Jmeter会自动重定向到对应的新页面,但不会记录重定向的请求和响应内容,只有GET和HEAD请求才能使用自动重定向。
- 跟随重定向:自动重定向未勾选时,该选项才有用,默认选中,表示响应为301/302时,会自动跳转到目标页,初始重定向和进一步响应将作为附加样本出现。父取样器的URL和data字段的值取自最后一个非重定向取样器。但是父取样器的字节数和间隔时间将包含所有取样器的,而latency的值则是取自第一个响应。
- 使用 keep-alive:当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。在默认HTTP实现下它不起作用,因为连接重用不在用户控制之下。但在Apache HttpComponents HttpClient下它是起作用的。
- 对POST使用multipart/form-data:使用 multipart/from-data或application/x-www-form-urlencoded方法发送HTTP POST 请求,默认不选中。
2.FTP请求
实现文件的上传下载
添加FTP请求:线程组>添加>取样器>FTP请求。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 服务器名称或IP:FTP服务器的域名或IP地址(必填项)
- 端口号:FTP服务器的端口号,默认使用ftp端口号
- 远程文件:FTP服务器的文件路径,下载时有效
- 本地文件:本地文件要上传的路径
- 本地文件内容:提供上传内容,忽略本地文件属性
- get(RETR):表示下载文件
- put(STOR):表示上传文件
- 使用二进制模式?:表示是否使用二进制模式
- 保存文件响应?:将下载文件的相应数据保存到结果树中(使用二进制模式下载时可用)
- 用户名和密码:ftp服务器的登录用户名和密码
3.调试取样器
结合查看结果树可查看jmeter属性、运行变量、系统属性
添加调试取样器:线程组>添加>取样器>DeBug Sampler。
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- Jmeter属性:jmeter.properties文件中定义的属性,默认不展示(false)
- Jmeter变量:jmeter运行时变量,包括自定义变量、脚本运行时添加的变量等,默认展示(true)
- 系统属性:系统属性值,默认不展示(false)
4.添加逻辑控制器
- 循环控制器
添加循环控制器:线程组>添加>逻辑控制器>循环控制器。
- 使用循环控制器
其实大家对Jmeter的熟悉的话,应该会想到,线程组 这个设置界面也是有一个循环次数的设置,那么到底他们两个有什么关联呢。我理解为父子关系。
下面举个例子,
首先在线程组中设置循环次数3,循环控制器中设置循环测试2,其他默认,添加一个计时器,方便查看结果,如下:
执行后,查看结果树:
理解为:一秒发送一个请求,循环三次,每次循环中又循环两次。
for(int i=1;i<=3;i++){ 线程组中的循环
for(int j=1;j<=2;j++){ 循环控制器中的循环
执行
}
}
使用场景:一对多的关系。比如 创建一个部门,然后在该部门下创建多个员工。就用到了循环控制器。
2.交替控制器
如下,在线程组下面创建一个交替控制器:
添加交替控制器:线程组>添加>逻辑控制器>交替控制器。
设置界面如下:
忽略资(子)控制器块:如果勾选,则将子控制器作为一个请求,只执行一次。如果不勾选,则子控制器中样例都执行。
Interleave across threads:(这个选项 我理解的还不够透彻,后期慢慢补充)
二、简单使用交替控制器
首先在交替控制器下添加3个样例,线程组下添加一个样例,与交替控制器同层级,线程组设置循环次数为2,执行结果,如下:
三、交替控制器相互嵌套
创建一个父交替控制器,其下两个子交替控制器,子交替控制器下面分别添加2个样例,设置线程组循环次数5,如下:
四、忽略子控制器块
在交替控制器的设置界面,有这样一个选项,是否忽略子控制器,所以这里一般也是交替控制器作为父级控制器时使用的选项,
这里的子控制器一般指非交替控制器的其他控制器 (如果子控制器也是交替控制器,该项实际和交替控制器的嵌套效果一样了)
下面,我们在交替器下添加一个循环控制器,设置循环次数 2,线程组循环次数设置为 3,设置交替器 勾选 忽略子控制器,执行后如下结果:
下面,我们再把交替控制器中 忽略子控制器 去掉勾选,其他设置不变,看看执行结果:
3.仅一次控制器
添加仅一次控制器:线程组>添加>逻辑控制器>仅一次控制器。
在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍
如果仅一次控制器在循环控制器内,循环控制器会执行 2 次,所以仅一次控制器也会执行 2 次
4.随机控制器
添加随机控制器:线程组>添加>逻辑控制器>随机控制器。
随机控制器:随机控制器的作用类似于交替控制器,不同在于它不是通过其子控制器和采样器按顺序排列,而是在随机选取一个。
示例:添加随机控制器,设置线程组设置循环次数为6,向线程组添加一个”获取文件列表“请求。向交替控制器添加两个请求:“下载文件A”、“下载文件B"
5.随机顺序控制器
添加随机顺序控制器:线程组>添加>逻辑控制器>随机顺序控制器。
随机顺序控制器与简单控制器相似,控制器下的所有请求都将被执行,不同的是,简单控制器按照顺序执行,而随机顺序控制器中请求的执行顺序是随机的。
当控制器被触发时,将控制器下的所有子节点顺序打乱执行一遍,执行一遍,执行一遍,不是执行一个。
6.简单控制器
添加简单控制器:线程组>添加>逻辑控制器>简单控制器
简单控制器,顾名思义就是功能比较简单,可以理解为一个文件夹,或起到分组作用,并不具有任何的逻辑控制或运行时的功能
5.添加断言
- 响应断言
响应断言即是对服务器的响应数据进行规则匹配
添加响应断言:线程组>添加>断言>响应断言
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器
- Main sample only:匹配范围是当前父取样器
- Sub-samples only:仅匹配子取样器
- Jmeter Variable Name to use:支持对JMeter变量值进行匹配
- 响应文本:响应服务器返回的文本内容
- 响应代码:匹配响应代码,比如返回代码“200”表示成功
- 响应信息:匹配响应信息,比如处理成功返回“成功”字样
- 响应头:匹配响应中的头信息
- 请求头:请求中的头信息
- URL样本:匹配URL链接
- 文档(文件):对文档内容进行匹配
- 忽略状态:当第一个断言失败时可以忽略
- 请求数据:请求数据
- 包括:响应内容包括需要匹配的内容即代表响应成功
- 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则
- 相等:响应内容要完全等于需要匹配的内容才代表响应成功,大小写敏感,匹配内容是字符串非正则表达式
- 字符串:响应内容包含需要匹配的内容才代表响应成功,大小写敏感,匹配内容是字符串非正则表达式
- 否:选择Equals与Substring时匹配的是字符串,大小写敏感,有时会响应失败,此时可以选择此项,会降低匹配级别,类似降到“包括”、“匹配”的级别,这样可以响应成功
- 测试模式:填入匹配的字符串或正则表达式
2.JSON断言
JSON断言分析:
1、返回的数据必须的JSON格式,否则会解析失败。
2、他将JsonPath语法搜索指定的路径,找不到路径,则会失败。JSONPath - XPath for JSON 这个网址去学习JSON语法。
3、JSON是键值对形式存在,通过路径找到键,可以对该键的值进行校验。
4、如果键的值为null,GUI中有复选框(Expect null),勾选上则表示以null作为预期值。
5、如果路径找到的数组对象(在列表页中比较常见这种情况),则会对数组中的数据进行轮询。如果其中有一个值和预期值匹配,那么断言也是成功的。
6、返回的是字典对象,则需要转为字符串后再进行比较。
添加JSON断言:线程组>添加>断言>JSON断言
JSON断言界面参数说明:
1、名称:节点的名称,显示在查看结果树中,自己根据实际情况定义。
2、注释:对该节点进行注释。
3、断言存在JSON路径:断言JSON元素的路径。
可以直接在查看结果树中进行JSON语法的测试。测试ok了再直接放在JSON断言中。
$ 表示跟节点。
[] 表示数组,0表示第一个;$[0] 表示跟节点后的第一个对象。
resultcode 即key,这里要获取resultcode的值,所以填写resultcode。
3.大小断言
返回的字节大小符合指定的,就是成功。
添加大小断言:线程组>添加>断言>大小断言
6.添加定时器
- 固定定时器
如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
添加固定定时器:线程组>添加>定时器>固定定时器
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 线程延迟(毫秒):设置停顿的时长
2.高斯随机定时器
如需要每个线程在请求前按随机时间停顿,那么使用这个定时器
添加高斯随机定时器:线程组>添加>定时器>高斯随机定时器
3.同步定时器
同步定时器又是集合点,表示将线程数集合到设置的数量后同时释放给线程组。同步定时器是在线程组请求之前执行的。
添加同步定时器:线程组>添加>定时器>Synchronizing Timer
- 名称:可以随机设置,最好有业务意义
- 注释:可以随意设置,可以为空
- 模拟用户组的数量:设置同步的线程数
- 超时时间以毫秒为单位:超时时间
4.统一随机定时器
定时器是在每个sampler(采样器)之前执行的
如果想加个随机等待时间可以用到jmeter里面的统一随机定时器(Uniform Random Timer)。也有的说叫均匀随机定时器(Uniform Random Timer)都是一个。
和高斯随机定时器的作用差异不大,区别在于延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和。
该定时器可以在请求之间设置一个随机延时,每个随机延时有相同的发生概率。
Random Delay Maximum(in milliseconds): 随机延迟最大的时间 单位毫秒
Constant Delay Offset(in milliseconds):固定延迟时间 单位毫秒
延迟时间的计算公式
总的延时 = 固定延迟时间 + 随机生成的延时
比如设置固定延迟时间(Constant Delay Offset)为2000毫秒,最大随机时间Random Delay Maximum 设置500毫秒
那么总的延迟时间范围是2000毫秒~2500毫秒之间的值
5.泊松随机定时器
这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。
上面表示暂停时间会分布在100到400毫秒之间:
(1)Lmbda(in milliseconds):兰布达值
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数