性能测试笔记

一、性能测试的概念

  1. 性能测试的概念

使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程

  1. 性能测试的目的

评估当前系统能力,出现性能bug后,优化性能:预测未来的性能需求是否满足
例如:验收第三方提供的软件
常见的性能需求(性能需求文档):
WEB首页打开速度在5s以下,web登录速度15s以下
邮箱服务支持50万个在线用户
计费话单成功率达到99.999%以上
在100个并发用户的高峰期,邮箱的基本功能,处理能力至少达到10TPS
系统能在高于实际系统运行压力1倍情况下,稳定运行12小时
这个系统能否支撑200万的vn(每天登录系统的人次) vn—Virtual user(虚拟用户)
寻找性能瓶颈,优化性能
评估软件是否能满足未来需求

  1. 什么是性能
  • 时间:系统处理用户请求响应时间
  • 资源:系统运行过程中,系统资源的消耗情况

二、性能测试的策略

  1. 基准测试
  • 狭义上:就是单用户测试(单用户循环多次得到的数据)
  • 广义上:建立基准线,当系统的软硬件环境发生变化之后再进行一次基准测试确定变化对性能的影响

(1)基准测试数据的用途

基准测试不会单独存在
为多用户并发测试和综合场景测试等提供参考依据
为系统/环境配置、系统优化前后的性能提升/下降提供参考指标

  1. 负载测试
  • 概念:通过逐步增加系统负载。确定在满足系统的性能指标(如响应时间等)情况下,找出系统所能承受的最大负载量的测试
  • 作用:系统最大负载量达到用户要求时,系统才能上线使用
  1. 稳定性测试

概念:在服务器稳定运行(用户正常的业务负载下)的情况下进行长时间测试(1天-1周等),并最终保证服务器能满足线上业务需求

  1. 压力测试

概念:在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力
测试场景:
极限负载情况下的破坏性压力测试
高负载下的长时间的稳定性压力测试

  1. 并发测试

概念:并发测试(绝对并发):是指在极端的时间内,发送大量请求,来验证服务器对并发的处理能力

三、性能测试的指标(标准)

  1. 为什么要学习性能测试指标

对性能测试结果进行量化衡量

  1. 什么是响应时间

指从客户端发送请求开始,到客户端接收到结果的总时间
包括:服务器处理时间+网络传输时间

  1. 什么是并发用户数

某一时刻同事向服务器发送请求的用户数

  1. 吞吐量(Throughput)

指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力

  • QPS(Query Per Second)每秒查询数:即控制服务器每秒处理的指定请求数量-
  • TPS(Transactions Per Second)每秒事务数:即控制服务器每秒处理事务请求的数量
  • 事务:即业务,页面上的一次操作,可能对应一个请求/多个请求
  1. 点击数和错误率
  • 点击数:指客户端向服务端发送请求时,所有页面的页面资源元素(如:图片、链接、框架css、js等)的请求总数量
    注意:
    只有web项目才有此指标
    点击数是请求数,点击数不是页面上的一次点击

  • 错误率:指系统在负载情况下,失败业务的概率。错误率=(失败业务数/业务总数)*100%

      注意:大多系统都会要求错误率无限接近于0错误率是一个性能指标,不是功能上的随机bug
    

6.资源使用率

资源使用率:是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量*100%”形成资源利用率的数据
在这里插入图片描述

四、性能测试的流程

功能测试完成后bug修复好后-》性能测试

1.性能测试执行

建立测试环境-》编写测试脚本-》性能测试监控-》执行测试脚本
在这里插入图片描述

2.性能分析和调优

说明:性能测试分析人员经过对结果的分析后,如果不符合性能需求,则会提出性能bug,然后有开发人员进行后续的调优
在这里插入图片描述

五、Jmeter元件和组件的介绍

  1. Jmeter的安装和介绍

(1)Loadrunner和Jmeter对比
在这里插入图片描述

(2)Jmeter的bin目录介绍
在这里插入图片描述

