目录[-]
目录:
- 搭建 nodejs 本地服务器
- 本地启动服务器,模拟一个接口
- 本地布置 serveragent 监控
- Jmeter 脚本编写
- 测试结果验证
————
第一步:搭建 nodejs 本地服务器
- 下载 nodejs,这里下载64位,windows包:
-
以下步骤都是在cmd环境下执行,找到 node.js 安装路径,输入:node --version 和 npm --version ,有版本号返回证明已安装成功
- 输入 npm install -g express-generator@4
- 输入 express helloworld ,新建第一个项目
- 进入路径 F:\nodejs\ 输入 cd helloworld ,再次输入 npm install 安装依赖
- 现在已经得到一个本地服务器,输入域名:localhost:3000 可以进入网页
————
第二步:本地启动服务器,模拟一个接口
- 在 F:\nodejs\helloworld\public 目录下, 新建一个html文件夹,并且新建一个 index.html 编写代码前端代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" name="referrer" content="no-referrer"> <title>Title</title> <h1>Hello world</h1> <h2>Hello world</h2> <h3>Hello world</h3> <!--<p>This is a paragraph.</p>--> <!--<p>This is another paragraph.</p>--> <a href="http://www.isesol.com/">This is a link,link to isesol</a> <img src="https://ss1.baidu.com/-4o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=19f1a47c1d38534393cf8121a312b01f/e1fe9925bc315c6018733cff80b1cb134954773f.jpg"/> <body> <!--<article>HEllO,WORLD!!!!!@@@####</article>--> <time datetime="2018-09-22"></time> <iframe src="http://music.163.com/outchain/player?type=0&id=68877836& auto=0&height=430" width="100%" height="450" frameborder="no" marginwidth="0" marginheight="0"></iframe> </body> </head> <body> </body> </html> - 再次访问网页:http://localhost:3000/html/index.html ,打开的html页面如下
- 现在有前端页面,但是缺少后端交互,我们需要做的,新建一个 js 文件并绑定 index.html ,在F:\nodejs\helloworld\public 目录下,新建 json 文件夹,并且在该文件夹下,新建 index.json ,写入代码
{"code":"200","msg":"success"} - 新建目录,F:\nodejs\helloworld\public\javascripts ,新建 index.js ,写入
fetch("../json/index.json").then(function(res) { if (res.ok) { res.json().then(function(data) { console.log(data); }); } else { console.log("Looks like the response wasn't perfect, got status", res.status); } }, function(e) { console.log("Fetch failed!", e); }); - 回到 F:\nodejs\helloworld\public\index.html ,添加一行代码,引用js文件
<script src="../javascripts/index.js"></script> - 再刷新一次网址:http://localhost:3000/html/index.html ,切换到Console页签,就能显示自己编写的接口
————
第三步:本地布置 serveragent 监控
1、下载 ServerAgent-2.2.1.rar、JMeterPlugins-Standard.jar、JMeterPlugins-Extras.jar,其中第一个文件是放置在服务器使用的,另外2个是客户端放在特定文件夹里。
2、启动服务器监控:

