性能测试

为什么要进行性能测试?

  • 满足真实场景的业务需求
  • 招聘需要

性能测试概念:

性能:软件质量属性中的“效率”特性

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

  1. 后台处理程序的性能(代码性能)
  2. 应用服务器、数据库、架构设计等是否存在瓶颈
  3. 服务器资源消耗(CPU、内存、磁盘、网络)

性能测试的目的:

  1. 评估当前系统能力:验收第三方提供的软件,获取关键的性能指标,与其他类似的产品进行比较
  2. 寻找性能瓶颈,优化性能
  3. 评估软件是否能够满足未来的需要

功能测试和性能测试的关系

  1. 焦点不一样

    **功能测试:**验证软件系统操作功能是否符合产品功能需求规格,主要焦点在功能(正向、逆向)

    **性能测试:**验证软件系统是否满足业务需求场景,主要焦点是业务场景满足(时间、资源)

一般项目中,先功能测试通过中,后进行性能测试

性能测试的策略

基准测试

狭义:单用户测试,单用户循环多次得到的数据

广义:建立基准线,当系统的软硬件环境发生变化后再进行一次基准测试以确定变化对性能的影响

测试数据用途

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

负载测试

通过逐步增加系统负载,确定在满足系统性能指标的情况下,找出系统所能承受的最大负载量的测试

稳定性测试

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

系统在用户要求的业务负载下运行达到规定时间时,系统才能正式上线使用。

其他:压力、并发测试

压力测试

在强负载下的测试,查看系统在峰值情况下是否有功能隐患、系统是否具有良好的容错能力和可恢复能力。

测试场景

  1. 极限负载情况下的破坏性压力测试(c-d)
  2. 高负载下长时间的稳定性压力测试(b-c区间,24/3*24小时的长时间测试)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JNSbKCP6-1655777946563)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413090939636.png)]

并发测试

并发测试(绝对并发):指在极短的时间内,发送多个请求,来验证服务器对并发的处理能力

应用场景:抢红包,秒杀,抢购等。

性能测试指标

响应时间

指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的结果,整个过程所耗费的时间。

注意:

  • 通过HTTP接口请求消息来测试
  • 包括服务器处理时间+网络传输时间
  • 不包括发消息时前端页面的处理时间和收到消息后前端页面的渲染显示时间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MjKOBtWM-1655777946564)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413094647067.png)]

并发数

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

吞吐量(throughput)

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uHxxn30k-1655777946564)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413094942730.png)]

QPS(Query Per Second)每秒查询数:每秒查询数,控制服务器每秒处理的指定请求数量

TPS(Transactions Per Second)每秒事务数:控制服务器每秒处理的事务请求的数量

事务:即业务,页面的一次操作,可能对应一个请求/多个请求

点击数

所有的页面元素的请求总数量,点击数是请求数,不是一次点击

错误率

是指系统在负载情况下,失败业务的概率

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

资源使用率

系统各种资源的使用情况

常见的资源指标:

cpu不高于75%-85%

内存不高于80%

磁盘io,不高于90%

网络不高于80%

性能测试流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNRpWSBK-1655777946566)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413104202358.png)]

  1. 需求分析

    1. 明确被测系统–>明确测试内容–>明确测试策略–>明确测试指标

      • 明确被测系统:熟悉被测系统的业务功能和技术架构
      • 明确测试内容:用户使用频率较高的关键业务,技术角度,逻辑复杂度高的业务,数据量大的业务
      • 明确测试策略:
      • 明确测试指标:有明确的需求指标,执行结果与预期结果对比,没有需求指标:查找资料,类似系统对比,对未来流量的预估
  2. 性能测试计划和方案

    • 测什么:项目背景,测试目的,测试范围
    • 谁来测:进度与分工,交付清单
    • 怎么测:测试策略
  3. 性能测试用例

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mbtnkO8m-1655777946567)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413110521597.png)]

  4. 性能测试执行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ey5rFGKL-1655777946567)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413110717117.png)]

  5. 性能测试分析和调优

    性能测试分析人员经过对结果的分析以后,如果不符合性能需求,则会提出性能bug,由开发人员进行后续的调优

  6. 性能测试报告总结

    • 工作的经过回顾
    • 缺陷分析和调优
    • 风险评估
    • 性能测试结果
    • 测试工作总结与改进

性能测试工具JMeter

主流的性能测试工具:Jmeter,Loadrunner

  • 相同点:都能模拟大量用户,支持多协议,监控及分析报表功能

  • 不同点:

    工具 用户量 分析报表 IP欺骗 费用 体积 扩展性
    Loadrunner 多(万) 精确(秒) 支持 收费 大(GB) 不能扩展
    Jmeter 较差(分钟) 不支持 免费 小(50mb) 有扩展组件