(3)其他目录介绍
在这里插入图片描述

(4)目录总览
在这里插入图片描述

(5)永久修改语言配置
在这里插入图片描述

  1. 元件的基本介绍

(1)元件:多个类似功能组件的容器(类似于类)

  • 取样器——发送请求
  • 逻辑控制层——控制语句的执行顺序
  • 前置处理器——对请求参数进行预处理
  • 后置处理器——对响应结果进行提取
  • 断言——检查接口的返回结果是否与预期结果一致
  • 定时器——设置等待
  • 测试片段——封装一段代码,供其他脚本调用
  • 配置元件——测试数据的初始化配置
  • 监听器——查看Jmeter脚本的运行结果
    在这里插入图片描述

(2)组件:实现独立的某个功能(类似于方法)

  1. 元件的作用域

元件的作用域:是考测试计划的属性结构中元件的父子关系来确定的

提示:所有的组件都是以取样器为核心来运行的。组件添加的位置上不同,生效的取样器也不同

作用域的原则:

  • 取样器:核心,不和其他元件相互作用,没有作用域
  • 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
  • 其他元件:
    • 如果是某个取样器的子节点,则该元件只对其父节点起作用
    • 如果其父节点不是取样器,则其作用域是该元件父节点下的其它所有后代节点(包括子节点,子节点的子节点等)
  1. 元件的执行顺序

同一个作用域下不同类型元件:
配置元件–>前置处理程序–>定时器–>取样器–>后置处理程序–>断言–>监听器
同一个作用域下多个相同类型元件:
按照测试计划中从上到下的顺序依次执行

六、JMeter使用示例

  1. JMeter第一个案例

需求:使用JMeter访问百度首页接口,并查看请求和响应信息

步骤:

  1. 启动JMeter

  2. 在“测试计划”下添加“线程组”

  3. 在“线程组”下添加“HTTP请求”取样器

  4. 填写“HTTP请求”的相关请求数据

  5. 在“线程组”下添加“查看观察树”监听器

  6. 点击“启动”按钮运行,并查看结果

  7. 线程组

概念:控制JMeter用于执行测试的一组用户
线程组的分类:

  • Setup线程组:预测试操作,所有脚本之前执行
  • 普通线程组:执行测试用例,可以有1个或多个(并行/串行)
  • Teardown线程组:测试后操作,所有脚本之后执行
  1. 线程组参数
    在这里插入图片描述

  2. http请求参数
    在这里插入图片描述

(1)响应返回中文乱码解决方案
在这里插入图片描述

七、JMeter的参数化

  1. 什么是参数化测试?常用的参数化方法
    在这里插入图片描述

(1)用户定义变量的步骤
在这里插入图片描述

(2)用户参数的参数化的步骤
在这里插入图片描述

(3)csv参数文件设置
在这里插入图片描述

(4)函数参数化设置

函数助手对话框位置
在这里插入图片描述

生成函数
在这里插入图片描述

引用函数
在这里插入图片描述

参数化小结
在这里插入图片描述

(5)4种参数化的优缺点
在这里插入图片描述

  • 函数:
    • 作用:保证不用的用户及多次循环时,都可以取到不用的值,不需要提前设置
    • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名密码)

八、JMeter断言
在这里插入图片描述

  1. 响应断言

(1)参数配置详细介绍
在这里插入图片描述
在这里插入图片描述

(2)响应断言的操作步骤
在这里插入图片描述

  1. JSON断言

(1)json断言参数介绍
在这里插入图片描述

(2)json断言操作步骤
在这里插入图片描述

3.断言持续时间
在这里插入图片描述

4.3种断言的区别
在这里插入图片描述

九、JMeter关联
在这里插入图片描述

1.正则表达式
在这里插入图片描述

什么是正则表达式?

在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

常用元字符

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

常用限定符

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
n重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

常用反义词

代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符

(1)案例
在这里插入图片描述

2.正则表达式提取器

(1)正则表达式参数介绍
在这里插入图片描述

