性能测试笔记2-总

news2024/10/6 7:17:39

安装路径:先装jdk,后装JMeter

安装JDK:
下载JDK – 安装JDK – 配置环境变量 – 验证
安装Jmeter:
下载Jmeter – 安装Jmeter – 配置环境变量 – 启动验证
注意点:
下载JDK时,注意电脑操作系统是32位/64位
下载Jmeter时,注意与本机安装的JDK版本匹配
安装Jmeter时,安装路径中不能有中文/空格

JMeter文件目录结构:

Bin目录:存放的可执行的文件和配置文件

docs目录:是api文档,用于开发扩展的组件

printable_docs 目录:用户帮助手册

lib目录:存放HMeter依赖的jar包和用户扩展的所需要的jar包(在ext文件中)

修改默认配置 —— JMeter界面的汉化

永久性 —— 修改配置文件:
1. 找到jMeter安装目录下的bin目录
2. 打开jmeter.properties文件,把#language=en修改为 “language=zh_CN”
3. 重启JMeter即可
临时性:
启动JMeter->选择菜单‘Options’->Choose Language->Chinese (Simplified)

元件

含义:多个类似功能组件的容器(类似于)(相当于 容器的集合

取样器:发送请求

逻辑控制器:控制语句的执行顺序

前置处理器:对请求参数进行预处理

后置处理器:对响应结果进行提取

断言:检查接口返回结果是否与预期结果一致

定时器:设置等待

测试片段:封装一段代码,供其他脚本调用

配置元件:测试数据的初始化配置

监听器:查看jmeter脚本的运行结果

组件
含义: 实现独立的某个功能(类似于 方法 类似 取样器 中 http请求
如下接口自动化脚本的实现过程对应着 Jmeter 哪个元件?
1. 初始化测试数据    —— 配置元件
2. 对请求参数进行赋值   —— 前置处理器
3. 调用GET/POST方法发送请求   —— 取样器
4. 提取响应中特定字段的值   —— 后置处理器
5. 对提取出来的值与预期结果进行对比   —— 断言
6. 在控制台查看脚本运行的结果   —— 监听器
元件与组件有什么关系 ?
元件: 多个类似功能组件的 容器 (类似于
组件: 容器中 实现独立的某个功能(类似于 方法
元件的作用域: 是靠测试计划的树形结构中元件的 父子关系 来确定的。
所有的组件都是 以取样器为核心 来运行的。(如果在它们的作用域内没有任何取样器,则不会被执行)
Jmeter元件作用域的原则?
取样器:核心,不和其他元件相互作用,没有作用域
逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
其他元件:
        如果是某个取样器的子节点,则该元件只对其父节点起作用
        如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
元件的执行顺序:
同一个作用域下不同类型元件:配置元件 - 前置处理程序 - 定时器 - 取样器 - 后置处理程序 - 断言 - 监听器
同一个作用域下多个相同类型元件: 按照在测试计划中从上到下的顺序依次执行

线程组:

线程组就是控制JMeter用于执行测试的一组用户(一个线程理解为一个测试用户

位置: 右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组
特点:
模拟用户,支持多用户操作
多个线程组可以串行执行,也可以并行执行
线程组分类:
Setup线程组: 预测试操作,所有脚本之前执行
普通线程组: 执行测试用例,可以有1个或者多个(并行/串行)
Teardown线程组: 测试后操作,所有脚本之后执行
线程组 —— 参数详解
案例分析:
使用 1 个线程组,添加 HTTP 请求(百度)
配置线程数为 2 ,循环次数为 3 时,运行观察结果
配置线程数为 3 ,循环次数为 2 时,运行观察结果,对比是否有不同
相同点:从请求数量来说,是完全相同的
不同点:场景不同
线程数:代表用户数,即性能测试时的负载量(线程数为 2 比线程数为 3 对应的负载量小)
循环次数:代表时间,即性能测试时的运行时间(循环次数 3 比循环次数 2 对应的时间长)
HTTP 请求:
参数介绍:
作用: 向服务器发送 http(端口号80) https(端口号443) 请求

Jmeter参数化

本质:使用 参数的方式来替代脚本中的固定的测试数据 (把测试数据组织起来,用不同的测试数据 调用相同的测试方法
实现方式:
定义变量(最基础)
文件定义的方式(所有测试数据都是固定的情况下)
数据库的方式(灵活,业务测试常用)
函数的方式(灵活,业务测试常用)
用户定义的变量:
什么时候使用用户定义的变量?
定义全局变量
使用“用户定义的变量”进行参数化的步骤?
1. 添加线程组
2. 添加用户定义的变量。 格式:变量名 – 变量值
3. 添加HTTP请求, 引用定义的变量名 。格式: ${变量名}
4. 添加查看结果树
用户参数: 针对同一组参数,当不同的用户来访问时,可以获取到不同的值
位置: 测试计划 --> 线程组--> 前置处理器 --> 用户参数
参数:
使用“用户参数”进行参数化的步骤?
1. 添加线程组,设置线程数为n(表示模拟的用户数)
2. 添加用户参数
        第一列添加多个变量名
        后续每一列为一组用户的数据
3. 添加HTTP请求, 引用定义的变量名 。格式: ${变量名}
4. 添加查看结果树
JMeter参数化 - CSV数据文件设置:让不同用户在多次循环时,可以取到不同的值
位置: 测试计划 --> 线程组--> 配置元件 --> CSV 数据文件设置
参数:
使用“CSV数据文件设置”进行参数化的步骤?
1. 定义CSV数据文件
2. 添加线程组
3. 添加CSV数据文件设置
4. 添加HTTP请求, 引用定义的变量名 。格式: ${变量名}
5. 添加查看结果树
JMeter参数化 - 函数(__counter) : 计数函数,一般做执行次数统计使用
位置: 在菜单中选择--> 选项 --> 函数助手对话框
设置:
TRUE ,每个用户有自己的计数器; FALSE ,使用全局计数器
Name of variable in which to store the result (optional):用于存储结果的变量名(可选)
使用: 生成-复制
参数:
使用“counter函数”进行参数化的步骤?
1. 添加线程组,设置虚拟用户数和循环次数
2. 生成__counter函数
3. 添加HTTP请求,使用__counter函数。格式: ${__counter(FALSE,)}
4. 添加查看结果树
什么是参数化?
把测试数据组织起来,用 不同的测试数据 调用 相同的测试方法
4种参数化方式有何不同?如何选择适当的方式?
用户定义的变量:
- 作用:定义全局变量
- 局限性:每次取值(无论是否相同的用户)都是固定值
用户参数:
- 作用:保证不同的用户针对同一组参数,可以取到不同的值
- 局限性:同一个用户在多次循环时,取到相同的值
CSV数据文件设置:
- 作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值
- 局限性:需要手动进行测试数据的设置
函数:
- 作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置
- 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)
JMeter断言: 让程序 自动判断 预期结果和实际 结果是否一致。
JMeter在请求的返回层面有个自动判断机制(响应状态码)
- 但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试准确性。
JMeter中常用断言:
- 响应断言
- JSON断言
- 持续时间断言(Duration Assertion)
JMeter断言 – 响应断言
作用: 对HTTP请求的任意格式的响应结果进行断言
位置: 测试计划 --> 线程组--> HTTP请求 --> (右键添加) 断言 --> 响应断言
参数配置详细介绍:
测试字段:要检查的项(实际结果)
响应文本: 来自服务器的响应文本,即主体
响应代码: 响应的状态码,例如:200
响应信息: 响应的信息,例如:OK
Response Headers: 响应头部
Request Headers: 请求头部
Request Data: 请求数据
URL样本: 请求URL
Document(text): 响应的整个文档
忽略状态:忽略返回的响应状态码
模式匹配规则:比较方式
包括:文本包含指定的正则表达式
匹配:整个文本匹配指定的正则表达式
Equals:整个返回结果的文本等于指定的字符串(区分大小写)
Substring:返回结果的文本包含指定字符串(区分大小写)
否:取反
或者:如果存在多个测试模式, 勾选代表逻辑或 (只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与 (所有都必须匹配,断言才是OK)
注意:Equals和Substring模式是普通字符串,而包括和匹配模式
是正则表达式
测试模式:预期结果
即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理
什么时候可以使用响应断言?
任意HTTP请求的响应结果,都可以使用响应断言
使用“响应断言”的操作步骤?
1. 添加线程组
2. 添加HTTP请求
3. 添加响应断言
        测试字段:要检查的项(实际结果)
        模式匹配规则:比较方式
        测试模式:预期结果
4. 添加查看结果树
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 conditions met) :反转断言(如果满足以上条件则失败)
什么时候可以使用JSON断言?
对HTTP请求的响应结果为JSON格式时,可以使用JSON断言
使用“JSON断言”的操作步骤?
1. 添加线程组
2. 添加HTTP请求
3. 添加JSON断言
        填写Assert JSON Path exists (实际结果-json路径)
        勾选Additionally assert value
        填写Expected Value (期望结果)
4. 添加查看结果树
断言持续时间: 检查HTTP请求的响应时间是否超出要求范围
位置: 测试计划 --> 线程组--> HTTP请求 --> (右键添加) 断言 --> 断言持续时间
参数:
- 持续时间(毫秒):HTTP请求允许的 最大响应时间 单位:毫秒 )。 超过则认为失败
什么时候可以使用断言持续时间?
测试HTTP请求的响应时间是否满足要求时,可以使用断言持续时间
使用“断言持续时间”的操作步骤?
1. 添加线程组
2. 添加HTTP请求
3. 添加断言持续时间
        填写持续时间(允许的最大响应时间,单位:ms)
4. 添加查看结果树
什么是断言?
让程序 自动判断 预期结果和实际 结果是否一致。
3种断言方式有何不同?如何选择适当的方式?
响应断言: 可以针对 任意格式 的响应数据进行断言
JSON断言: 当响应数据为 JSON格式 时,优先使用JSON断言
断言持续时间: 检查HTTP请求的 响应时间 是否满足要求时,使用断言持续时间
Jmeter会自动判断响应状态码(如果状态码为4xx/5xx,判定为失败)
JMeter关联
关联:当请求之间有 依赖关系 ,比如一个请求的入参是另一个请求返
回的数据,这时候就需要用到关联处理。
JMeter中常用的关联方法:
- 正则表达式提取器
- XPath提取器
- JSON提取器
JMeter关联 – 正则表达式提取器
作用: 针对任意格式的响应数据进行提取
位置: 测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> 正则表达式提取器
参数介绍:
引用名称: 存放提取出的值的 参数名称 供下一个请求引用,如填写title,则可用${title}引用它
正则表达式: 左边界(.*?)右边界
() :括起来的部分就是要提取的。
 . :匹配任何字符串。
  * :0次或多次。
  ? :不要太贪婪,在找到第一个匹配项后停止。
模板: 用$$引用起来 ,如果在正则表达式中有多个提取值,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
匹配数字: 0代表随机取值, -1代表全部取值 1代表取第一个值
缺省值: 如果参数没有取得到值,那默认给一个值让它取。
什么时候可以使用正则表达式提取器?
任意格式的响应数据,都可以使用正则表达式提取器进行提取
使用“正则表达式提取器”的操作步骤?
1. 添加线程组
2. 添加HTTP请求-传智播客
3. 添加正则表达式提取器
        引用名称:存放提取出的值的 参数名称 ,如填写title
        正则表达式: 左边界(.*?)右边界
        模板: 用$$引用起来 ,表示解析出第几个()的值
        匹配数字: 1表示第1个值,-1表示所有取值
4. 添加HTTP请求-百度
        引用正则表达式中的引用名称。如:用${title}引用它
5. 添加查看结果树
JMeter关联 – XPath提取器
作用: 针对HTML格式的响应结果数据进行提取
位置: 添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> XPath提取器
参数介绍:
Use Tidy (tolerant parser):
        当需要处理的页面是HTML格式时,必须选中该选项
        当需要处理的页面是XML或XHTML格式时,取消选中该选项。
引用名称: 存放提取出的值的参数名称
XPath Query: 用于提取值的XPath表达式
匹配数字: 如果XPath路径查询出许多结果,则可以选择提取哪个。 0:表示随机,-1:表示提取所有结果,1表示第一个值
缺省值: 参数的默认值
什么时候可以使用XPATH提取器?
针对HTML格式的响应数据,可以使用XPATH提取器进行提取
使用“Xpath提取器”的操作步骤?
1. 添加线程组
2. 添加HTTP请求-传智播客
3. 添加XPATH提取器
        勾选Use Tidy (tolerant parser)
        引用名称:存放提取出的值的 参数名称 。如:填写title
        XPath Query:用于提取值的 XPath表达式
        匹配数字:0:表示随机, -1:表示提取所有结果,1表示第一个值
4. 添加HTTP请求-百度
        引用正则表达式中的引用名称。如:用 ${title}引用
5. 添加查看结果树
JMeter关联 – JSON提取器
作用: 针对JSON格式的响应结果数据进行提取
位置: 添加方式:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 后置处理器 --> JSON提取器
参数介绍:
Names of created variables: 存放提取出的值的参数名称
JSON Path Expressions: JSON路径表达式
Match No: 如果JSON路径匹配出许多结果,则可以选择提取哪个。0 :表示随机,-1:表示提取所有结果,1表示第一个值
Default Values: 参数的默认值
什么时候可以使用JSON提取器?
针对JSON格式的响应数据,可以使用JSON提取器进行提取
使用“JSON提取器”的操作步骤?
1. 添加线程组
2. 添加HTTP请求-天气
3. 添加JSON提取器
        Names of created variables:存放提取出的值的 参数名称 。如:city
        JSON Path Expressions:用于提取值的 JSON路径表达式
        Match No: 0:表示随机, -1:表示提取所有结果,1表示第一个值
4. 添加HTTP请求-百度
        引用正则表达式中的引用名称。如:用 ${city}引用
5. 添加查看结果树
JMeter关联 – JMeter属性
JMeter属性的配置函数:
__setProperty函数:将值 保存成JMeter属性
__property函数:在其他线程组中使用property函数 读取属性
__setProperty函数执行 (保存JMeter属性): 需要通过 BeanShell取样器 来执行
__property函数 (读取属性):  在其他线程组中使用property函数
(1)什么时候需要使用JMeter属性?
需要实现跨线程组的数据传递时,可以使用JMeter属性
(2)使用“JMeter属性”的操作步骤?
1. 添加线程组1
2. 添加HTTP请求-天气
3. 添加JSON提取器
4. 添加BeanShell取样器(将JSON提取器提取的值保存为JMeter属性)
         保存JMeter属性: ${__setProperty(pro_city,${city},)}
5. 添加线程组2
6. 添加HTTP请求-百度 (读取JMeter属性)
        读取JMeter属性:${__property(pro_city,,)}
7. 添加查看结果树
什么是关联?
当请求之间有 依赖关系 ,比如一个请求的入参是另一个请求返回的数据 ,这时候就需要用到 关联处理。
几种关联方式有何不同?如何选择适当的方式?
同一个线程组内 ,多个请求之间的关联:
如果响应数据为 JSON格式 ,优先使用 JSON提取器 进行关联
如果响应数据为 HTML格式 ,优先使用 XPath提取器 进行关联
如果JSON提取器和XPath提取器都无法实现关联,使用 正则表达式提取器 进行补充 —— 针对 任意格式 的响应数据
不同线程组之间 ,多个请求之间的关联:
JSON提取器 + JMeter属性
XPath提取器 + JMeter属性
正则表达式提取器 + JMeter属性
JMeter录制脚本 :在 没有接口文档的旧项目 当中, 快速录制web页面产生的http接口请求 帮助编
写接口测试脚本
录制时,JMeter作为 代理服务器 来拦截和转发请求与响应数据
JMeter录制脚本的操作步骤:
1. 添加HTTP代理服务器,并进行配置
        加HTTP代理服务器:测试计划(右键)-> 非测试元件->HTTP代理服务器 配置代理服务器的参数
2. 开启windows操作系统的浏览器代理
3.启动代理服务器,开始录制
4.在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取到的接口请求了。
(1)什么时候需要使用JMeter录制脚本?
没有接口文档的旧项目 当中, 通过录制http接口请求的方 式,来 快速编
写接口测试脚本
(2)JMeter录制脚本的操作步骤?
1. 添加HTTP代理服务器,并进行配置
        设置端口:代理服务器的端口号
        目标控制器:录制的脚本放到哪个容器(线程组)中
        Requests Filtering(过滤条件 – url匹配正则表达式 :
        包含模式:包含此项。如:.*localhost.* ;
        排除模式:不包含此项 如:.*.jpg.*.png .*.js
2. 开启windows操作系统的浏览器代理
        配置浏览器代理:JMeter代理服务器的IP、端口号
3. 启动代理服务器,开始录制
4. 在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取到的接口请求了
JMeter直连数据库 (重点)
直连数据库的关键配置:
添加MySQL驱动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(连接数据库用户名,如实填写)
Password: (MySQL数据库密码,如实填写,如果密码为空不写)
添加JDBC请求
添加方式:测试计划 --> 线程组--> 取样器 --> JDBC Request
参数介绍:
Variable Name: 数据库连接池的名字, 需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query Type:
查询操作:选择“Select Statement”
增加、删除、修改操作:选择“Update Statement”
Query: 填写的SQL语句,未尾不要加“;”
Variable names :保存SQL语句返回结果的变量名
什么时候需要使用JMeter直连数据库?
用作请求的参数化
用作结果的断言
清理测试数据
准备测试数据
JMeter直连数据库?
1. 添加MySQL驱动jar包
在测试计划面板点击“浏览…“按钮,将你的JDBC驱动添加 —— 本脚本可
将MySQL驱动jar包放入到lib/ext目录下,重启JMeter —— 所有脚本可用
2. 配置数据库连接信息
数据库连接池名称 数据库URL (协议 + 数据库IP + 数据库端口 + 连接的
数据库名称)、 数据库驱动包 (下拉框选择)、 数据库用户名密码
3. 添加JDBC请求
数据库连接池名称 Query Type SQL语句 查询结果保存的变量名
JMeter逻辑控制器: 可以按照设定的逻辑控制取样器的执行顺序
JMeter中常用的逻辑控制器:
- 如果(If)控制器
- 循环控制器
- ForEach控制器
(1)IF控制器的作用是什么?
用来控制它下面的测试元素是否运行
(2)使用“IF控制器”的操作步骤?
1. 添加线程组
2. 用户定义的变量
3. 添加If控制器,判断name是否等于baidu
        不勾选Interpret Condition,'${name}' == 'baidu‘
        勾选,${__jexl3('${name}' == 'baidu',)}
4. 添加HTTP请求,用来访问百度
5. 添加If控制器,判断name是否等于itcast
6. 添加HTTP请求,用来访问传智播客
7. 添加查看结果树
(1)循环控制器的作用是什么?
通过设置循环次数,来实现循环发送请求
(2)使用“循环控制器”的操作步骤?
1. 添加线程组
2. 添加循环控制器 —— 设置循环次数
3. 添加HTTP请求
4. 添加查看结果树
(3)思考:线程组属性可以控制循环次数,那么循环控制器有什么 用?作用域不同
(1) ForEach 控制器的作用是什么?
一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值
(2)使用“ ForEach 控制器”的操作步骤?
1. 添加线程组
2. 添加用户定义的变量/正则表达式提取器
        返回一组变量: 相同的变量名+连续的数字后缀 ,如:name_1..name_3
3. 添加ForEach控制器
        输入变量前缀:要读取的输入变量的 固定前缀 ,如:name
        开始循环字段:要读取的输入变量 后缀数字的最小值-1 ,如:0
        结束循环字段:要读取的输入变量 后缀数字的最大值 ,如:3
        输出变量名称:读取输入变量的值后保存的 新变量名 ,如word
4. 添加HTTP请求-百度
        引用ForEach控制器中 保存的新变量名 ,如:${word}
JMeter定时器 - 同步定时器
同步定时器:阻塞线程(累积一定的请求),当在 规定的时间内 达到 一定的线程数量 ,这些线程会
在同一个时间点 一起释放 ,瞬间产生很大的压力。
在JMeter中叫做 同步定时器 ,在Loadrunner中又叫 集合点
位置: 测试计划 --> 线程组--> HTTP请求 --> (右键添加) 定时器 --> Synchronizing Timer
参数介绍:
Number of Simulated Users to Group by: 模拟用户的数量,即指定 同时释放的线程数数量 。 -
若设置为0,等于设置为线程组中的线程数量
Timeout in milliseconds: 超时时间,即 超时多少毫秒后同时释放 指定的线程数;
如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。
如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程。默认为0
(1)什么时候需要使用同步定时器?
测试抢购、秒杀或者抢红包等高并发的场景时使用
(2)使用同步定时器的操作步骤?
1. 添加线程组,设置线程数为n
2. 添加HTTP请求
3. 添加同步定时器
        设置并发线程数:同时发送请求的虚拟用户数
        设置超时时间
        建议设置 :不设置的话,若没有达到设置的线程数会一直死等
        不能设置太小 :等待时间后还没达到设置的线程数,会释放已到达的线程
4. 添加查看结果树
5. 添加监听器-聚合报告
JMeter定时器 - 常数吞吐量定时器
作用: 让JMeter按 指定的吞吐量 执行,以 每分钟为单位
位置: 测试计划 --> 线程组--> HTTP请求 --> (右键添加) 定时器 --> Constant Throughput Timer
参数介绍:
Target throughput(in samples per minute): 目标吞吐量。注意这里是每个用户每分钟发送的请求数
案例要求:
模拟用户真实的业务场景要求:20 QPS
如果线程数设置为1,则目标吞吐量设置为 20 * 60 = 1200
如果线程数设置为2,则目标吞吐量设置为 20 * 60 / 2 = 600
操作步骤:
1. 添加线程组,循环次数设置成永远
2. 添加HTTP请求
3. 添加常数吞吐定时器
4. 添加查看结果树
5. 添加监听器-聚合报告
查看聚合报告的 Throughput 字段,实际值围绕设置的QPS值上下波动
(1)什么时候需要使用常数吞吐量定时器?
需要 按指定的吞吐量发送请求 时,可以使用常数吞吐量定时器
(2)使用常数吞吐量定时器的操作步骤?
1. 添加线程组,循环次数设置成永远
2. 添加HTTP请求
3. 添加常数吞吐定时器
        设置目标吞吐量:每个用户每分钟发送的请求数
        计算方法:要求QPS * 60 / 线程数
4. 添加查看结果树
5. 添加监听器-聚合报告
JMeter分布式
(1)什么时候需要使用分布式?
单台测试机无法满足用户要求的负载量时,使用多台机器来模拟
(2)JMeter分布式测试的原理?
执行时, 控制机会把脚本发送到每台代理机
代理机拿到脚本后就开始执行 ,接收服务器返回的响应
执行完成后, 代理机会把结果回传给控制机
(3)JMeter分布式的配置和使用?
配置:
代理机: 修改服务端口server_port,禁用RMI SSL开关
控制机: 配置代理机远程地址remote_hosts,禁用RMI SSL开关
使用:
代理机: 命令行方式启动, 运行jmeter-server.bat文件
控制机: 运行jmeter.bat文件 ,启动JMeter,运行-->远程启动/远程全部启动
JMeter测试报告 - 聚合报告
作用: 收集性能测试结束后,系统的各项性能指标。如:响应时间、并发数、吞吐量、错误率等
位置: 测试计划->右键->监听器->聚合报告
参数介绍:
- Label: 每个请求的名称
- 样本: 各请求发出的数量
- 平均值: 平均响应时间(单位:毫秒)
- 中位数: 中位数,50% <= 时间
- 90%百分比: 90% <= 时间
- 95%百分比: 95% <= 时间
- 99%百分比: 99% <= 时间
- 最小值: 最小响应时间
- 最大值: 最大响应时间
- 异常%: 请求的错误率
- 吞吐量: 吞吐量。默认情况下表示每秒完成的请求
数,一般认为它为TPS
- 接收 KB/sec: 每秒接收到的千字节数
- 发送 KB/sec: 每秒发送的千字节数
JMeter测试报告 - html测试报告
作用: JMeter支持生成HTML测试报告,以便从测试计划中获得图表和统计信息
命令:
jmeter -n -t [jmx file] -l [result file] -e -o [html report folder]
eg: jmeter -n -t hello.jmx -l result.jtl -e -o ./report
参数描述:
-n: 非GUI模式执行JMeter
-t [jmx file]: 测试计划保存的路径及.jmx文件名,路径可以是相对路径也可以是绝对路径
-l [result file]: 保存生成测试结果的文件,jtl文件格式
-e: 测试结束后,生成测试报告
-o [html report folder]: 存放生成测试报告的路径,路径可以是相对路径也可以是绝对路径
注意 result.jtl和report会自动生成, 如果在执行命令时result.jtl和report已存在,必须用先删
,否则在运行命令时就会报错
(1)聚合报告的核心内容有哪些?
响应时间、吞吐量、错误率、网路速率
(2)JMeter生成html测试报告的命令?
jmeter -n -t hello.jmx -l result.jtl -e -o ./report
注意事项:
- 如果在执行命令时result.jtl和report已存在,必须用先删除
(3)JMeter的HTML测试报告的内容?
性能统计仪表盘
性能测试过程中的详细信息报表
性能测试时TPS计算
性能测试时的TPS,大都是根据用户真实的业务数据(运营数据)来计算的
(1)并发数计算方法有哪几种?作用有什么区别?
普通方法:
- 并发数TPS = 总请求数/总时间
- 作用:可以满足系统最最基本的应用场景(每天的总请求数)的要求。
二八原则:
- 并发数TPS = 总请求数 * 80% / 总时间 * 20%
- 作用:可以满足绝大多数情况下,用户真实的业务场景要求。
根据业务运营数据的统计计算(通常用来做 稳定性测试
- 并发数TPS = 有效请求数 * 80% / 有效时间 * 20%
- 作用:可以满足绝大多数情况下用户真实的业务场景要求(当运营数据的统计越精确,
计算结果越准确)
根据用户峰值业务操作来计算(通常用来做 压力测试
- 并发数TPS = 峰值请求数 / 峰值时间 * 系数
- 作用:专门用于满足极端的用户业务场景下的性能需求
性能测试常用图表:
(1)Concurrency Thread Group 线程组的作用是什么?
阶梯加压
图形界面显示运行状态
(2)Transactions per Second和Bytes Throughput per Second有什 么作用?
Transactions per Second:作用是统计各个事务每秒钟成功的事务个数
Bytes Throughput per Second:作用是查看服务器吞吐流量
(3)Transactions per Second和聚合报告中的TPS在性能测试时的作 用有何不同,以哪个为准?
• 性能测试的结果统计,以聚合报告的结果为准
• 每秒性能指标的作用是:查看系统长时间运行过程中是否有异常出现,有则进一步分析
PerfMon组件监控服务器资源
(1)PerfMon组件的作用?
用来监控服务端的性能资源指标,包括cpu、内存、磁盘、网络等性能数据
(2)PerFMon组件监服务器控资源指标的步骤?
1. 下载ServerAgent-2.2.3.zip,并上传到服务器上进行解压
2. 启动ServerAgent程序
        • 如果是windows运行startAgent.bat
        • 如果是linux运行startAgent.sh
3. 编写JMeter脚本,配置运行时间
4. 添加PerFmon组件
        • 服务器IP
        • ServerAgent程序端口
        • 待监控的指标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

Uniapp API

1.uni.showToast 显示消息提示框 unishowToast({ obj参数 }) 2.uni.showLoading 显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 3.uni.showModal 显示模态弹窗&#xff0c;可以只有一个确定按钮&#xff0c;也可以同时有确定和取消按钮。类似于一个A…

windows上安装python环境

前言 最近电脑重装了系统&#xff0c;需要重新安装python环境 &#xff0c;因此记录一下 1.下载 打开python官网下载&#xff0c;下载链接&#xff1a;https://www.python.org/downloads/windows/ 点击下载 &#xff0c;我这里使用64位操作系统(大部分电脑)&#xff0c;根据…

怎么查看网站是否被谷歌收录,查看网站是否被谷歌收录的简便方法

查看网站是否被谷歌收录&#xff0c;有多种简便方法可供选择。以下是一些常用的简便方法&#xff1a; 一、使用“site:”指令 打开谷歌搜索引擎&#xff1a; 在浏览器中打开Google.com&#xff0c;确保使用的是谷歌的官方搜索引擎。 输入查询指令&#xff1a; 在搜索框中输…

网关路由登录校验

网关过滤器 登录校验必须在请求转发到微服务之前做&#xff0c;否则就失去了意义。而网关的请求转发是Gateway内部代码实现的&#xff0c;要想在请求转发之前做登录校验&#xff0c;就必须了解Gateway内部工作的基本原理。 暂时无法在飞书文档外展示此内容 如图所示&#xff…

15分钟学 Python 第38天 :Python 爬虫入门(四)

Day38 : Python爬虫异常处理与反爬虫机制 章节1&#xff1a;异常处理的重要性 在爬虫开发过程中&#xff0c;网络请求和数据解析常常会遭遇各种异常。正确的异常处理可以提高程序的稳定性&#xff0c;避免崩溃&#xff0c;并帮助开发者快速定位问题。 章节2&#xff1a;常见…

requests案例——腾讯新闻数据的爬取

需求&#xff1a; 1.利用requests方法爬取该i.news.qq.com网站的数据&#xff08;包括名字和对应链接&#xff09; 2.实现翻页的爬取 3.将爬取下来的数据保存在excel文件中 4.利用jsonpath来解析获取的数据 5.使用openpyxl库处理 Excel 文件 注意&#xff1a; 1.如果报以…

一个不错的 SQL 编码风格的指南

前言 SQL语句的编写对于我们后端开发者而言是一个必备的技巧&#xff0c;在日常工作中&#xff0c;SQL语言编写的质量不仅仅会影响到团队的合作效率与项目的可维护性&#xff0c;还直接关系到数据库的性能优化与数据安全。今天大姚给大家分享一个不错的 SQL 编码风格的指南&am…

卡码网KamaCoder 117. 软件构建

题目来源&#xff1a;117. 软件构建 C题解&#xff08;来源代码随想录&#xff09;&#xff1a;拓扑排序&#xff1a;给出一个 有向图&#xff0c;把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法。 拓扑排序的过程&#xff0c;其实就两步&#xff1…

Kubernetes资源详解

华子目录 1.Kubernetes中的资源1.1资源管理介绍1.2资源管理方式1.2.1命令式对象管理1.2.2kubectl常见command命令1.2.3资源类型1.2.4常用资源类型 基本命令示例运行和调试命令示例高级命令示例总结 其他命令示例create和apply区别案例显示命名空间查看命名空间中的pod如何对外暴…

数据库伸缩设计-分库分表如何做?读书笔记

一些企业内部系统&#xff0c;用户数量和业务规模有限&#xff0c;因此并不会产生巨大的数据量&#xff0c;这时数据库的存储和读写性能均不会成为瓶颈&#xff0c;没有扩容的需要&#xff0c;因此无须考虑伸缩性。对于一些互联网系统&#xff0c;前后端应用可以通过CDN 、缓存…

基于Zynq SDIO WiFi移植二(支持2.4/5G)

1 SDIO设备识别 经过编译&#xff0c;将移植好的uboot、kernel、rootFS、ramdisk等烧录到Flash中&#xff0c;上电启动&#xff0c;在log中&#xff0c;可看到sdio设备 [ 1.747059] mmc1: queuing unknown CIS tuple 0x01 (3 bytes) [ 1.761842] mmc1: queuing unknown…

vite学习教程06、vite.config.js配置

前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&#xff1a;Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

Meta MovieGen AI:颠覆性的文本生成视频技术详解

近年来&#xff0c;生成式AI技术的发展迅猛&#xff0c;尤其是在文本生成图像、文本生成视频等领域。Meta公司近期推出的MovieGen AI&#xff0c;以其强大的文本生成视频能力震撼了整个AI行业。本文将详细解读Meta MovieGen AI的核心技术、功能特性及其在实际应用中的潜力。 一…

ssrf学习(ctfhub靶场)

ssrf练习 目录 ssrf类型 漏洞形成原理&#xff08;来自网络&#xff09; 靶场题目 第一题&#xff08;url探测网站下文件&#xff09; 第二关&#xff08;使用伪协议&#xff09; 关于http和file协议的理解 file协议 http协议 第三关&#xff08;端口扫描&#xff09…

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…

各省份-产业链现代化水平(2001-2022年)

产业链现代化水平是一个综合性指标&#xff0c;它为我们提供了一个多维度的视角来评估各省份在产业链现代化进程中的发展水平。这个指标涵盖了技术创新、产业升级、生产效率、产业结构优化等多个方面&#xff0c;包含原始数据、测算结果以及参考文献。 2001年-2022年各省份-产…

Debezium日常分享系列之:Debezium 3.0.0.Final发布

Debezium日常分享系列之&#xff1a;Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标 MariaDB连接器的更改版本 11.4.3 支持 MongoDB连接器的更改MongoDB sink connector MySQL连接器的改变MySQL 9MySQL…

vscode 连接云服务器(ubantu 20.04)

更改服务器系统 如果云服务器上的系统不是ubantu20.04的&#xff0c;可以进行更改&#xff1a; 登录云服务官网&#xff08;这里以阿里云为例&#xff09;点击控制台 点击服务器实例 点击更多操作、重置系统 点击重置为其他镜像、系统镜像&#xff1a;选择你要使用的系统镜像…

[Linux]:线程(三)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. POSIX 信号量 1.1 信号量的概念 为了解决多执行流访问临界区&#xff0c…