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在金融产业:系统再现

Day13.进入 ARM 世界: ARM Instruction Sets

学组语的目的,不见得是为了改善效能,而是: 判断 optimizing compiler 产生的机...

[Day 8] 从零开始的股票预测 - 技术指标与相关系数

一、技术指标(Technical Indicator) 技术指标:投资者用来做技术分析时,会使用到的...

【Day10】表单 Form:受控元件 Controlled Component

在 React 中,允许直接用 HTML 来建立表单, 但使用 JavaScript functio...

不只懂 Vue 语法:为何懒加载路由和元件会提升网页效能?

问题回答 懒加载路由或元件的意思是当访问该路由,或需要显示该元件时,才载入该路由或元件。这做法会提升...

Domain Storytelling - 简单的方法说出一个Domain story

上篇回顾 Story Telling - 简易有效的讨论 讲到会议很烦很冗长没重点还要开好几次, 是...