案例
在这里插入图片描述

3.XPath提取器

(1)XPath参数介绍
在这里插入图片描述

(2)案例
在这里插入图片描述
在这里插入图片描述

4.JSON提取器

(1)JSON参数介绍
在这里插入图片描述

(2)案例
在这里插入图片描述
在这里插入图片描述

十、JMeter属性

  1. 设置函数和使用函数
    在这里插入图片描述

2.函数设置和使用步骤
在这里插入图片描述

  1. 案例

(1)添加线程组

(2)添加http请求-天气

(3)添加json提取器,获取数据
在这里插入图片描述

(4)添加BeanShell取样器(将JSON提取器提取的值保存为JMeter属性)

  • 工具函数助手对话框
    在这里插入图片描述

  • 保存JMeter属性:KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(pr…{city},)}
    在这里插入图片描述

(5)添加线程组

(6)添加http请求-百度

  • 读取JMeter属性-根据函数property
    在这里插入图片描述
    在这里插入图片描述

    (7)添加查看结果树
    测试计划选择为串行执行

  1. 关联和属性小结
    在这里插入图片描述

十一、JMeter录制脚本

十二、JMeter直连数据库

1.使用场景
在这里插入图片描述

2.操作步骤
在这里插入图片描述
在这里插入图片描述

3.案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十三、逻辑控制器
在这里插入图片描述

1.IF控制器

(1)参数介绍
在这里插入图片描述

(2)案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.循环控制器
在这里插入图片描述
在这里插入图片描述

(1)循环控制器和线程组循环次数的区别
在这里插入图片描述

3.ForEach控制器

(1)参数介绍
在这里插入图片描述

(2)案例
在这里插入图片描述

(3)案例2
在这里插入图片描述

4.同步控制器

(1)参数介绍
在这里插入图片描述

(2)案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.吞吐量定时器

(1)参数
在这里插入图片描述

6.固定定时器

(1)参数
在这里插入图片描述

(2)案例
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软考】8.2 编译程序基本原理/文法/正规式/有限自动机

《编译程序基本原理》 编译过程 词法分析: 针对单词;输入是字符;读的是字符流;语法分析: 针对语句;读的是记号流,即词法分析产生的一个个单词语义分析(针对语句含义) a.…

Golang interface 接口的应用场景 使用细节

应用场景介绍 对初学者讲,理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景: 1.说现在美国要制造轰炸机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然…

Sql server 使用DBCC Shrinkfile 收缩日志文件

磁盘空间有限,需要收缩日志文件释放空间。 数据库名称上右击属性->文件,逻辑名称日志文件默认名称为“_log”结尾。 alter database 数据库 set recovery simple dbcc shrinkfile(XXX_log,2,truncateonly) alter database 数据库 set recovery full

【Vue2.0源码学习】生命周期篇-销毁阶段(destroy)

文章目录 1. 前言2. 销毁阶段分析3. 总结 1. 前言 接下来到了生命周期流程的最后一个阶段——销毁阶段。从官方文档给出的生命周期流程图中可以看到,当调用了vm.$destroy方法,Vue实例就进入了销毁阶段,该阶段所做的主要工作是将当前的Vue实例…

Vue 3 学习 源码解读

该文章内容为以下视频的学习笔记: 前言_哔哩哔哩_bilibili前言是秋招解决方案:深入 Vue3 源码,带你彻底打通 Vue3 源码面试的第1集视频,该合集共计13集,视频收藏或关注UP主,及时了解更多相关视频内容。htt…

微信小程序——CSS3渐变

SS3 渐变(gradients)可以在两个或多个指定的颜色之间显示平稳的过渡。CSS3 定义了两种类型的渐变(gradients): 说明 1、线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向&#xff1…

Spring AOP 详解及@Trasactional

Spring AOP 详解 AOP基础 AOP: Aspect Oriented Program, 面向切面编程。解耦(组织结构调整)、增强(扩展)。 AOP术语 术语 说明 Aspect(切面) 横切于系统的连接点实现特定功能的类 JoinPoint&#xf…

