三、性能测试场景设计

性能测试场景设计

    • 一、引言:如果公司要求你去做性能测试,遇到这些场景,我们要如何设计?
    • 二、6种常见设计方法
      • 1、普通性能场景设计
      • 2、负载测试性能场景
      • 3、压力测试场景
      • 4、面向目标性能场景

  • 一、引言:如果公司要求你去做性能测试,遇到这些场景,我们要如何设计?

    需求1, 活动页面,要你做性能测试, 看是否能满足1000个人同时访问

    需求2:对接的接口,如果要满足 50tps,这样的场景怎么设计

    需求3: 秒杀活动要看秒杀时,服务器能否支持500个人同时秒杀

  • 二、6种常见设计方法

    • 普通性能场景设计
    • 阶梯性能场景(负载测试场景)
    • 压力测试场景
    • 面向目标场景(lr很容易,但是jmeter,没有系统讲解,会不知道怎么做)
    • 混合场景设计(混合,if条件)不同数量的人,向不同的接口发起请求
    • 有时间规律场景
  • 1、普通性能场景设计

    • 线程组

      • 1)线程数: 模拟的并发用户数量

        • 线程数,有没有限制呢?
          • jmeter本身是没有对线程数做限制
          • 但是, jmeter启动这些并发用户数时,需要消耗资源,受电脑cpu的主频限制,一台电脑不可能创建无限量的线程数
            • 实际的情况是比如http协议的脚本的线程数,大概能产生1500左右。2000个可能产生,但是可能会出错。1000左右比较保守,可能能产生。
            • 也就是说,1台电脑,http协议脚本,保守估计是可以产生1000个并发用户数
            • 如果你想模拟超过1000并发用户数,你可能需要考虑 分布式来实现
      • 2)ramp-up时间

        • 启动所有线程的时间(前提:线程数设置在合理的范围)
        • 在ramp-up时间结束点,所有的线程都会启动
        • 案例:5s内启动300个线程在这里插入图片描述
        • 在ramp-up时间内,是否均匀产出并发用户数,是无法确定的(拿上面的例子举例,不能保证每秒启动60个线程)
        • 在启动时间内,产生的并发用户数,一产生,就会去发起请求
        • 启动了并发用户,就会去发起请求,不同时间产生的并发用户数,与前面产生的并发用户数,调用的接口可能不一样
        • jmeter做性能测试,更多时候,使用的是,广义并发
        • ramp-up时间要大于等于1
        • 线程数和ramp-up时间,怎么设置才比较合理?
          • 500以内并发用户, ramp-up时间建议设置2~4s
          • 500-1000的并发,ramp-up时间建议设置5s
          • >1000 ramp-up时间建议设置5-8s
          • 一个原则:
            • ramp-up时间在总执行时间中,占比要很低(比如你总执行时间是10s,那上面那些建议时间就太高啦hhh)。
            • 一般的情况,一个性能测试的总执行时间是几十秒钟~几十分钟
      • 3) 循环次数
        在这里插入图片描述

        • 默认必须大于等于1
        • 循环次数,就是每个并发用户数要去执行的请求数量
        • 如果勾选了永远选项,就会一直循环,直到你点击停止
          • 这个停止会有问题吗?
            • 如果勾选了永远后点击停止,会导致请求报错或卡死
            • 这个选项要与调度器 一起使用
          • 调度器:
            • 持续时长:设置持续时长(s)
            • 启动延迟:设置延迟时长(s),一般真正做性能测试的时候不用
          • 实践:300个并发用户,持续运行300s(忘了截图了,先把数据贴上来吧,尴尬。我们的脚本可以加上聚合报告和响应时间图)
            • 聚合报告如下: avgRT: 0.117s 90%RT:0.262s avgTPS: 2544.9
            • 结论:
              • 90%RT:0.262s 可以看到,这个响应时间是比较快的,因为用户满意度指数1.5s
              • 300个人, avgTPS: 2544.9 tps>user 那么,每个人1秒钟发了约8个请求,所以,我们本次300个并发用户数,未超过这个接口能承受最大并发用户数
              • 可以简单得到一个结论: 这个查询接口最大并发用户数大于300
  • 2、负载测试性能场景

    • 负载测试: 逐步增加并发用户数
    • 我们可以下载插件实现这个功能 下载插件步骤
      • 插件管理: jpgc(这里后面记得加个空格,否则搜不到哦) 安装这个插件
      • 添加方式:线程组-jp@gc stepping thread group
        在这里插入图片描述
      • 总共启动100个线程,然后用5秒钟增加10个并发用户数,持续运行30秒。当100个线程全部启动后,持续运行60然后每1s逐步停止5个线程
    • 完全不知道项目的性能瓶颈范围时,我们怎么设置?

      • 答:我们可以从0 - 100,200…逐步加压,这样就可以找到瓶颈啦~
    • 已经找到一个范围了,怎么设置?

      • 答:举个栗子,比如我们已经找到了最大的范围是20-30,那我们可以设置总线程数为30,然后设置每60s增加1个线程,然后设置那个线程的启动时间为1s,持续60s。最后每1s停止5个线程,直到最终停止
        在这里插入图片描述
    • 那么线程组跑完以后,我们要怎么查看呢?

      • 我们可以通过添加监听器的方式进行查看,gc为我们提供了5个监听器
        • jp@gc - Active Threads Over Time:随着时间变化的并发用户数图
        • jp@gc - Flexible File Writer
        • jp@gc - PerfMon Metrics Collector
        • jp@gc - Response Times Over Time:响应时间和随着时间变化的响应时间图
        • jp@gc - Transactions per Second :tps的图,可以看成功和失败,如果这边显示失败,可能表示服务器已经到达瓶颈
          在这里插入图片描述

      ps:分析的时候可以多张图一起看

    • 我们思考个问题,增加的这个量,一定相同吗?
      • 答: 增加的量(步长),可以相同,也可以不相同
        • 相同只是一种特殊请求 stepping threads group(就是上面这个)
        • 不相同的增量,是不能用这个的
  • 在阶梯线程组,执行过程中,我们的并发用户数是时刻发生变化
  • 阶梯线程组设计的规律:
    • 缓起步,快结束
      • 快结束: 并不是瞬间结束,只是相对缓慢的结束,为什么要这么做呢,因为如果立刻停止,可能导致服务中断而报错(把这种人为导致的错误算在服务器头上显然是不合理的)
  • 阶梯线程组可以看聚合报告吗?
    • 答:聚合报告中的数据,都是平均值。在负载场景/阶梯场景,看了也没有意义
  • 但是这边注意一点,性能测试时,能不启用监听器,则不启用
    • 真正做性能测试,怎么做呢?
      • CLI-mode 无图形界面模式 命令行
      • GUI-mode 仅仅用于编写调试脚本
    • 没有监听器,我们怎么知道性能测试结果?
      • jmeter的html报告,与是否启用添加监听器无关,不信我们可以测试下。我们在不添加监听器的情况下,先在工具里点击generate html report,然后把jtl文件导入第一个,选择jmeter.properties/user.properties导入第二个,然后新建一个空文件夹,导入第三个,然后点击生成,然后查看报告,一样可以看到结果
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
  • 3、压力测试场景

    • 特点:长时间,看稳定性
    • 具体我们要怎么设计压力测试场景呢?
      • 比如我们有个接口的最大的并发数是29,那我们可以这么设计:
      • 29 * 20% = 6 我们可以用20%的线程,就是6个线程压10h
        在这里插入图片描述

      • 29 * 80% = 24 我们可以用80%的线程,就是24个线程压10h,这个我们用阶梯测试的方式来演示
        在这里插入图片描述

  • 4、面向目标性能场景

    • 需求: 期望我项目的接口,都要能满足50tps

      • 50tps表示每秒50个事务
      • 我们为什么得出要50t/s呢,我们可以来算下:
        • 1分钟: 50*60s = 3000个事务
        • 1小时 3000 * 60 = 180000 事务,就是1小时要处理18w个请求
        • 10小时就是180w,24h就是432w个请求
        • 单纯一个接口都能支持这么大的请求了,而且还有其他接口帮忙分担流量。中小微企业的产品日均访问量约为千万, 50tps基本已经能满足要求了

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

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

