写点什么

如何进行 5 万并发用户负载测试?

  • 2019-02-22
  • 本文字数:3281 字

    阅读完需:约 11 分钟

如何进行5万并发用户负载测试?

本文将介绍运行 5 万并发用户测试所需要的步骤(该测试用户量最多可达 200 万)。

步骤概述

  1. 编写脚本;

  2. 使用 JMeter 进行本地测试;

  3. BlazeMeter 沙箱测试;

  4. 使用一个控制台和一个引擎,设置每个引擎的用户数量;

  5. 设置和测试集群(一个控制台和 10 到 14 个引擎);

  6. 使用主从功能达到最大并发量目标。


第 1 步:编写脚本

在开始之前,请先从 JMeter Apache 社区网站(http://jmeter.apache.org/)获取最新的 JMeter 版本。


下载 JMeter 插件管理器(https://jmeter-plugins.org/wiki/PluginsManager/)。下载好 JAR 文件后,将其放入 JMeter 的 lib/ext 目录。然后,启动 JMeter,并转到“选项”菜单,找到插件管理器。


你可以通过多种方式获取脚本:


  1. 使用 BlazeMeter Chrome 插件记录测试步骤;

  2. 使用 JMeter HTTP(S)测试脚本记录器设置代理,运行测试,并记录所有内容;

  3. 从头开始手动操作并构建所有内容(主要针对功能/QA 测试)。


如果你的脚本是通过录制得到(如上面的步骤 1 和 2),请记住:


  1. 你需要修改某些参数,例如用户名和密码,或者使用包含这些参数的 CSV 文件,这样每个用户都可以是唯一的。

  2. 你可能需要使用正则表达式、JSON 路径提取器、XPath 提取器来提取各种元素(如 Token-String、Form-Build-Id 等),以便完成“AddToCart”、“Login”之类的请求。

  3. 保持脚本参数化,并可以使用配置元素(例如 HTTP 请求默认值),以便可以更方便地切换环境。

第 2 步:使用 JMeter 进行本地测试

开始调试脚本,一个线程,进行一次迭代,使用 View Results Tree、Debug Sampler、Dummy Sampler 和打开的 Log Viewer(以防出现 JMeter 错误)。


运行所有的场景(返回 true 和 false),确保脚本可以按预期正常运行。


在使用一个线程成功运行脚本后,将线程数提升到 10 到 20 个,时间为 10 分钟:


  1. 如果你希望每个用户都是唯一的——结果是这样的吗?

  2. 有发生任何错误吗?

  3. 如果你正在进行注册过程测试,请看一下后端——是否根据你的模板创建了帐户?它们是唯一的吗?

  4. 从摘要报告中可以看到有关测试的统计信息——它有意义吗?找到平均响应时间、错误、命中率/秒。


在脚本准备好之后:


  1. 删除 Debug/Dummy Samplers 和脚本监听器;

  2. 如果你使用了监听器(例如“将响应保存到文件”),请确保没有使用任何路径!对于监听器或 CSV 数据集配置,请确保没有使用本地路径。相反,只使用文件名,就好像它与脚本位于同一文件夹中一样。

  3. 如果你使用了专有的 JAR 文件,请务必将它上传。

  4. 如果你使用了多个线程组(或不是默认线程组),请确保在将其上传到 BlazeMeter 之前设置好这些值。

第 3 步:BlazeMeter 沙箱测试

如果这是你的第一次测试,应该阅读一下这篇文章(http://community.blazemeter.com/knowledgebase/articles/65152-adding-a-new-jmeter-test-plan),了解如何在 BlazeMeter 中创建测试。


沙箱允许你对脚本和后端进行测试,确保 BlazeMeter 一切正常。


首先,按下灰色按钮:选择要控制的 JMeter 引擎,以便完全控制测试参数。


你可能会遇到的常见问题包括:


  1. 防火墙——确保你的环境对 BlazeMeter CIDR 列表(正在不时更新)是开放的,并将它们列入白名单;

  2. 确保所有测试文件(例如 CSV、JAR、JSON、User.properties 等)都在;

  3. 确保没有使用任何本地路径。


如果还有问题,请查看日志中的错误(你应该可以下载整个日志)。


沙箱配置可以是这样的:


  • 引擎:仅限控制台(一个控制台,0 个引擎)

  • 线程:50-300

  • 加速时间:20 分钟

  • 迭代:永远

  • 持续时间:30-50 分钟


你可以在加速期间获得足够的数据,分析一下结果,确保脚本按预期执行。


你应该看一下 Waterfall/WebDriver 选项卡,看看请求是否正常。这个时候你应该不会遇到任何错误(除非你是有意的)。


另外,还要看一下监控选项卡,看看使用了多少内存和 CPU——这有助你完成步骤 4,到时你可以尝试设置每个引擎的用户数。

第 4 步:使用一个控制台和一个引擎设置每个引擎的用户数量

在确信脚本可以在 BlazeMeter 中完美运行之后,我们需要弄清楚一个引擎可以支持多少用户。


如果你能够使用沙箱数据来确定,那就太好了!


我将为你提供一种方法来解决这个问题,无需查看沙箱测试数据。


将测试配置设置为:


  • 线程数:500

  • 加速时间:40 分钟

  • 迭代:永远

  • 持续时间:50 分钟


接下来,使用一个控制台和一个引擎。


运行测试,并通过监控选项卡监控测试引擎。


如果你的引擎没有达到 75%的 CPU 利用率或 85%的内存使用率(可以忽略一次性峰值):


  • 将线程数改为 700,并再次运行测试;

  • 提高线程数,直到获得 1000 个线程或 60%的 CPU/内存使用率。


如果你的引擎超过了 75%的 CPU 利用率或 85%的内存使用率(可以忽略一次峰值):


  • 注意第一次达到 75%的时间点,然后查看当时有多少用户。

  • 再次运行测试,这次使用从上一次测试中获得的用户数量。

  • 这一次,使用实际测试的加速时间(5 到 15 分钟是一个不错的值),并将持续时间设置为 50 分钟。

  • 确保在整个测试过程中不要超过 75%的 CPU 或 85%的内存使用率。


为了安全起见,可以为每个引擎减少 10%的线程数。

第 5 步:设置和测试集群

我们现在知道一个引擎可以支持多少线程。在这一步结束时,我们将知道一个集群(测试)可以支持的用户数量。


集群是一种逻辑容器,只有一个控制台和 0 到 14 个引擎。当使用超过 14 个引擎时,它实际上会创建两个集群(控制台数量会增加)并克隆你的测试。


每个控制台最多 14 个引擎是基于 BlazeMeter 的测试得出的结果,可以确保控制台能够处理 14 个引擎的压力。


因此,在这个步骤中,我们将采用步骤 4 的测试,只是将引擎的数量增加到 14。


在测试运行时,请转到监控选项卡,并验证:


  1. 不会有引擎超过 75% CPU 或 85%内存限制;

  2. 找到控制台标签。转到日志选项卡->网络信息,查找控制台的私有 IP,这样就可以找到控制台的名称。它不应达到 75% CPU 或 85%内存限制。


如果控制台达到了这些限制,请减少引擎数量,并再次运行测试,直到控制台处于这些限制范围内。


在这个步骤结束时,你就会知道:


  1. 每个集群可以支持的用户数量;

  2. 每个集群可以达到的命中次数。


在负载结果图下的聚合表中查找其他统计信息,获取有关集群吞吐量的更多信息。

第 6 步:使用主从功能达到最大并发量目标

我们已经到了最后一个阶段。


我们已经知道脚本可以正常运行,还知道一个引擎可以支持多少用户以及一个集群可以支持多少用户。


我们假设有这些值:


  • 一个引擎可以支持 500 个用户;

  • 集群将有 12 个引擎;

  • 我们的目标是进行 5 万用户的测试。


因此,我们需要创建 50000(500 * 12) = 8.3 个集群。


我们可以使用 8 个包含 12 个引擎(4 万 8)的集群和一个包含 4 个引擎(另外 2 千)的集群。但是,最好可以像这样分布负载:


我们将为每个集群使用 10 个引擎,而不是 12 个,这样每个集群的用户数可以达到 10 * 500 = 5 千。然后再使用 10 个集群,就可以达到 5 万的规模。


这将有助于我们:


  1. 不需要维护两种不同的测试类型;

  2. 可以通过简单地复制现有的集群每次增长 5 千(5 千比 6 千更常见);

  3. 如果有需要,我们可以随时添加更多的集群。


我们现在准备好用 5 万用户创建最终的主从测试:


  1. 将测试名称从“My prod test”更改为“My prod test - slave 1”。

  2. 我们回到第 5 步,在高级测试属性里将 Standalone 更改为 Slave。

  3. 保存,我们现在有九个从集群测试和一个主集群测试。

  4. 回到“My prod test -slave 1”。

  5. 按复制。

  6. 现在,重复步骤 1 到 5,直到创建完所有的九个从集群测试。

  7. 回到“My prod test - slave 9”,并按下复制。

  8. 将测试名称改为“My prod test -Master”。

  9. 转到高级测试属性,并将 Slave 改为 Master。

  10. 检查刚刚创建的所有从集群测试并按保存。


针对 5 万用户的主从测试已准备就绪了。按下主测试的开始按钮,将启动 10 个测试(一个主测试和九个从测试),每个测试有 5 千个用户。


你可以将每个测试(从测试或主测试)更改为来自不同的区域,具有不同的脚本/csv/其他文件,使用不同的网络模拟器或不同的参数。


主测试和从测试的汇总报告将在主测试报告中的一个叫作“Master load results”的新选项卡中找到,打开这个报告就可以看到每个测试的结果。


英文原文:https://dzone.com/articles/how-to-run-a-load-test-of-50k-concurrent-users


2019-02-22 07:408678
用户头像

发布了 731 篇内容, 共 473.3 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

「Go框架」剖析iris中错误码路由的运行机制

Go学堂

golang 开源 个人成长 签约计划第三季

“会说话”的产品包装?“码”上查看!

旺链科技

区块链 区块链技术 区块链溯源

软件测试/测试开发 | 接口自动化测试之JSON Schema模式该如何使用?

测试人

软件测试 接口测试 测试开发 JSON Schema 测试开发自动化测试

华为云服务治理 — 隔离仓的作用

秃头也爱科技

推荐一款较好的小程序管理平台

FinFish

小程序 小程序管理平台 小程序管理

ZBC即将登录Coinbase Institutional,2023年以全新姿态出发

BlockChain先知

揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!

科技怪授

华为云

2022 年行摄回忆录

穿过生命散发芬芳

盘点2022 行摄回忆录

数据中心的浪浪山

脑极体

【Dubbo3终极特性】「流量治理体系」一文教你如何搭建Dubbo3的控制台服务Dubbo-Admin

码界西柚

dubbo RPC Dubbo3 Dubbo-Admin

华为云发布CodeArts Req需求管理工具,让需求管理化繁为简

科技怪授

华为云

也谈证券行业数字化转型中的业务与IT融合(上)

王和全

敏捷 需求管理 需求 数字化转型 需求分析

ZBC即将登录Coinbase Institutional,生态开年迎新利好

西柚子

Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】task1 赛题理解

一颗小树

机器学习 机器学习笔记

ZBC即将登录Coinbase Institutional,生态开年迎新利好

股市老人

简述JavaScript键盘事件

devpoint

JavaScript 事件监听 事件冒泡 键盘事件

一种面向业务配置基于JSF广播定时生效的工具

京东科技开发者

jdk 后段技术 企业号 1 月 PK 榜 ducc jsf

大型软件通过“云应用”即点即用,能解决元宇宙的开发之难吗?

B Impact

TiCDC 源码阅读(三)TiCDC 集群工作过程解析

PingCAP

TiDB 源码解读

Linux Radix Tree详解

Linux内核拾遗

数据结构 Linux内核 Radix Tree

从做技术到做技术管理

石云升

极客时间 技术管理 1月月更 技术领导力实战笔记

业务-研发一体化管理平台,存在吗?

FinFish

小程序 小程序管理平台 小程序技术

ZBC即将登录Coinbase Institutional,生态开年迎新利好

鳄鱼视界

标准发布 |《企业数字化成熟度模型IOMM》(中小企业)发布

信通院IOMM数字化转型团队

数字化转型 IOMM ICT深度观察

“零”代码改动,静态编译让太乙Stable Diffusion推理速度翻倍

OneFlow

人工智能 深度学习

2022年的魔力象限领导者,为什么是华为数通?

白洞计划

华为

DCS分布式缓存服务实例类型介绍

秃头也爱科技

代码影响范围工具探索

京东科技开发者

测试 源代码 企业号 1 月 PK 榜 代码影响范围

2022年度 FinClip 扩展SDK推荐!

FinClip

高效节能 | 智慧灯杆综合管理解决方案

AIRIOT

物联网 智慧灯杆

如何进行5万并发用户负载测试?_软件工程_Refael Botbol_InfoQ精选文章