jmeter环境搭建

JAVA_HOME=JDK路径

path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKQubOKx-1655777946568)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413153735599.png)]

JMeter_HOME=路径名

CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;

path添加 %JMETER_HOME%\bin;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfpdlJCc-1655777946569)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413154332531.png)]

jmeter文件目录结构

  • 修改配置文件 Bin目录
  • 第三方插件 lib/ext目录
  • 帮助手册 printable_docs
  • 启动程序 Bin目录

元件及基本作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8pv7x56-1655777946569)(C:\Users\Administrator\Desktop\笔记包\性能测试.assets\image-20220413170221640.png)]

接口自动化脚本实现过程

  1. 初始化测试数据 配置元件
  2. 对请求数据进行赋值 前置处理器
  3. 调用GET/POST方法发送请求 取样器
  4. 提取响应中特定字段的值 后置处理器
  5. 对提取出来的值与预期结果进行对比 断言
  6. 在控制台查看脚本运行结果 监听器

元件:多个类似功能组建的容器(类似于类)组件:容器中实现独立的某个功能(类似于方法)

元件作用域和执行顺序

原则:

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

执行顺序

同一作用域(目录级别缩进)下不同类型元件:

  1. 配置元件
  2. 前置处理程序
  3. 定时器
  4. 取样器
  5. 后置处理程序
  6. 断言
  7. 监听器

同一作用域下多个相同的元件:

  • 按照测试计划中从上 到下顺序依次执行

Jmeter三个重要组件

线程组

控制Jmeter用于执行测试的一组用户

分类

  • Setup线程组:预测试操作,所有脚本之前执行
  • 普通线程组:执行测试用例,可以有一个或者多个(并行或者串行)
  • Teardown线程组:测试后操作,所有脚本执行之后

参数介绍:

线程数:虚拟用户数,用户数越多,负载越大

Ramp-Up:全部虚拟用户数启动需要的时间

循环次数:指定运行次数,次数越多,运行时间越长,选中永远则一直运行,需设置调度器,设置脚本持续时间

启动延迟:脚本启动延迟等待的时间

延迟创建线程直到需要:勾选则可适当节省系统资源

JMeter参数化(函数)

定义:使用不同的测试数据,调用相同的测试方法进行测试

本质:实现测试数据与测试方法的分离

  1. 用户定义的变量:配置元件里,全局变量,引用变量的格式${变量名}
  2. 用户参数:前置处理器,同一组参数,不同用户访问的时候可以获取不同的值
  3. CSV数据文件设置:当不同用户或者同一用户多次循环的时候,都能获取到不同的值
  4. __counter函数:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
  5. __Random函数:生成随机数,参数一,参数二,界定了随机数生成的范围
  6. __time函数:获取当前的时间,设置格式yyyy-MM-dd hh:mm:ss 不设置格式为1970年至今的毫秒值

JMeter断言

  1. 响应断言

    • 响应文本:来自服务器的响应文本,即主体
    • 响应代码:响应的状态码,例如:200
    • 响应信息:响应的信息,例如:OK
    • Response Headers:响应头部
    • Request Headers:请求头部
    • Request Data:请求数据
    • URL样本:请求URL
    • Document(text):响应的整个文档
    • 忽略状态:忽略返回的响应状态码
    • 包括:文本包含的正则表达式
    • 匹配:整个文本匹配的指定的正则表达式
    • Equals:整个返回结果的文本等于指定的字符串(区分大小写)
    • Substring:返回的结果包含指定字符串(区分大小写)
    • 否:取反
    • 或者:逻辑或,存在多个测试模式(预期结果)
    • 测试模式:指定的结果,可以填多个
  2. json断言
    • 填写Assert JSON Path exist(实际结果—json路径)
    • 勾选Additionally assert value,Match as regular expression
    • 填写Expect Value (期望结果)
    • Expect null希望为空
    • Invert assertion 反转断言
  3. 断言持续时间
    • 持续时间(毫秒):HTTP请求允许的最大响应时间,超过则认为失败

JMeter关联

正则表达式:左边界(.*?)右边界

  1. 正则表达式提取器:

    • 引用名称:存放提取出来的参数名称
    • 正则表达式:左边界(.*?)右边界
    • 模板:用$$引用起来,正则表达式中有多个提取值,则可以是222, 表示解析到第几个值给参数
    • 匹配数字:0代表随机取值,-1代表全部取值,1代表取第一个值
  2. XPath提取器
    • Use Tidy当需要处理的页面时HTML格式时,必须选中该选项,XML或者XHTML时取消选中
    • 引用名称:存放提取出来的参数
    • XPthon Query:xpath表达式
    • 匹配数字:0随机,-1所有,1第一个
    • 缺省值:参数默认值
  3. JSON提取器
    • name of created variables :变量名
    • json path expressions :json表达式
    • Match No.:匹配数字,0随机,1,第一个,-1,全部
    • default values:参数默认值
  4. jmeter属性(跨线程组关联)
    • BeanShell取样器,保存属性,__ setproperty,读取属性, __ property
    • 作用:可以实现跨线程组关联

