50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

如何进行 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:408750
用户头像

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

关注

评论

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

简单WiFi控制小车系统(树莓派+python+web控制界面)

Five

树莓派 8月月更

云堡垒机和软件堡垒机哪个好?区别是什么?

行云管家

网络安全 数据安全 堡垒机 云堡垒机

在北京大数据程序员如何立足?

小谷哥

兆骑科创双创赛事,线上直播路演,投融资对接

兆骑科创凤阁

数据说|济青,两座“数字经济新一线城市”如何发力?

易观分析

数字经济 山东

软件测试100天上岸2-测试必须有策略

和牛

测试 8月月更

证照之星XE重磅发布 制作证件照从未如此简单

懒得勤快

前端培训就业后的程序员就业方向有哪些?

小谷哥

Solana上的结算协议龙头,Zebec潜力颇受看好

股市老人

软硬皆施!Github上爆火2022最新Java面试宝典简直总结的太全了!

程序员小毕

Java 程序员 面试 找工作 简历

非科班出身,开发五年之后我对编程有了新的领悟

Java永远的神

Java 编程 程序员 程序人生 计算机

mybatis foreach的使用

Geek_5829b6

Java mybatis

兆骑科创双创服务平台,高层次人才引进,线上直播路演

兆骑科创凤阁

阿里云无影发布生态共荣计划,携手伙伴推动终端算力上云

阿里云弹性计算

阿里云 生态链 无影云电脑

爆肝!阿里大佬熬夜38天整合的这份Spring Security源码手册我粉了

Java全栈架构师

Java 程序员 面试 程序人生 springsecurity

一对一直播系统源码——如何只需三步搭建

开源直播系统源码

软件开发 一对一直播源码 直播系统源码 一对一直播系统

数据说|发力数字经济,山东这两座城市如何变道超车?

易观分析

数字经济 山东

前端培训机构毕业后在一线城市该注意什么

小谷哥

这么好用的接口工具,请允许我油腻一次!

Liam

Java 开发 Postman API 开放api

秒验丨iOS端SDK 集成指南

MobTech袤博科技

xcode iOS SDK 秒验

零基础如何通过前端技术培训学习

小谷哥

大数据软件开发培训中心有哪些?

小谷哥

开源流式湖仓服务 Arctic 详解:并非另一套 Table Format

网易数帆

大数据 iceberg Hudi Arctic

题目新颖,内容全面!阿里巴巴又一Java面试神册开源!

Java永远的神

Java spring 程序员 面试 JVM

三大云厂商 ARM 架构服务器性能对比

API7.ai 技术团队

AWS API网关 arm架构 云厂商

《数字经济全景白皮书》绿色金融篇 重磅发布!

易观分析

数字经济 山东

服务稳定性保障中的五大误解

华明

运维 SRE 服务监控 稳定性保障

面试官:你理解的互联网高性能Web架构是咋样的?

程序员小毕

Java 程序员 架构 面试 程序人生

堡垒机可以管理哪些网络资产?咨询电话多少?

行云管家

网络安全 数据安全 堡垒机

mybatis添加日志并打印sql

Geek_5829b6

Java mybatis

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