• Jmeter-根据负载计算并发用户实际案例


    业务场景

    假设公司领导现在给你分配了一个性能测试需求如下:

    1:公司有1000人在上班时间段会登录平台进行打卡操作,可能会登录打卡多次
    2:业务高峰时间段在8:00-8:30,半小时
    3:需要保证90%用户的响应时间在1s以内
    4:保证在半小时内支撑5000笔打卡业务完成,同时90%业务时间不超过1s,半小时内最大系统并发数能达到多少?每秒最大用户并发能达到多少?

    我们拿到需求首先进行需求分析--》模型构架&用例设计--》编写脚本--》执行脚本(结合实际应用场景调试脚本)--》分析结果

    1.需求分析

    a,1000人打卡持续30分钟,可以得出每秒打卡人数=1000/(30*60)=0.56,也就是2s一个人打卡

    b,5000笔打卡业务30分钟内,可以得出每秒打卡次数=5000/(30*60)=2.77,也就是1s 事务数2.77

    综上,每2s一个用户打卡,每秒打卡3次,即30分钟内满足tps=3

    我们可以通过上面分析的进行一个计算,粗略算出一个并发数(注:实际场景中还需考虑用户的思考时间,输入信息的时间)

    我们可以单独配置登录和打卡接口,获取各接口请求时间 ,可以得出用户登录打卡一次需要时间=登录(317ms)+打卡(976ms)=1293ms,则1s循环次数=1000/1293=0.77次,30分钟循环次数=0.77*30*60=1386次

    5000笔打卡,5000/1386=3.6个线程数,为保证半小时内支撑超过5000笔打卡,则我们可以设置线程数=4

    实际的业务场景中还需要考虑用户输入用户名密码的时间,用户思考时间,打卡加载时间等,我们可以加定时器

    2.模型构建&用例设计

    这种需求是典型的通过负载获取并发,我们需要设计下业务场景

    模型构建

    登录业务流程

    步骤1:用户访问登录页

    步骤2:用户输入用户名,密码点击登录,跳转至首页

    步骤3:点击退出,返回至登录页

    考勤打卡业务流程

    步骤1:用户访问登录页

    步骤2:用户输入用户名,密码点击登录,跳转至首页

    步骤3:点击考勤,进入打卡界面

    步骤4:点击打卡,跳至考勤列表页

    步骤5:点击退出,返回至登录页

    场景用例设计

    场景设计

    性能测试过程中,首先应该设计测试场景,然后针对场景设计脚本。为了真实反映被测对象的性能问题,需要尽可能模拟出被测对象可能发生瓶颈的业务场景。然后设计针对业务的测试场景。

    常用测试场景的类型

    性能测试通常有几种常用测试场景:单业务基准测试、单业务压力测试、单业务负载测试、综合业务基准测试、综合业务压力测试、综合业务负载测试。
    归属为 4 种测试类型:基准测试、压力测试、负载测试
    1)基准测试
    测试某个具体业务是否满足系统设计 or 用户期望的性能指标。
    如期望登录接口支持 500 个用户并发登录,同时响应时间不超过需求值。满足则认为基准测试完成,否则失败。基准测试过程中,性能指标的任何一项均需成功,才认为基准测试完成。基准测试可分为并发基准、业务量基准,其目的都在于验证是否满足预期目标设定。

    2)压力测试
    测试某个具体业务在最大负载下,持续服务的时长,以此验证被测业务的稳定性

    压力测试过程中所设计的负载,是以系统基准测试为标准,如登录接口最大并发为 500 个并发,则压力测试的负载设为 500 个。通过运行时长的变化,验证服务器在系统最大负载下持续服务的能力。

    3)负载测试
    测试某个具体业务能够承受的最大负载,验证被测业务能够承受的最大负载数
    如系统基准测试最大并发为 500 个,则通过多次测试,逐步加大负载,最终获得被测业务的最佳负载。在最佳负载下,系统需要满足各项性能指标。
    确定本次性能测试的场景主要有下面 4 个场景:

    ①登录并发基准测试
    ②登录业务量基准测试
    ③考勤并发基准测试
    ④考勤业务量基准测试

    接下来我们模拟真实场景来验证并发数

     登录打卡流程耗时=345*5=1725ms

    加了事务后得到登录打卡耗时=1397ms

    实际情况,还需要考虑以下情形的思考时间,如:

    用户输入用户名、密码:5s;

    打开考勤后等待时间:2s;

    用定时器模拟思考时间;

    则登录打卡总耗时=1.397+5+2=8.397s

    30分钟可执行次数=30*60/8.397=214.3

    需要5000次打卡,则实际需要线程数=5000/214.3=23.3,保证打卡数超过5000,则取线程数为24,所以线程数=5000/(60*T/t) =5000*[t/(60*T)]

    由此可以得出:Thread = BC*[t/(60*T)],

    BC---业务数/业务量  当前BC=5000

    t---单用户单次业务消耗时间,尽可能模拟用户真实操作,当前t=8.397s

    T---考察时间,当前T=30分钟

    Thread---这里计算的是需要的线程数,事实上这个公式计算的是单位时间平均并发数。就是单位时间内有多少用户或者线程并发向服务端发起请求;

    假如登录打卡业务场景,计算的是24.

    在jmeter中表示需要系统平均需要24个线程同时发起请求才能在对应的时间段内支撑对应的业务量;

    在真实的用户场景中,则表示平均每秒最大支撑24个用户同时发起请求才能在对应的时间段内支撑对应的业务量;

    这个计算的是平均并发

    对应的峰值并发:Thread_Max = Thread + 3*Thread

    如果平均并发是24的话,那么Thread_Max = 24 + 3*根号24 = 38.7,每秒的并发用户峰值大约是39;

  • 相关阅读:
    net过滤表单和url参数
    html mailto
    sql提取汉字拼音首字母
    使用jquery获取radio的值
    net文件服务器配置
    如何将简体字保存到繁体数据库而不会出现乱码
    net直接下载文件
    java开发:笔记
    android开发:LogCat失效,adb失效
    编程记事本
  • 原文地址:https://www.cnblogs.com/hpliud/p/14435696.html
Copyright © 2020-2023  润新知