主流测试工具
Loadrunner
简介
- HP Loadrunner是一种工业级标准性能测试负载工具,可以模拟上万用户实施测试,并在测试时可实时检测应服务器及服务器硬件各种数据,来确认和查找存在的瓶颈;
- 支持多协议:Web(HTTP/HTML)、Windows Sockets、FTP、ODBC、MS SOL Server等协议;
- 采用c语言编写;
优缺点
优点 | 缺点 |
---|---|
多用户(支持用户以万为单位) | 体积庞大(安装包单位GB) |
支持IP欺骗功能 | 收费 |
详细的分析报表(以秒为单位) | 无法定制功能 |
JMeter
简介
- JMeter是Apache组织开发的基于Java的开源软件,用于对系统做功能测试和性能测试。
- 它最初被设计用于web应用测试,但后来扩展到其他测试领域,例如静态文件、Java程序、shell脚本、数据库、FTP、Mail等。
优缺点
开源免费 | 不支持IP欺骗 |
小巧(安装包50MB左右) | 分析和报表能力相对于LR欠缺精度(以分钟为单位) |
丰富的学习资料和扩展组件 |
工具对比
主流性能测试工具Loadrunner和Jmeter对北比一相同点:
1)都能模拟大量用户;
2)都能支持多协议(常见的协议都支持,如:HTTP);
3)都有监控及分析报表功能;
主流性能测试工具Loadrunner和Jmeter对北比一不同点:
工具 用户量 分析报表 IP欺骗功能 费用 体积 扩展性 Loadrunner 多(万) 精确(秒) 支持 收费 大 不能扩展 Jmeter 少 较差(分钟) 不支持 免费 小 支持组件
JMeter安装
1、JMeter 是使用 Java 编写的,必须安装 Java 环境:
- JDK: Java SE Development Kit (java 开发工具包,为 JAVA 程序开发提供环境支持);
- JRE: Java Runtime Environment (java 运行环境,为 JAVA 程序运行提供环境支持) ;
2、下载并安装 JMeter 下载: https://jmeter.apache.org/download_jmeter.cgi ;
3、安装: 直接解压缩即可 ;
JMeter文件目录简介
Bin目录
存放可执行文件和配置文件;
docs目录
JMeter的api文档,用于开发扩展组件。
printable_docs目录
用户帮助手册。
lib目录
存放JMeter依赖的jar包和用户扩展所依赖的jar包。
常用目录
修改配置
中文语言
找到JMeter安装目录下的bin目录;
打开jmeter.properties文件,把第37行修改,删除注释符;
改为”language=zh_CN”;
重启JMeter即可;
中文乱码
- 找到JMeter安装目录下的bin目录;
- 打开jmeter.properties文件,把第1062行修改,删除注释符;
- 改”ISO-8859-1”为”UTF-8”;
- 重启JMeter即可;
修改主题
JMeter默认主题是黑色的,可以通过以下步骤修改:
- 启动JMeter–> 选择菜单“选项”–> 外观–> Windows(选择自己喜欢的主题即可)。
元件和组件的介绍
元件的基本介绍
元件:多个类似功能组件的容器(类似于类)。
组件的基本介绍
组件:实现独立的某个功能(类似于方法)。
自动化脚本对应着JMeter元件
自动化脚本 | JMeter元件 |
---|---|
初始化测试数据 | 配置元件 |
对请求参数化进行赋值 | 前置处理器 |
调用GET/POST方法发送请求 | 取样器 |
提取响应中特定字段的值 | 后置处理器 |
对提取出来的值与预期结果进行对比 | 断言 |
在控制台查看脚本运行结果 | 监听器 |
元件作用域和执行顺序
元件作用域的原则
取样器:核心,没有作用域。
逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用。
其他元件:
- 如果是某个取样器的子节点,则该元件只对其父节点起作用;
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);
元件的执行顺序
同一作用域下不同元件:配置元件–> 前置处理程序–> 定时器–> 取样器–> 后置处理程序–> 断言–> 监听器。
同一作用域下相同元件:从上到下的顺序依次执行。
经典案例
正确顺序:定时器1–>请求1–>定时器1–>定时器2–>请求2–>定时器1–>定时器3–>请求3。
JMeter使用示例
JMeter第一个案例
需求:使用JMeter访问百度首页接口,并查看请求和响应信息。
步骤:
- 启动JMeter;
- 在测试计划下添加线程组;
- 在线程组下添加取样器HTTP请求;
- 填写HTTP请求的相关请求数据;
- 在线程组下添加监听器察看结果树;
- 点击启动按钮运行,并查看结果;
线程组
什么是线程组
控制JMeter用于执行测试的一组用户。
线程组的分类
- Setup线程组:预测试操作,所有脚本之前执行;
- 普通线程组:执行测试用例,可以有1个或者多个(并行/串行);
- Teardown线程组:测试后操作,所有脚本之后执行;
参数详解
如何设置如下场景线程组
案例分析
使用1个线程组,添加HTTP请求(百度):
- 配置线程数为2,循环次数为3时,运行观察结果;
- 配置线程数为3,循环次数为2时,运行观察结果,对比不同;
分析:
- 线程数代表虚拟用户数,用户数越多,负载越大;
- 循环次数代表运行时间,次数越多,运行时间越长;
取样器
HTTP请求
作用:向服务器发送http请求及https请求。
位置:选中线程组->右键->添加->取样器->HTTP请求。
参数:
如何配置来发送HTTP请求
发送GET请求(请求参数在路中):
URL:协议、服务器域名或IP、端口、方法(GET)、路径、编码格式。
参数:- 在路径后添加参数。格式:?键名=键值&键名=键值;
- 在参数列表中添加参数。格式:名称(键名)、值(键值);
发送PoST请求(请求参数在消息体数据中)。
URL:协议、服务器域名或IP、端口、方法(POST)、路径、编码格式。
参数:- 在消息体数据中添加请求体(form/json);
- 在参数列表中添加参数(form);
查看HTTP消息请求和响应内容
查看请求参数:
- 请求 - Request Body(请求行+请求体)。
查看响应结果:
- 响应数据 - Response Body(响应体)。
接口测试技术要点
参数化
参数化测试
定义:把测试数据组织起来,用不同的测试数据调用相同的测试方法。
本质:实现测试数据和测试方法的分离。
实现方式:
- 用户定义的变量一一> 全局变量;
- 用户参数一一> 为每个用户分不同的参数值;
- CSV数据文件设置一一> 文件方式参数化;
- 函数一一> 随机数据;
- 数据库一一> 数据实体;
用户定义的变量
作用:定义全局变量
位置:测试计划 –> 线程组 –> 配置元件 –> 用户定义的变量。
参数:
使用步骤:
- 添动加线程组;
- 添加用户定义的变量,格式:变量名-变量值;
- 添加HTTP请求,引用定义的变量名,格式:${变量名};
- 添加查看结果树;
用户参数(用户数,针对用户)
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值。
位置:测试计划–> 线程组–> 前置处理器–> 用户参数。
参数:
使用步骤:
- 添动加线程组,设置线程组数为n(表示模拟的用户数);
- 添加用户参数;
- 第一列添加多个变量名;
- 后续每一列为一组用户的数据;
- 添加HTTP请求,引用定义的变量名,格式:${变量名};
- 添加查看结果树;
CSV数据文件设置(循环数,针对循环)
作用:当不同的用户或者同一个用户多次循环时,都可以获取到不同的值。
位置:测试计划–> 线程组–> 配置元件–> CSV数据文件设置。
参数:
使用步骤:
- 定义CSV数据文件;
- 添动加线程组;
- 添加CSV数据文件设置;
- 添加HTTP请求,引用定义的变量名。格式:${变量名};
- 添加查看结果树;
函数(计数函数)
作用:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义(计数函数,一般做执行次数统计使用)。
位置:在菜单中选择 –> 选项 –> 函数助手对话框。
参数:
使用步骤:
- 添加线程组,设置虚拟用户数和循环次数;
- 生成;
- 添加HTTP请求,使用counter函数。格式:${_counter(FALSE,)};
- 添加查看结果树;
四种参数化方式区别和选择
用户定义的变量:
作用:定义全局变量;
局限性:每次取值(无论是否相同的用户)都是固定值;
用户参数:
- 作用:保证不同的用户针对同一组参数,可以取到不同的值;
- 局限性:同一个用户在多次循环时,取到相同的值;
CSV数据文件设置:
- 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值;
- 局限性:需要手动进行测试数据的设置;
函数:
- 作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置;
- 局限性:输入数据有特定的业务要求时无法使用(如:登陆时的用户名密码);
案例说明
某支付系统,需要用1000个不同的用户登录,并使用添加不同的测试金额数据访问支付接口?
- 准备CSV数据文件一一1000个登录的用户名密码;
- 添加线程组;
- 添加CSV数据文件设置;
- 添加HTTP请求–>登录,使用读取的用户名密码;
- 添加HTTP请求–>支付一一使用counteri函数添加不同的测试金额;
- 查看结果树;
断言
定义:让程序自动判断预期结果和实际结果是否一致。
- JMeter在请求的返回层面有个自动判断机制(响应状态码)
- 但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。
JMeterl中常用断言
- 响应断言;
- JSON断言;
- 持续时间断言(Duration Assertion);
响应断言
什么时候可以使用响应断言
- 任意HTTP请求的响应结果,都可以使用响应断言。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)断言–> 响应断言。
参数:
参数配置详细介绍
测试字段:要检查的项(实际结果)
- 响应文本:来自服务器的响应文本,即主体;
- 响应代码:响应的状态码,例如:200;
- 响应信息:响应的信息,例如:OK;
- Response Headers:响应头部;
- Request Headers:请求头部;
- Request Data:请求数据;
- URL样本:请求URL;
- Document(text):响应的整个文档;
- 忽略状态:忽略返回的响应状态码;
模式匹配规则:比较方式
包括:文本包含指定的正则表达式;
匹配:整个文本匹配指定的正则表达式;
Equals:整个返回结果的文本等于指定的字符串(区分大小写);
Substring:返回结果的文本包含指定字符串(区分大小写);
否:取反;
或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是0K),不勾选代表逻辑与(所有都必须匹配,断言才是OK);
Egua1s和Substring模式是普通字符串,而包括和匹配模式是正则表达式
测试模式:预期结果
- 即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理。
使用步骤:
- 添加线程组;
- 添加HTTP请求;
- 添加响应断言;
- 测试字段:要检查的项(实际结果);
- 模式匹配规则:比较方式;
- 测试模式:预期结果;
- 添加查看结果树;
JSON断言
作用:对HTTP请求的JSON格式的响应结果进行断言。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)断言–> JSON断言。
参数:
参数介绍:
- Assert JSON Path exists:用于断言的JSON元素的路径(实际结果);
- Additionally assert value:如果您想要用某个值生成断言,请选择复选框;
- Match as regular expression:使用正则表达式断言;
- Expected Value:期望值(期望结果);
- Expect null:如果希望为空,请选择复选框;
- Invert assertion (will fail if above conditionsmet):反转断言(如果满足以上条件则失败);
使用步骤:
- 添加线程组;
- 添加HTTP请求;
- 添加JSON断言;
- 填写Assert JSON Path exists(实际结果-json路径);
- 勾选A,dditionally assert value;
- 填写Expected Value(期望结果);
- 添加查看结果树;
断言持续时间
作用:检测HTTP请求的响应时间是否超出要求范围
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)断言–> 断言持续时间
参数:
参数介绍:
- 持续时间(毫秒):HTTP请求允许的最大响应时间(单位:毫秒),超过则认为失败。
使用步骤:
- 添加线程组;
- 添加HTTP清求;
- 添加断言持续时间;
- 填写持续时间(允许的最大响应时间,单位:ms);
- 添加查看结果树;
三种断言方式不同和选择
响应断言:
- 场景:可以针对任意格式的响应数据进行断言。
JSON断言:
- 场景:当响应数据为JSON格式时,优先使用JSON断言。
断言持续时间:
- 场景:检查HTTP请求的响应时间是否满足要求时,使用断言持续时间。
Jmeter会自动判断响应状态码(如果状态码为4xx/5xx,判定为失败)。
关联
什么是关联
当前请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候需要用到关联处理。
常用的关联方法
- 正则表达式提取器;
- Xpath提取器;
- JSON提取器;
正则表达式
正则表达式介绍
- 就是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容。
案例讲解
1 | <title>百度一下,你就知道</title><title>百度一下,你就知道</title> |
- 左边界(.*?)右边界:可以提取出想要获取的数据内容;
- “.”:是通配符,可以代表任意字符(除换行回车);
- “*”:代表前面的字符出现0次或者多次;
- “.*”:匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来,只有一个左右边界,中间都取;
- “?”: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找:再次查找左边界和右边界,只取每个左右边界中间部分;
案列示范
1 | 原始文本: |
要求:匹配出城市号、地区号、个人号码三组。
正则表达式匹配:(.*?)-(.*?)-(.*?)\n
结论:
- 通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可;
- 每一组数据都可以有一个或者多个值;
正则表达式提取器
作用:针对任意格式的响应数据进行提取。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)后置处理器–> 正则表达式提取器。
参数:
参数介绍:
引用名称:存放提取出的值的参数名称,供下一个请求引用,如填写title,则可用${title}引用它
正则表达式;():括起来的部分就是要提取的;
.:匹配任何字符串;
+:一次或多次;
?:不要太贪婪,在找到第一个匹配项后停止;
模板:用$$引用起来,如果在正则表达式中有多个提取值,则可以是$2$ $3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值;
匹配数字:0:代表随机取值,-1:代表全部取值,1:代表取第一个值;
缺省值:如果参数没有取得到值,那默认给一个值让它取;
使用步骤:
- 添加线程组;
- 添加HTTP请求-传智播客;
- 添加正则表达式提取器:
- 引用名称:存放提取出的值的参数名称,如填写title;
- 正则表达式:左边界(.*?)右边界;
- 模板:用$$引用起来,表示解析出第几个()的值;
- 匹配数字:1:表示第1个值,-1:表示所有取值;
- 添加HTTP请求-百度;
XPath提取器
作用:针对HTML格式的响应结果数据进行提取。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)后置处理器–> XPath提取器。
参数:
参数介绍:
- Use Tidy (tolerant parser):
- 当需要处理的页面是HTML格式时,必须选中该选项;
- 当需要处理的页面是L或XHTML格式时,取消选中该选项;
- 引用名称:存放提取出的值的参数名称;
- XPath Query:用于提取值的XPath表达式;
- 匹配数字:如果XPath路径查询出许多结果,则可以选择提取哪个;
- 0:表示随机,-1:表示提取所有结果,1:表示第一个值
- 缺省值:参数的默认值;
使用步骤:
- 添加线程组;
- 添加HTTP请求-传智播客;
- 添加XPATH提取器:
- 勾选Use Tidy(tolerant parser);
- 引用名称:存放提取出的值的参数名称。如:填写title;
- XPath Query:用于提取值的XPath表达式;
- 匹配数字:0:表示随机,-1:表示提取所有结果,1:表示第一个值;
- 添加HTTP请求-百度;
- 引用正则表达式中的引用名称。如:用${title}引用它;
- 添加查看结果树;
JSON提取器
作用:针对JSON格式的响应结果数据进行提取。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)后置处理器–> JSON提取器。
参数:
参数介绍:
- Names of created variables:存放提取出的值的参数名称;
- JSON Path Expressions:JSON路径表达式;
- Match No:如果JSON路径匹配出许多结果,则可以选择提取哪个;
- 0:表示随机,-1:表示提取所有结果,1:表示第一个值
- Default Values:参数的默认值;
使用步骤:
- 添加线程组;
- 添加HTTP请求——天气;
- 添加JSON提取器:
- Names of created variables:存放提取出的值的参数名称。如:city;
- JSON Path Expressions:用于提取值的JSON路径表达式;
- Match No:0:表示随机,-1:表示提取所有结果,1:表示第一个值;
- 添加HTTP请求——百度;
- 引用正则表达式中的引用名称。如:用$(c1ty)引用它
- 添加查看结果树;
JMeter属性
作用:需要实现跨线程组的数据传输时,可以使用JMeter属性。
位置:测试计划–>线程组–>BeanShell–>(_setProperty)。
参数:
_setProperty函数:将值保存成JMeter属性。
- 需要通过BeanShell取样器来执行
property函数:在其他线程组中使用property函数读取属性。
- 在其他线程组中使用property函数
使用步骤:
- 添加线程组;
- 添加HTTP请求——天气;
- 添加JSON提取器;
- 添加BeanShell取样器(将JSON提取器提取的值保存为JMeter/属性);
- 保存Meter属性:${_setProperty(pro_city,${city},)}
- 添加HTTP请求-百度(读取JMeter属性);
- 读取JMeter属性:${_property(pro_city,,)}
- 添加查看结果树;
三种关联方式不同选择
同一个线程组内,多个请求之间的关联:
- 如果响应数据为JSO格式,优先使用JSON提取器进行关联;
- 如果响应数据为HTML格式,优先使用XPath提取器进行关联;
- 如果JSON提取器和XPath提取器都无法实现关联,使用正则表达式提 取器进行补充一针对任意格式的响应数据;
不同线程组之间,多个请求之间的关联:
- JSON提取器 + JMeter属性;
- XPath提取器 + JMeter属性;
- 正则表达式提取器 + JMeter属性;
录制脚本
作用:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本。
原理:
使用步骤:
添加HTTP代理服务器,并进行配置:
1)加HTTP代理服务器:测试计划(右键)–> 非测试元件–> HTTP代理服务器;
2)配置代理服务器的参数:
设置端口:代理服务器的端口号;
目标控制器:录制的脚本放到哪个容器(线程组)中;
Requests Filtering(过滤条件 - url匹配正则表达式):
包含模式:包含此项,如:,.localhost.:;
排除模式:不包含此项,如:..jpg ..png .*.js;
开启Windows操作系统的浏览器代理;
开启代理服务器,开始录制;
在浏览器页面中进行操作,成功后就能在JMeter当中看到抓取到的接口请求了;
直连数据库
使用场景
用作请求的参数化;
用作结果的断言;
清理测试数据;
准备测试数据;
关键配置
添加MySOL驱动jar包:
方式一:在测试计划面板点击“浏览“按钮,将你的JDBC驱动添进来;
方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter;
配置数据库连接信息:
添加方式:测试计划–> 线程组–>(右键添加)配置元件–> JDBC Connection Configuration;
参数介绍:
- Variable Name:mysql数据库连接池名称(JDBc请求时要引用);
- Database URL:jdbc:mysql://localhost:3306/tpshop2.0;
组成:协议 + 数据库IP + 数据库端口 + 连接的数据库名称; - JDBC DRIVER class:com.mysql.jdbc.Driver(MySQL驱动包位置固定格式 —— 下拉框选择);
- Username:root(连接数据库用户名,如实填写);
请求JDBC请求
添加方式:测试计划 –> 线程组 –> 取样器 –> JDBC Request。
参数介绍
- Variable Name:数据库连接池的名字,需要与JDBc Connection Configurationvariable Name Bound Poo1名字保持一致;
- Query Type:
- 查询操作:选择”Select Statement”;
- 增加、删除、修改操作:选择”Update Statement”;
- Query:填写的SQL语句,未尾不要加”;“;
- Variable names:保存SQL语句返回结果的变量名;
使用步骤
- 添加线程组;
- 添加JDBC Connection Configuration;
- 添加JDBC request;
- 添加HTTP请求–搜索商品;
- 在搜索HTTP请求下,添加响应断言,检查响应结果中的字符是否包含商品URL(URL中含ID);
- 添加查石结果树;
逻辑控制器
作用:可以按照设定的逻辑抗旨取样器的执行顺序。
常用逻辑控制器:
- 如果(If)控制器;
- 循环控制器;
- ForEach控制器;
(If)控制器
作用:if控制器用来控制它下面的测试元素是否运行。
位置:测试计划–> 线程组 –>(右键添加)逻辑控制器–> 如果(If)控制器。
参数:
使用步骤:
- 添加线程组;
- 用户定义的变量;
- 添加If控制器,判断name是否等于baidu:
- 不勾选Interpret Condition,’${name}’==’baidu’;
- 勾选,${__jexl3(‘${name}’==’baidu’,)};
- 添加HTTP请求,用来访问百度;
- 添加If控制器,判断name是否等于itcast;
- 添加HTTP请求,用来访问传智播客;
- 添加查看结果树;
循环控制器
作用:通过设置循环次数,来实现循环发送请求。
位置:测试计划–> 线程组 –> (右键添加)逻辑控制器–> 循环控制器。
使用步骤:
- 添加线程组;
- 添加循环控制器——设置循环次数;
- 添加HTTP请求;
- 添加查看结果树;
线程组循环和循环控制器的区别
- 不同点:线程组的循环次数对线程组下的所有HTTP请求有效,循环控制器的循环次数对子节点下的HTTP请求有效;
- 关联:循环控制器次数为M,线程组循环次数为N:
- 循环控制器下的请求运行:M*N 次
- 线程组下,非循环控制器下的请求运行:N次
ForEach控制器
作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量(该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值)。
位置:测试计划–> 线程组–>(右键添加)逻辑控制器–> ForEach控制器。
参数:
参数介绍:
- 输入变量前缀:要读取的输入变量的固定前缀;
- 开始循环字段:要读取的输入变量后缀数字的最小值-1;
- 结束循环字段:要读取的输入变量后缀数字的最大值;
- 输出变量名称:读取输入变量的值后保存的新变量名,于后续HTTP请求来引用;
使用步骤:
- 添加线程组;
- 添加用户定义的变量/正则表达式提取器;
- 返回一组变量。特点:相同的变量名+连续的数字后缀,如:name_l..name_3
- 添加ForEach控制器:
- 输入变量前缀:要读取的输入变量的固定前缀,如:name;
- 开始循环字段:要读取的输入变量后缀数字的最小值-1,如:0;
- 结束循环字段:要读取的输入变量后缀数字的最大值,如:3;
- 输出变量名称:读取输入变量的值后保存的新变量名,如word;
- 添加HTTP请求-百度:
- 引用ForEach控制器中保存的新变量名,如:${word};
- 查看结果树;
定时器
同步定时器
作用:同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。
JMeter中叫做同步定时器,Load runner中叫做集合点
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)定时器–> Synchronizing Timer。
参数:
参数介绍:
- Number of simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量:
- 若设置为0,等于设置为线程组中的线程数量
- Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数:
- 如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等;
- 如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程,默认为0;
使用步骤
- 添加线程组,设置线程数为 n;
- 添加HTTP请求;
- 添加同步定时器:
- 设置并发线程数:同时发送请求的虚拟用户数;
- 设置超时时间:
- 建议设置:不设置的话,若没有达到设置的线程数会一直死等;
- 不能设置太小:等待时间后还没达到设置的线程数,会释放已到达的线程;
- 添加查看结果树;
常数吞吐量定时器
作用:让JMeter按指定的吞吐量执行,以每分钟为单位。
位置:测试计划–> 线程组–> HTTP请求–>(右键添加)定时器–> Constant Throughput Timer。
参数:
参数介绍:
- Target throughput(in samples per minute):目标吞吐量。注意这里是每个用户每分钟发送的请求数。
使用步骤:
- 添加线程组,循环次数设置成永远;
- 添加HTTP请求;
- 添加常数吞吐定时器:
- 设置目标吞吐量:每个用户每分钟发送的请求数;
- 计算方法:要求QPS*60/线程数;
- 添加查看结果树;
案例要求:
- 模拟用户真实的业务场景要求:20 QPS;
- 如果线程数设置为1,则目标吞吐量设置为:20*60=1200;
- 如果线程数设置为2,则目标吞吐量设置为:20*60/2=600;
- 本文作者: 小邓同学
- 本文链接: https://dyasher.github.io/2022/10/23/JMeter基础——性能测试/
- 版权声明: 该文章版权归作者DYaher所有,未经授权其他任何机构和个人不得以盈利为目的非法转载和使用。违反此声明者,本人将依法追究其法律责任。