本文将从负载测试的角度,描述了作一次流畅的5万用户并发测试须要作的事情.正则表达式
你能够在本文的结尾部分看到讨论的记录.chrome
快速的步骤概要 apache
编写你的脚本安全
使用JMeter进行本地测试网络
BlazeMeter沙箱测试session
使用一个控制台和一个引擎设置Users-per-Engine的数量并发
设置并测试你的集合 (1个控制台和10-14 引擎)ide
使用 Master / Slave 特性来达成你的最大CC目标测试
开始以前,请肯定从JMeter的Apache社区jmeter.apache.org 得到了最新的版本.chrome-extension
你也会要下载这些附加的插件 ,由于它们可让你的工做更轻松.
有许多方法能够得到脚本:
使用 BlazeMeter 的 Chrome 扩展 来记录你的方案
使用 JMeter HTTP(S) 测试脚本记录器 来设置一个代理,那样你就能够运行你的测试并记录下全部的东西
从头开始所有手工构建(多是功能/QA测试)
若是你的脚本是一份记录的结果(像步骤1&2), 请牢记:
你须要改变诸如Username & Password这样的特定参数,或者你也许会想要设置一个CSV文件,有了里面的值每一个用户就能够是不一样的.
为了完成诸如“添加到购物车”,“登陆”还有其它这样的请求,你也许要使用正则表达式,JSON路径提取器,XPath提取器,来提取诸如Token字符串,表单构建ID还有其它要素
保持你的脚本参数化,并使用配置元素,诸如默认HTTP请求,来使得在环境之间切换时你的工做更轻松.
在1个线程的1个迭代中使用查看结果树要素,调试样本,虚拟样本还有打开的日志查看器(一些JMeter的错误会在里面报告),来调试你的脚本.
遍历全部的场景(包括True 或者 False的回应) 来确保脚本行为确如预期...
在成功使用一个线程测试以后——将其提升到10分钟10到20个线程继续测试:
若是你想要每一个用户独立——是那样的么?
有没有收到错误?
若是你在作一个注册过程,那就看看你的后台 - 帐户是否是照你的模板建立好了? 它们是否是独立的呢?
从总结报告中,你能够看到对测试的统计 - 它们有点用么? (平均响应时间, 错误, 每秒命中率)
一旦你准备好了脚本:
经过移除任何调试和虚拟样原本清理脚本,并删除你的脚本侦听器
若是你使用了侦听器(诸如 "将响应保存到一个文件"),请确保你没有使用任何路径! , 而若是他是一个侦听器或者一个CSV数据集配置——请确保你没有使用你在本地使用的路径 - 而只要文件名(就好像跟你的脚本在同一个文件夹)
若是你使用了本身专有的JAR文件,请确保它也被上传了.
若是你使用了超过一个线程组(不是默认的那个) - 请确保在将其上传到BlazeMeter以前设置了这个值.
若是那时你的第一个测试——你应该温习一下 这篇 有关如何在BlazeMeter中建立测试的文章.
将沙箱的测试配置设置成,用户300,1个控制台, 时间50分钟.
对沙箱进行这样的配置让你能够在后台测试你的脚本,并确保上的BlazeMeter的一切都运行无缺.
为此,先按下灰色的按钮: 告诉JMeter引擎我想要彻底控制! - 来得到对你的测试参数的彻底控制
一般你将会遇到的问题:
防火墙 - 确保你的环境对BlazeMeter的CIDR 列表 (它们会实时更新)开发,并把它们放入白名单中
确保你全部的测试文件, 好比: CSVs, JAR, JSON, User.properties 等等.. 均可以使用
确保你没有使用任何路径
若是仍然有问题,那就看看错误日志吧(你应该能够把整个日志都下载下来).
一个沙箱的配置能够是这样的:
引擎: 是能使控制台(1 个控制台 , 0 个引擎)
线程: 50-300
产能提高: 20 分钟
迭代: 一直测试下去
时间: 30-50 分钟
这可让你在产能提高期间得到足够多的数据(以防你遇到问题) ,而你将能够对结果进行分析,以确保脚本的执行确如预期.
你应该观察下Waterfall / WebDriver 选项卡来看看请求是否正常,你不该该在这一点上出任何问题(除非你是故意的).
你应该盯着监控选项卡,观察期内存和CPU消耗 - 这对你在步骤4中尝试设置每个引擎的用户数量.
如今咱们能够确定脚本能在BlazeMeter中完美运行了——咱们须要计算出要多少用户放到一个引擎中.
若是你能用户沙箱中的数据来作这个决定,那就太棒了!
在这里,我会给出一种不用回头去查看沙箱测试数据就能计算出这个数的方法.
设置你的测试配置:
线程数: 500
产能提高: 40 分钟
迭代: 永久
时长: 50 分钟
使用一个控制台和一个引擎.
运行测试并(经过监视选项卡)对你的测试引擎进行监视.
若是你的引擎对于75%的CPI使用率和85%的内存使用率都没有达到(一次性的峰值能够忽略) 的话:
将线程数调整到700在测试一次
提交线程的数量直到线程数达到1000或者60%的CPU或内存使用
若是你的引擎过了75%的CPU使用率或者85%的内存使用率(一次性的峰值能够忽略 :
看看你第一次达到75%的点,在那个点有多少并发用户.
在运行一次测试, 而不是提升你以前500个用户数量的产能
这一次将产能提高放到真实的测试中(5-15 分钟是一个好的开始) 并将时长设置为50分钟.
确保整个测试过程当中没有超过75%的CPU使用率或者85%的内存使用率...
为安全起见,你能够把每一个引擎的线程数下降10%的.
咱们如今知道了从一个引擎中咱们获得了多少线程,在该章节的最后,咱们将会知道一个集群能给咱们提供多少用户。
一个集群是指具备一个控制台(仅有一个)和0-14个引擎的逻辑容器。
即便你能够建立一个使用超过14个引擎的测试案例——但其实是建立了两个集群(你能够注意到控制台的数量增长了),而且克隆了你的测试案例……
每一个集群具备最多14个引擎,是基于BlazeMeter本身自己的测试,以确保控制台能够控制这14台引擎对新建的大量数据处理的压力。
因此在这一步骤中,咱们会用步骤4种的测试,而且仅仅修改引擎数量,将其增长到14.
将该测试按照最终测试的所有时长运行。当测试在运行时,打开监听标签,而且检验:
1. 没有一个引擎超过CPU75%的占有率和内存85%占有率的上限;
2. 定位你的控制台标签(你能够经过一次点击Logs Tab->Network Information,查看控制台私有IP地址来找到它的名字)——它不该该达到CPU75%占有率和内存85%占有率的上限。
若是你的控制台达到了该上限——减小引擎数量并从新运行直到控制台在该上限之下。
在这个步骤的最后,你会发现:
1. 每一个集群的用户数量;
2. 每一个集群的命中率。
查看Aggretate Table中的其余统计信息,并找到本地结果统计图来得到有关你集群吞吐量的更多信息。
咱们到了最后一步了。
咱们知道脚本正在运行,咱们也知道一个引擎能够支持多少用户以及一个集群能够支持多少用户。
让咱们作一下假设:
一个引擎支持500用户
一个集群能够用户12个引擎
咱们的目标是5万用户测试
所以为了完成这些,咱们须要8.3 个集群..
咱们能够用8个12台引擎的集群和一个4太引擎的集群 - 可是像下面这样分散负载应该会更好:
每一个集群咱们用10台引擎而不是12,那么每一个集群能够支持 10*500 = 5K 用户而且咱们须要10个集群来支持5万用户。
这样能够获得以下好处:
不用维护两个不一样的测试类型
咱们能够经过简单的复制现有集群来增长5K用户(5K比6K更常见)
只要须要咱们能够一直增长
如今,咱们已经准备好建立最终的5万用户级别的Master / Slave测试了:
将测试的名称从"My prod test" 改成"My prod test - slave 1"。
咱们回到步骤5,将高级测试属性(Advanced Test Properties)下的Standalone修改成Slave。
按保存按钮——如今咱们有了一个Master和9个Slave中的一个。
返回你的 "My prod test -slave 1".
按复制按钮
接下来重复步骤1-5直到你建立了9个slave。
回到你的 "My prod test -salve 9" 并按复制按钮.
将测试的名称改成 "My prod test -Master".
将高级测试属性(Advanced Test Properties) 下的Slave改成Master。
检查咱们刚才建立的全部的Slave(My prod test -salve 1..9)并按保存。
你的5万用户级别的Master-Slave测试已经准备好了。经过按master上的开始按钮来运行10个测试,每一个测试5千用户。
你能够修改任意一个测试(salve或master),让它们来自不一样的区域,有不一样的脚本/csv/以及其余文件,使用不一样的网络模拟器,不一样的参数等。
你能够在一个叫“Master load results”的master报告中的一个新tab页中找到生成的聚合结果的报告,你还能够经过打开单个的报告来独立的查看每个测试结果。