业务场景

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

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;

Jmeter-根据负载计算并发用户实际案例的更多相关文章

  1. 如何利用JMeter模拟超过 5 万的并发用户

    本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMeter进行本地测试 BlazeMeter沙箱测 ...

  2. jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测

    自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...

  3. 硬核!如何模拟 5w+ 的并发用户?

    来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMe ...

  4. 【转】使用JMeter进行负载测试——终极指南

    使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...

  5. LoadRunner并发用户和集合点的深入讨论

    看到51上三个高手Zee, 大漠飞鹰,xingcyx的一场非常精彩的关于并发用户数和集合点的讨论,很有意义.如果对这两个概念不清楚的朋友,一定要仔细领悟了. 故事开始于xingcyx的一番话: 声明: ...

  6. Loadrunner通过吞吐量计算每个用户需要的带宽

    Loadrunner通过吞吐量计算每个用户需要的带宽 运行一个场景,点击Analysis进行分析,使用分析报告中的Average Throughput(bytes/second)进行计算. 计算公式: ...

  7. Spark(二)—— 标签计算、用户画像应用

    一.标签计算 数据 86913510 {"reviewPics":[],"extInfoList":null,"expenseList":n ...

  8. Jmeter服务器性能压测-用户登录实例CSV方式

    为什么用CSV方式压测,因为用jdbc链接数据库,我发现数据库数据量量大的情况下,Jmeter会内存溢出 第一步:数据准备,根据登录接口需要的参数准备测试数据 例子中,测试的登录接口需要4个参数化数据 ...

  9. 转:利用ant与jmeter实现负载测试自动化

    性能测试一直以来都是测试领域一个令人争议的话题.测试的参考标准.评判依据及测试的方法选择都很难有一个统一的说法.但无论如何,对于需要能够承受一定压力而运行的程序来说,进行其进行功能和性能测试是一个必不 ...

随机推荐

  1. service层 必须做业务逻辑的处理

    package com.aaa.zxf.service; import com.aaa.zxf.mapper.BookMapper; import com.aaa.zxf.model.Book; im ...

  2. NOI Online 2021 入门组 T1

    Description 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 \(a, b, c\),现在请你帮他们切蛋糕,规则如下 ...

  3. ApacheCN C/C++ 译文集(二) 20211204 更新

    编写高效程序的艺术 零.序言 第一部分:性能基础 一.性能和并发性介绍 二.性能测量 三.CPU 架构.资源和性能 四.内存架构和性能 五.线程.内存和并发 第二部分:高级并发 六.并发和性能 七.并 ...

  4. 布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.4

    公告 我们的机器学习群(915394271)正式改名为财务提升群,望悉知. 请关注我们的公众号"ApacheCN",回复"教程/路线/比赛/报告/技术书/课程/轻小说/漫 ...

  5. Nginx网络压缩 CSS压缩 图片压缩 JSON压缩

    一.序言 使用Nginx作为web应用服务时,会代理如下常见文件:js.css.JSON.图片等,本文提供基于Nginx内置的压缩技术,提供网络请求响应速度的解决方案. 1.网络压缩原理 网络压缩的原 ...

  6. dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

    这是一个用于本机多进程进行 IPC 通讯的库,此库的顶层 API 是采用 ASP.NET Core 的 MVC 框架,其底层通讯不是传统的走网络的方式,而是通过 dotnetCampus.Ipc 开源 ...

  7. JDK目录介绍

    bin目录:存放Java的编译器.解释器等工具(可执行文件). db目录:JDK7附带的一个轻量级的数据库,名字叫做Derby. include目录:存放的调用系统资源的接口文件. jre目录:存放J ...

  8. linux 多个C源文件编译

    转载请注明来源:https://www.cnblogs.com/hookjc/ 如果有多个源文件,基本上有两种编译方法: [假设有两个源文件为test.c和testfun.c] 1. 多个文件一起编译 ...

  9. Mac搭建Git服务器—开启SSH

    SSH开启 在osx中开启ssh访问非常简单,只需要打开"系统偏好设置"并且点击"共享"图标即可. 选中下图中的check box即允许远程登陆.server处 ...

  10. MySQL 数据库的tab 补全功能 (懒人必备)

    MySQL 数据库的tab补全功能                      跟着步骤走~~ 懒人养成第一步 不仅帮你补全 甚至预判你的预判,就问你可怕不可怕 1.安装相关依赖软件(需要配置yum官方 ...