Day 21: 压力测试Jmeter

系统上线以前,如果我们没有去挑战一个系统的极限,我们永远不知道该系统最高可以有多少的可靠度,压力测试就是因此而生(Stress testing)。最常见的就是Jmeter,一款由Apache开源的JAVA压力测试工具。

https://ithelp.ithome.com.tw/upload/images/20210923/20119044KtDmsDij8T.png

Jmeter能做到的事情包含:

  • HTTPS 性能测试
  • LDAP 测试
  • FTP

更重要的是,Jmeter在完成测试後可以产生完整动态的HTML报告,方便使用者观看。 接下来就来讲一下Jmeter的安装与使用。今天也会介绍一下如何将Jmeter Dockerize,明天会介绍如何将Jmeter整合进Jenkins。

安装Jmeter

进入Apache Jmeter

  • Windows版安装 : apache-jmeter-X.X.X.zip
  • Linux版安装 : apache-jmeter-X.X.X.tgz

以下用Windows版讲解:
下载完成後解压缩,获得了一包apache-jmeter-X.X.X,cmd 执行该包下的apache-jmeter-X.X.X/bin/jmeter.bat。可以获得一个Jmeter画面:

https://ithelp.ithome.com.tw/upload/images/20210923/20119044N23kdZ0B9U.png

接下来我们要建立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就是在模拟每一个人的行为。

https://ithelp.ithome.com.tw/upload/images/20210923/201190442pNzW7ClDb.png

在Thread Properities中,Number of Threads代表同时模拟的用户数,Loop Count代表共几轮。可以暂时调成1000人与3轮。接着对着Thread Group按右键 > Add > Sampler > Http Reqester

https://ithelp.ithome.com.tw/upload/images/20210923/20119044ScVneYAxpg.png

在Http Request中输入这次Test名称、Server Name、路径。localhost:3000/hello如下:
https://ithelp.ithome.com.tw/upload/images/20210923/20119044CnzkMYLdIA.png

多建立几个Http Request任务後我们就能开始执行测试了。对着Thread Group 右键 > Add > Listener > ...,可以选择各式各样的结果图,这里选择Summary Report。 按下save保存你的测试参数为一个.jmx档,接下来按下三角型进行测试。

https://ithelp.ithome.com.tw/upload/images/20210923/20119044gVTScOLTBl.png

注: 要是按下save报错
打开 Options > Look and Feel > 选择一个非Darcula的外观 > 重新启动即可解决。

Summary Report可以很清楚的看到测试结果:
https://ithelp.ithome.com.tw/upload/images/20210923/20119044U6BHScE0FB.png

参数测试

如上面的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

https://ithelp.ithome.com.tw/upload/images/20210924/20119044IYTBSW64xJ.png

Sequence 数
该如何建立Sequence数,让我们从0~1000每个数字测试一遍呢? Jmeter没有给这个Function,但是还是能办到。对着Thread Group右键 > Add > Logic Controller > Loop Controller

https://ithelp.ithome.com.tw/upload/images/20210924/201190440bgQJ1eiLl.png

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
https://ithelp.ithome.com.tw/upload/images/20210924/20119044J6GgEdAiww.png

Counter可以设定你的Start Number与Increment,最重要的定义你的Export Variable Name,这里我定义成counter_value

https://ithelp.ithome.com.tw/upload/images/20210924/20119044Yk8amIt55q.png

再次建立好你的HTTP Request (在Loop Countroller之下),记得调整你的HTTP Header,然後在Body Data输入:

// Body Data
{
	"number": ${counter_value}
}

https://ithelp.ithome.com.tw/upload/images/20210924/20119044O3xYbdEeHN.png

接着就能套用运行顺序类的参数了。


<<:  [Day 18] 资料整理

>>:  MLOps在金融产业:系统再现

虹语岚访仲夏夜-23(专业的小四篇)

万里无云时 总觉得喘不过气 要问为什麽 一定是 无云天空下 只有我问我    该往那去 寂静夜深时...

.NET、托管代码(managed code)、反射

托管代码(managed code) 微软特定用语 简单来说 managed code 就是由一个 ...

{CMoney战斗营} 的第六周 # 游戏模组套用

好不容易拟定了游戏专题的方向,接下来是要奠基在上一届学长姐的模组上继续成长出自己的专案。 为期一个月...

高档爆大量,请提高警觉

在入场,且获利後,第一件事就是要保护获利,而不是不要赔钱。 通常有几个转折点需要注意,其中高档爆大量...

自动化初步-使用pyautogui

这个程序是自动开启Google翻译,然後录下Google小姐的声音。 首先一样是先引入模组以及预备,...