相关文章

W6100-EVB-PICO 做UDP Server进行数据回环测试(七)

前言 前面我们用W6100-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。 UDP是什么?什么是UDP Server?能干什么? UDP (User Dataqram P…

海量数据迁移,亚马逊云科技云数据库服务为大库治理提供新思路

1.背景 目前,文档型数据库由于灵活的schema和接近关系型数据库的访问特点,被广泛应用,尤其是游戏、互联网金融等行业的客户使用MongoDB构建了大量应用程序,比如游戏客户用来处理玩家的属性信息;又如股票APP用来存储与时…

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。 这个时…

RabbitMQ简单使用

RabbitMq是一个消息中间件:它接收消息、转发消息。你可以把它理解为一个邮局:当你向邮箱里寄出一封信后,邮递员们就能最终将信送到收信人手中。 RabbitMq、消息相关术语如下: 生产者:生产者只发送消息,发…

React(5)

1.受控组件案例 1.1之前的影院案例改写 import React, { Component } from react import axios from axios import BetterScroll from better-scroll import ./css/02_tab.cssexport default class Cinema extends Component {constructor() {super();this.state {cinemaLis…

Jmeter进阶使用:BeanShell实现接口前置和后置操作

一、背景 我们使用Jmeter做压力测试或者接口测试时,除了最简单的直接对接口发起请求,很多时候需要对接口进行一些前置操作:比如提前生成测试数据,以及一些后置操作:比如提取接口响应内容中的某个字段的值。举个最常用…

只需要自动售货机,商业模式立马大变样!

随着互联网、大数据和人工智能的蓬勃发展,商业模式正以前所未有的方式融合,其中自动售货机作为新零售模式的一颗璀璨明珠,正引领着购物体验的革命。这个巧妙的结合将消费者的便利、数据的智能分析以及科技的创新融为一体,重新定义…

Mysql:Access denied for user ‘root‘@‘localhost‘ (using password:YES)解决方案

最近在配置Maven以及Mybatis时,连接localhost数据库时出现无法连接,用cmd测试时报错:Access denied for user ‘ODBC’‘localhost’ (using password: NO),这个意思就是不允许远程访问,一开始笔者进入mysql试了一下是…

Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化 1.定义数据类 [Serializable] public class ZoomPoint {// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot Vector2.one / 2;// 放大倍率,小于1是为缩小倍率,小于0是取绝对值,不…

机器学习中基本的数据结构说明

数据维度或数据结构 当我们在机器学习或深度学习的领域内处理数据,我们通常会遇到四种主要的数据结构:标量,向量,矩阵和张量。理解这些基本数据结构是非常重要的,因为它们是机器学习算法和神经网络的核心。下面是对这…

NLPR、SenseTime 和 NTU 加速自动视频纵向编辑

视频人像编辑技术已经在电视、视频和电影制作中得到了应用,并有望在不断发展的网真场景中发挥关键作用。最先进的方法已经可以逼真地将同源音频合成为视频。现在,来自北京模式识别国家实验室(NLPR)、商汤科技研究和南洋理工大学的…

go.sum are different when using go mod vendor/download

本地Golang配置 今天本地编译一个项目,遇到以下错误 PS D:\Code\Golang\jiankunking\k8s-ext> go mod tidy go: downloading github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.4incompatible verifying github.com/gin-gonic/ginv1.7.3: checksum mismat…

JVM 内存结构快速入门

文章目录 一、简介二、JVM内存区域2.1 方法区2.3.2 永久代和元空间 2.2 堆2.1.2 对象的创建和销毁 2.2 栈内存2.2.1 栈帧的组成和作用2.2.2 栈的特点 2.4 程序计数器2.4.1 程序计数器的作用和使用场景 一、简介 Java 内存模型(Java Memory Model,JMM&…

微信小程序云开发快速入门(2/4)

前言 我们对《微信小程序云开发快速入门(1/4)》的知识进行回顾一下。在上章节我们知道了云开发的优势以及能力,并且我们还完成了码仔备忘录的本地版到网络版的改造,主要学习了云数据库同时还通过在小程序使用云API直接操作了云数…

做海外游戏推广有哪些条件?

做海外游戏推广需要充分准备和一系列条件的支持。以下是一些关键条件: 市场调研和策略制定:了解目标市场的文化、玩家偏好、竞争格局等是必要的。根据调研结果制定适合的推广策略。 本地化:将游戏内容、界面、语言、货币等进行本地化&#…

智慧工地源码,PC+APP源码,项目管理端+企业监管端+数据大屏端

智慧工地概念 智慧工地是一种崭新的工程全生命周期管理理念,是指运用信息化手段,通过对工程项目进行精确设计和施工模拟,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟…

DIP:《Deep Image Prior》经典文献阅读总结与实现

文章目录 Deep Image Prior1. 方法原理1.1 研究动机1.2 方法 2. 实验验证2.1 去噪2.2 超分辨率2.3 图像修复2.4 消融实验 3. 总结 Deep Image Prior 1. 方法原理 1.1 研究动机 动机 深度神经网络在图像复原和生成领域有非常好的表现一般归功于神经网络学习到了图像的先验信息…

解压版 MySQL 数据库的安装与配置

目录 1 下载2 安装3 配置3.1 添加环境变量3.2 新建配置文件3.3 初始化MySQL3.4 注册MySQL服务3.5 启动MySQL服务3.6 修改默认账户密码 4 登录5 卸载 安装环境:Win10 64位 软件版本:MySQL 5.7.24 解压版 1 下载 点击链接 进入如下界面 ❗️注意: 我们一般不会选择最新…

物联网智慧安防实训综合实训基地建设方案

一、系统概述 物联网智慧安防实训综合实训基地是一个为学生提供综合实践、培养技能的场所,专注于物联网技术与智慧安防应用的培训和实训。通过物联网智慧安防实训综合实训基地的建设和运营,学生可以在真实的环境中进行实践训练,提高其物联网技…