1
实施背景
1.1 任务目标
钉钉方对此次压测任务解释如下:
1.稳定性专项的目的是希望和服务商一起保障服务稳定可用,为用户提供更可靠的服务;主要包括以下内容:
2.系统架构,包括服务器、数据、容器等
3.监控配置,报告系统监控(cpu、内存等)和业务监控(QPS、RT等)
4.首页性能情况
5.压测情况
6.降级方案,用于流程突增时,系统及时处理保证服务运行
已上架 查看监控线上最高QPS为xxx(可查询近2个月最高QPS等) 要求压测至少支持:
峰值QPS的3~5倍
(1)提供单链路或全链路压测数据及最高支持的QPS上限,各业务场景下列各项值:
a.峰值RT
b.峰值错误率(统计非200)
c.峰值总cpu利用率
d.峰值load1
e.峰值内存利用率
(2)ISV服务端授权激活场景,服务端响应时间整体小于3s
这样一来,我们的目标很明显,就是验证QPS是日常峰值3~5倍情况下,服务器的资源占用,RT,QPS是否满足要求。
1.2 调研选型
由于时间仓促,我在选型压测工具时只对比了自己比较熟悉的工具Jmeter和LR,而LR只能使用破解版的(HP和微软这些厂商很鸡贼的,你想用破解版的那就用吧,等把你养肥了啃你一口大的,他们的策略也很套路 就是广撒网,总有那么几家会上钩的,对吧),并且钉钉方明确建议使用Jmeter,那就没啥好说的了,直接上Jmeter吧。
2
环境配置&安装目录解释
2.1 Windows环境下安装Jmeter
Step1:配置Java开发环境,话不多说。
Step2:下载Jmeter:https://jmeter.apache.org/download_jmeter.cgi
解压后设置环境变量JMETER_HOME(设置为Jmeter的安装目录)
2.2 Mac下配置Jmeter
Step1:配置Java开发环境。
Step2:下载Jmeter并解压。
Step3:配置bash_profile(切换到当前用户主目录即:cd,然后查看隐藏文件ls –al即可看到这个文件,若无,自己建),加入以下内容。
export JMETER_HOME=/Users/mc/Applications/apache-jmeter
PATH=$JMETER_HOME/bin:$PATH:.
export PATH
然后执行,source .bash_profile即可,我们输入jmeter.sh验证下结果如下:
2.3 目录解释
bin:可执行文件目录。以下文件是我们经常会用到的。
jmeter.bat 可以设置jemeter使用的内存(ps:建议配置为负载机物理内存的1/4~1/2)
jmeter.sh:Linux和Mac下启动Jmeter GUI
jmeter-server(.bat):jmeter联系负载设置文件。
jmeter.properties:jmeter的80%以上的配置项均在该文件中配置;一旦该配置文件被改动,只有重启jmeter才生效。
docs:jmeter API文档
extras:Jmeter拓展。
lib: jmeter启动时默认的classpath。使用jmeter进行测试时所有需要import的包和类必须存在该目录下。
lib/ext:存放jmeter的组件/插件,第三方组件和插件也要放置在该目录下。
所有图形化GUI中可见,可使用的部分必须放置在lib/ext目录下。
printable_docs:jmeter官方帮忙文档。
3
Jmeter常用的元件
3.1 测试计划
测试计划中可以做以下事情:
1:定义全局变量 2:控制线程组的执行方式 3:引入外部拓展的jar包。
如图:定义全局变量host,后续的请求中可以通过$来使用这个变量值。
最下方蓝色框中是需要依赖的外部jar包,这个包是生成sha-256加密字符串用的,后续在bean shell前置处理器那里我会详细说明。
注意:对于这个选项,如果一个测试计划中有多个线程组,设置此项可生效,不设置时:每个线程组同时运行。
3.2 线程组
3.2.1 线程组的类别
Jmeter中的线程组有3中,分别是:thread group,setup thread group,tearDown thread group。
手动划重点
三种线程组无本质区别,都可以实现多线程的效果。如果在测试计划下只存在一种的话,是没有区别的。区别在于若3中线程组同时存在于一个测试计划下时会存在执行先后的区别:setUp先执行,然后再执行thread group; 最后执行tearDown线程组。
1:线程数=虚拟用户数。
2:Ramp-up Peroid:启动所有线程所需的总时间。
ps:Jmeter中,线程启动的方式采用平均时间计算,线程的最小单位是1;最终效果即:1线程/N秒。N=线程数/Ramp-Up Peroid。
线程组只能指定线程第一次启动时的间隔时间,不能控制之后的循环过程中的线程的间隔。
3:循环次数 每一个线程执行线程组内的组件的次数。
4:Delay Thread creation until needed:
5:调度器:设置线程组计划的启动时间和持续时间。
5.1:调度器是在点击启动后生效。
5.2:启动延迟的优先级别高于启动时间。
5.3:持续时间的优先级高于结束时间。
5.4:线程的停止条件是-->循环次数或持续时间满足设置。
......
领取专属 10元无门槛券
私享最新 技术干货