预设环境,线程数300,10s后开启所有线程,总线程数6000
插件这样配置,没有这个插件,注意找一下上面的压缩包下载,实在不行网上找一个,安装并重启jmeter
4.有几个性能重要的指标
a.jp@gc - Hits per Second(每秒点击量)
每秒请求总样本数量的响应时间分位数分布。
F(X,Y)表示某个结束时刻,一共有多少访问量结束访问
解释: 每秒测试计划产生的点击服务器的次数,峰值肯定小于线程数
结论:不是最重要的指标
b.jp@gc - Response Times vs Threads(每毫秒HTTP请求数)
X轴代表活动线程数也就是并发访问的用户数,Y轴代表响应时间,F(X,Y)表示某种并发下,系统的响应时间
解释:峰值是2100/ms,每毫秒可以运行2100次HTTP请求,结论:因为只有一个HTTP请求,速度很快
c.jp@gc - Bytes Throughput Over Time不同时间吞吐量展示(图表)
解释:随时间推移,网络数据传输(发送、接收,单位:字节)速率的变化。
结论:好像也不是重要
d.jp@gc - PerfMon Metrics Collector(服务器性能监测控件)
解释:
CPU占用量百分比:峰值在900000,除以10000,得到的是90,也就是90%的CPU占用率
存储量(内存)的使用情况:大概在450000,除以10000,得到45,单位猜测可能是MB,总不可能是GB
Disk I/O硬盘输入输出:大概在100000,除以10000,得到10,服务器的硬盘情况,每秒内系统能处理的I/O请求数量
Network I/O网络输入输出:130000,除以10000,得到127左右,服务器的网络情况,单位猜测可能是kb,即127kb/s
结论:性能测试最重要的指标,CPU、memory,另外这里得到的是压测时CPU和memory的使用率,需要排除掉电脑本身的CPU、memory使用率。
测试人员关心的内容:
- 曲线:理想的曲线是单驼峰,先上升,后平稳,最后当并发释放时,整体线条平稳下降。
- 波动:理想的波动是缓慢的,浮动较低。
- 数值:我之前在linux服务器上,用top等命令跟踪过cpu、内存值的浮动,与检测工具返回的数值是一致的,所以这里的数值值得信赖。每个曲线的单位不同,所以需要单独看每个值,点击图上的小方块就可以筛选了。在测试报告中,需要统计的不只是压测后的cpu、内存值,也要统计压测前平稳状态的服务器的cpu、内存值,这样才好对比压测前后,cup和内存值的变化,从而得知服务器的压力有多少,是一个差值。
- 注意事项:
- 注意端口号,startAgent.bat默认的端口号是4444,需考虑端口是否空闲的情况。
- ip地址,ip地址需要写的是服务器的ip地址,如果服务器是用堡垒机/vpn连接的,需要确定能否连通,再做压测。
- 压测过程前,建议GUI形式先做一遍,确保返回值有无报错,或是没数据的情况,再用非GUI形式压测。
- 两次压测之间,建议,给予服务器充分的时间释放资源,回归平稳,比如压测之后等5分钟后,再执行下一次。
- 执行次数相关,一个性能测试报告,需要执行多次脚本,记录每一次测试结果,挑选最平均的一个作为最终结果。
- 压测过程中,需保证客户端环境纯净,关闭其他占用网络上传下载的线程如浏览器等,减少损耗。
- 压测之后,会发现两种情况,第一种是客户端小水管,剩余内存不足以支撑更大容量的并发,这时候需要分布式,多个安装Jmeter的客户端形成一个集群进行并发测试;第二种是服务器小水管,客户端怎么加大并发数,在固定时间内,服务器可处理的事务数都在一个稳定值来回波动,就证明已经到了服务器的极限,服务器不一定会崩溃,但一定会堵塞。
- 给出测试报告后应该做什么:
- 第一次反馈后,等待开发验证结果(当然如果领导要看,也可以发送邮件给领导)。
- 后续优化,如果是客户端剩余内存不足导致不能压测更多,则需要加内存(比较省钱的方法)、分布式;如果是服务器性能不足,就是加服务器的内存、调整架构。如果开发调整了几次,仍然没法提速,那就要提高带宽。
- 准备好,执行下一次测试(除必要的监听器,其他可以禁用,只保留聚合报告和jp@gc - PerfMon Metrics Collector)
结论:最重要的指标
e:jp@gc - Response Times Percentiles(响应时间百分比)
解释:X轴代表百分比,T轴代表响应时间,F(X,Y)表示低于某个百分比的响应时间,比如有80%的响应低于400ms
总量来看,Y轴2700请求数、X轴100ms,也就是27请求/ms
f:jp@gc - Active Threads Over Time
解释:
全部时间内,活跃的线程组,当初设计的是10s内启动全部300个线程,类似loadrunner的controller
前半段解释完毕
后半段线程是慢慢下降的,所以是曲线
结论:也不是很重要,但是可以用
g:聚合报告
解释:前几个是图标,这个是纯表格数据,
error:线程错误百分比,基本上错误率是0%
Throuput:吞吐量,每秒完成的请求数,这里平均是163个/秒,与上面的结果可对应
Send KB/sec:每秒从服务器端接收到的数据量,这里每秒可以从服务器得到31kb数据
90%Line:单位是ms,换算之后1931/1000=1.931,也就是说90%的用户响应时间是1.9秒
结论:很重要的指标
90%请求响应时间不会超过1931 毫秒
-n 非GUI也就是命令行下运行Jmeter
-t 测试文件,要运行的Jmeter测试脚本文件
然后是jmx脚本路径
-l 日志文件,记录结果的文件
-r 远程执行,在Jmter.properties文件中指定的所有远程服务器,目前用不上
-H 代理主机 设置 JMeter 使用的代理主机
-P 代理端口 设置JMeter 使用的代理主机的端口号
如果本地Jmeter的路径是下面的路径
jmeter.bat -n -t E:\Jmeter\bin\1.jmx -l E:\Jmeter\bin\1.csv
jmeter.bat -n -t D:\first.jmx -l D:\1.csv
jmeter.bat -n -t D:\0.first_xf.jmx
jmeter.bat -n -t D:\0.first_gf.jmx
jmeter.bat -n -t D:\1.fabuxunpandan.jmx -l D:\1\fabuxunpandan.csv
jmeter.bat -n -t D:\chazhaoxunpandan.jmx -l D:\1\chazhaoxunpandan.csv
再打开Jmeter,让后把这个日志放到聚合报告里面,教程上说可以看到具体的结果
XX.jtl
jmeter -n -t <testplan filename> -l <listener filename>
jmeter -n -t F:\OpenApi_perfomance.jmx -l F:\read.jtl
a