jmeter脚本录制

有API可以根据接口文档写测试脚本,没有的话就可以抓包来写或者直接录制脚本

步骤:

  1. 添加HTTP代理服务器并进行配置
  2. 设置本机的浏览器代理服务器
  3. 设置包含模式,排除模式

JMmeter直连数据库

直连数据库的作用

  1. 用作请求的参数化:登录时需要的用户名,可以从数据库中查询
  2. 用作结果的断言:添加购物车下订单,检查接口返回的订单号是否与数据库中生成的订单号一致
  3. 清理垃圾数据:添加商品编号不能重复,再执行该脚本不能成功,需要下次执行前删除该商品数据
  4. 准备测试数据:通过数据库来准备大量的性能测试数据

连接步骤:

  1. 将连接驱动包放入lib/ext目录重启

  2. 添加配置元件JDBC Connnection Configuration

    参数介绍:

    variable name:连接池名称

    URL:jdbc:mysql://localhost:3306/tpshop2.0

    ​ 协议+数据库ip+数据库端口+连接的数据库名

    JDBC DRIVER class: com.mysql.jdbc.driver

    若出现查询为空的情况,URL后面要添加 ?useUnicode=true&characterEncoding=utf-8

  3. 添加JDBC Request 取样器

    参数:

    Variable Name :数据库连接池名字

    Query Type:select statement 查询操作,update statement增删改操作

    query:填写SQL语句,末尾不加;分号

    Variable name:保存SQL语句返回结果的变量名

jmeter逻辑控制器

If控制器:

​ 控制子节点的元素是否运行

循环控制器:

​ 线程组循环次数对线程组下所有的HTTP请求有效,循环控制器只对子节点下的HTTP有效,循 环控制器次数为a,线程组循环次数为b,循环控制器下的请求运行为a*b次。

Foreach控制器:

​ 与用户定义的变量或者正则表达式一起使用,读取返回结果中一系列相关的变量值,该控制器 下的取样器都会被执行一次或多次,每次读取不同的变量值。

JMeter定时器

同步定时器(Synchronizing Timer)

可以阻塞线程,累计一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一时间点一起释放,瞬间产生很大的压力,两个参数,模拟用户数量,超时时间

常数吞吐量定时器

实现以固定的频率访问网页的功能单位是每人每分钟,QPS单位是每秒,要进行换算

固定定时器

必须添加在需要等待的HTTP请求的子节点下,可以在HTTP信息头管理器中,修改HTTP请求的头域

弱压力测试

设置线程组打开时间,在一个长的时间段,有若干个用户访问

高并发高频率

高并发:同步定时器

高频率:常数吞吐量定时器

jmeter分布式测试

  • 应用场景:当测试机无法模拟用户需要的业务负载量时,需要使用多台测试机配合测试
  • 原理:分布式测试分为一台控制及和多台代理机,控制机负责发布测试任务给代理机,代理机接收任务并向服务器发送请求,接收服务器返回的响应,然后将测试结果返回给控制机,由控制机对测试结果数据进行汇总统计
  • 前期准备:防火墙已关闭,客户端都在同一子网,所有系统使用相同版本的JMeter和JDK,已经为RML设置了SSL或将其禁用
  • 代理机设置:修改服务端口,bin目录下的jmeter配置文件中server port,关闭server.rml.ssl,注意去掉注释,打开bin目录下的jmeter-server.bat
  • 控制机:bin目录,配置文件中修改remote_host=ip:端口,ip:端口,代理机之间用逗号隔开,关闭server.rml.ssl,注意去掉注释。运行,远程启动所有。

jmeter图形化报告

将脚本文件放入bin目录,在当前目录运行cmd

命令为:jmeter -n -t 脚本文件 -l日志文件 -e -o 目录

-n 无图形化界面 -t 被运行的脚本文件 -l将运行信息写入日志文件 -e 生成测试报告 -o 指定报告输出的目录

性能测试工具LoadRunner

  • Virtual User Generator录制生成脚本
  • Controller创建测试场景
  • Analysis分析测试结果,出测试报告