编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI

在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二…

Qt单一应用实例判断

原本项目中使用QSharedMemory的方法来判断当前是否已存在运行的实例,但在MacOS上,当程序异常崩溃后,QSharedMemory没有被正常销毁,导致应用程序无法再次被打开。 对此,Qt assistant中有相关说明: 摘抄 qt-s…

tailscale自建headscale和derp中继

tailscale自建headscale和derp中继 Tailscale 官方的 DERP 中继服务器全部在境外,在国内的网络环境中不一定能稳定连接,所以有必要建立自己的 DERP 服务器的。 准备工作: 需要有自己的云服务器,本示例为阿里云轻量服务器需要有…

Spring的beanName生成器AnnotationBeanNameGenerator

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

11.3 读图举例

一、低频功率放大电路 图11.3.1所示为实用低频功率放大电路,最大输出功率为 7 W 7\,\textrm W 7W。其中 A \textrm A A 的型号为 LF356N, T 1 T_1 T1​ 和 T 3 T_3 T3​ 的型号为 2SC1815, T 4 T_4 T4​ 的型号为 2SD525, T 2…

(高阶) Redis 7 第21讲 IO多路复用模型 完结篇

🌹 以下分享 Redis IO多路复用模型,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀 IO多路复用模型是什么 I/O:网络IO 多路:多个客户端连接(连接即套接字描述符,即socket或channel),指…

leetcode 49. 字母异位词分组

2023.10.7 根据字母异位词的定义,可知:所有字母异位词经过排序之后得到的字符串相同,所以可以定义一个哈希表,将排序后的字符串当作哈希表的键,哈希表的值则用来存储该字母异位词对应的所有字符串,最后将哈…

HDLbits: Shift18

先补充一下算术移位寄存器和按位移位寄存器&#xff1a; SystemVerilog具有按位和算术移位运算符。 按位移位只是将向量的位向右或向左移动指定的次数&#xff0c;移出向量的位丢失。移入的新位是零填充的。例如&#xff0c;操作8’b11000101 << 2将产生值8’b00010100…

【数据结构-二叉树 八】【遍历求和】:求根到叶子节点数字之和

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【遍历求和】&#xff0c;使用【二叉树】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&am…

练[SUCTF 2019]CheckIn

[SUCTF 2019]CheckIn 文章目录 [SUCTF 2019]CheckIn掌握知识解题思路关键paylaod 掌握知识 ​ .user.ini文件上传利用–需要上传目录有一个php文件(index.php)&#xff0c;文件头绕过&#xff0c;文件内容<&#xff1f;检测 解题思路 打开题目链接&#xff0c;发现又是一…

[SWPUCTF 2021 新生赛]easy_sql - 联合注入||报错注入||sqlmap

[SWPUCTF 2021 新生赛]easy_sql 一、思路分析二、解题方法解法一&#xff1a;手注解法二&#xff1a;报错注入解法三&#xff1a;sqlmap 一、思路分析 这题可以直接参考&#xff1a;[NISACTF 2022]join-us - 报错注入&无列名注入 网站标题提示&#xff0c;参数是wllm ?…

day25--JS进阶(递归函数,深浅拷贝,异常处理,改变this指向,防抖及节流)

目录 浅拷贝 1.拷贝对象①Object.assgin() ②展开运算符newObj {...obj}拷贝对象 2.拷贝数组 ①Array.prototype.concat() ② newArr [...arr] 深拷贝 1.通过递归实现深拷贝 2.lodash/cloneDeep实现 3.通过JSON.stringify()实现 异常处理 throw抛异常 try/catch捕获…

Linux TCP协议通信 (流程 三次握手 四次挥手 滑动窗口)

TCP通信流程 Socket函数 TCP通信实现&#xff08;服务器端&#xff09; #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main() {//1.创建socketint lfd socket(AF_INET, SOCK_…