系统上线以前,如果我们没有去挑战一个系统的极限,我们永远不知道该系统最高可以有多少的可靠度,压力测试就是因此而生(Stress testing)。最常见的就是Jmeter,一款由Apache开源的JAVA压力测试工具。
Jmeter能做到的事情包含:
更重要的是,Jmeter在完成测试後可以产生完整动态的HTML报告,方便使用者观看。 接下来就来讲一下Jmeter的安装与使用。今天也会介绍一下如何将Jmeter Dockerize,明天会介绍如何将Jmeter整合进Jenkins。
以下用Windows版讲解:
下载完成後解压缩,获得了一包apache-jmeter-X.X.X
,cmd 执行该包下的apache-jmeter-X.X.X/bin/jmeter.bat
。可以获得一个Jmeter画面:
接下来我们要建立Jmeter的脚本,假如测试目标是Express的一个GET API,localhost:3000/hello
,呼叫後会回传Hello World,我们要来看看系统最高能承受多少的压力。以及localhost:3000/postParams
,测试呼叫的参数是否符合要求。
router.get("/hello",function(req,res,next){
res.send("<h1>Hello World</h1>")
})
router.post("/postParams",function(req,res){
const params = req.body.number;
if(params < 1000) res.send("That's Good Number") //回传200
else res.status(404).send("I don't like this Number") //回传404
})
进入Jmeter GUI後在测试计画(Test Plan)上点击右键 > Add > Threads(Users) > Thread Group
。每一个Threads就是在模拟每一个人的行为。
在Thread Properities中,Number of Threads代表同时模拟的用户数,Loop Count代表共几轮。可以暂时调成1000人与3轮。接着对着Thread Group按右键 > Add > Sampler > Http Reqester
在Http Request中输入这次Test名称、Server Name、路径。localhost:3000/hello
如下:
多建立几个Http Request任务後我们就能开始执行测试了。对着Thread Group 右键 > Add > Listener > ...
,可以选择各式各样的结果图,这里选择Summary Report。 按下save保存你的测试参数为一个.jmx档,接下来按下三角型进行测试。
注: 要是按下save报错
打开 Options > Look and Feel > 选择一个非Darcula的外观 > 重新启动
即可解决。
Summary Report可以很清楚的看到测试结果:
如上面的API,他只接受1000以下的数字,我们可以来建立一个Sequencial的数字与Random的数字来进行测试。
Random数与Post
该如何建立Random数,可以参考Jmeter function,同样的接着对着Thread Group按右键 > Add > Sampler > Http Reqester
,这次选择POST
,底下选择Body Data,输入:
// Body Data
{
"number": ${__Random(0,2000)}
}
但是这样还不够,Post的data不是JSON格式,对着HTTP Request右键 > Config Element > HTTP Header Manager
,新增一个格式为content-type:application/json
Sequence 数
该如何建立Sequence数,让我们从0~1000每个数字测试一遍呢? Jmeter没有给这个Function,但是还是能办到。对着Thread Group右键 > Add > Logic Controller > Loop Controller
Loop Controller内有一个Loop Count,这代表执行几次Loop。比如说Thread Group的Threads为1000、Thread Group的Loop Count为2、Loop Controller的Loop Count为2,则Loop总共执行次数是: 1000*2*2
共4000次。
接着对着Loop Controller右键 > Add > Config Element > Counter
Counter可以设定你的Start Number与Increment,最重要的定义你的Export Variable Name
,这里我定义成counter_value
。
再次建立好你的HTTP Request (在Loop Countroller之下),记得调整你的HTTP Header,然後在Body Data输入:
// Body Data
{
"number": ${counter_value}
}
接着就能套用运行顺序类的参数了。
学组语的目的,不见得是为了改善效能,而是: 判断 optimizing compiler 产生的机...
一、技术指标(Technical Indicator) 技术指标:投资者用来做技术分析时,会使用到的...
在 React 中,允许直接用 HTML 来建立表单, 但使用 JavaScript functio...
问题回答 懒加载路由或元件的意思是当访问该路由,或需要显示该元件时,才载入该路由或元件。这做法会提升...
上篇回顾 Story Telling - 简易有效的讨论 讲到会议很烦很冗长没重点还要开好几次, 是...