史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会相关推荐

  1. 如果自己组装一个台式计算机有哪些,2015电脑组装教程:史上最全自己组装电脑教程...

    DIY电脑一直都是电脑爱好者非常喜欢的,电脑组装通常包括电脑硬件的选择,DIY硬件组装以及操作系统安装三个部分. 对于电脑爱好者来说,通过自己动手DIY组装电脑,不仅可以更为深刻的认识硬件,了解电脑主 ...

  2. .Net魔法堂:史上最全的ActiveX开发教程——发布篇

    一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程--开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包  C#开发的Activ ...

  3. 10_史上最全的Markdown使用教程(没有之一)(20190115)

    我用markdown写博客已经有半年之久了吧,但是还是会出现有些你想用的功能很难找,或者你尝试使用它不好使,为了帮助那些和我一样热衷于使用markdown的乘客,我决定自己造一架航班,让我们一起搭乘M ...

  4. .Net魔法堂:史上最全的ActiveX开发教程——部署篇

    一.前言 接<.Net魔法堂:史上最全的ActiveX开发教程--发布篇>,后我们继续来部署吧! 二. 挽起衣袖来部署   ActiveX的部署其实就是客户端安装ActiveX组件,对未签 ...

  5. 史上最全的FreeIPA搭建教程(二)

    如有疑问,请私信我!!!! 码字儿截图不容易啊 1.web后台使用教程 名字显示是反的,需要改成正确的 2.FreeIPA更新证书 默认的证书都是2年时间,到期不更新后果的就是所有账号都无法登录了 # ...

  6. 史上最全scrcpy投屏教程(用你的电脑控制手机)

    史上最全scrcpy投屏教程(用你的电脑控制手机) 一.下载投屏所需的资源 网址:scrcpy-win64-v1.17 提取码: yvid : 当然你也可以去github下载最新的或你所需要的资源,网 ...

  7. 史上最全vscode配置使用教程

    史上最全vscode配置使用教程 正在上传-重新上传取消 灰蓝宇墨 ​ 上海闪店联信息科技有限公司 前端工程师 5,041 人赞同了该文章 工欲善其事,必先利其器.想要优雅且高效的编写代码,必须熟练使 ...

  8. Jmeter压力测试教程(上)

    JMeter压力测试 一. 简介 1.1优点 1.2缺点 二.安装 2.1下载 2.2解决中文乱码问题 2.5配置环境变量 2.4启动 入门案例 三.线程组相关 3.1 创建多个线程组 3.2 并发和 ...

  9. jmeter 压力测试教程全解

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Jmeter5.0 下载地址:http://jmeter.apache.org/download_jmeter.cgi wget -c http:// ...

最新文章

  1. Centos8 使用auditd配置系统审计
  2. linux 打包压缩工具
  3. PyQt5 技术篇-通过参数控制Dialog窗口增加?问号按钮
  4. 「 每日一练,快乐水题 」744. 寻找比目标字母大的最小字母
  5. 界面设计方法 (1) — 3. 字典功能的设计
  6. Springmvc拦截所有html和Controller,实现未登录则返回登录页,已登录则可以访问需要登录的页面。
  7. sql去除字符串中首尾空格
  8. Com 方法默认参数值设置
  9. php导入qq数据txt代码,/谁有能都实现将excel文件导入到数据中,并在php网页上显示的源码啊,有的发送1091932879@qq.com,谢谢!...
  10. 维护通讯录的方法及群组通讯录 管理平台
  11. 仿站小工具和小飞兔(扒取网站页面)
  12. 期刊级别应该是怎样划分的呢?
  13. 寻宝游戏设定_第1集的答案(寻宝游戏)
  14. Power bi 3.12 瀑布图
  15. Spark入门基础教程
  16. 为什么总是出现Facebook封号问题?
  17. ISP PIPLINE (二) LensShading Correct
  18. MYSQL里的DBS是什么_DBS-MySQL:MYSQL获取自增ID的四种方法
  19. php中的如何将拼接到一起,如何将两个视频拼接在一起?视频拼接方法
  20. MDF和DHF、DMR、DHR三者差异?注册与备案文件?

热门文章

  1. Python之建模数值逼近篇–最小二乘拟合
  2. Veritas NetBackup 10.0 (Unix, Linux, Windows)
  3. python弹幕分析_《用python 玩转数据》项目——B站弹幕数据分析
  4. 2022年茶艺师(初级)考试题库及茶艺师(初级)作业考试题库
  5. IDM产品安全机制说明
  6. 微信无法显示好友头像
  7. 安卓zip解压软件_暴力破解~解压缩神器!
  8. cytoscape插件下载_Cytoscape软件下载
  9. caffe的安装配置(CUDA7.5+VS2013)
  10. 入门百度地图 JavaScript API