目录[-]

目录:

  1. 搭建 nodejs 本地服务器
  2. 本地启动服务器,模拟一个接口
  3. 本地布置 serveragent 监控
  4. Jmeter 脚本编写
  5. 测试结果验证

————

第一步:搭建 nodejs 本地服务器

 

  1. 下载 nodejs,这里下载64位,windows包:

    https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi

  2. 以下步骤都是在cmd环境下执行,找到 node.js 安装路径,输入:node --versionnpm --version ,有版本号返回证明已安装成功

  3. 输入 npm install -g express-generator@4
  4. 输入 express helloworld ,新建第一个项目
  5. 进入路径 F:\nodejs\     输入 cd helloworld  ,再次输入 npm install  安装依赖
  6. 现在已经得到一个本地服务器,输入域名:localhost:3000 可以进入网页

 

————

第二步:本地启动服务器,模拟一个接口

 

  1. 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&amp;id=68877836&amp;
            auto=0&amp;height=430" width="100%" height="450" frameborder="no" marginwidth="0" marginheight="0"></iframe>
        </body>
    
    </head>
    <body>
    
    </body>
    </html>
  2. 再次访问网页:http://localhost:3000/html/index.html  ,打开的html页面如下
  3. 现在有前端页面,但是缺少后端交互,我们需要做的,新建一个 js 文件并绑定 index.html ,在F:\nodejs\helloworld\public 目录下,新建 json 文件夹,并且在该文件夹下,新建 index.json ,写入代码
    {"code":"200","msg":"success"}
  4. 新建目录,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);
    });
  5. 回到 F:\nodejs\helloworld\public\index.html ,添加一行代码,引用js文件
    <script src="../javascripts/index.js"></script>
  6. 再刷新一次网址: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使用率。

测试人员关心的内容:

  1. 曲线:理想的曲线是单驼峰,先上升,后平稳,最后当并发释放时,整体线条平稳下降。
  2. 波动:理想的波动是缓慢的,浮动较低。
  3. 数值:我之前在linux服务器上,用top等命令跟踪过cpu、内存值的浮动,与检测工具返回的数值是一致的,所以这里的数值值得信赖。每个曲线的单位不同,所以需要单独看每个值,点击图上的小方块就可以筛选了。在测试报告中,需要统计的不只是压测后的cpu、内存值,也要统计压测前平稳状态的服务器的cpu、内存值,这样才好对比压测前后,cup和内存值的变化,从而得知服务器的压力有多少,是一个差值。
  4. 注意事项:
    1. 注意端口号,startAgent.bat默认的端口号是4444,需考虑端口是否空闲的情况。
    2. ip地址,ip地址需要写的是服务器的ip地址,如果服务器是用堡垒机/vpn连接的,需要确定能否连通,再做压测。
    3. 压测过程前,建议GUI形式先做一遍,确保返回值有无报错,或是没数据的情况,再用非GUI形式压测。
    4. 两次压测之间,建议,给予服务器充分的时间释放资源,回归平稳,比如压测之后等5分钟后,再执行下一次。
    5. 执行次数相关,一个性能测试报告,需要执行多次脚本,记录每一次测试结果,挑选最平均的一个作为最终结果。
    6. 压测过程中,需保证客户端环境纯净,关闭其他占用网络上传下载的线程如浏览器等,减少损耗。
    7. 压测之后,会发现两种情况,第一种是客户端小水管,剩余内存不足以支撑更大容量的并发,这时候需要分布式,多个安装Jmeter的客户端形成一个集群进行并发测试;第二种是服务器小水管,客户端怎么加大并发数,在固定时间内,服务器可处理的事务数都在一个稳定值来回波动,就证明已经到了服务器的极限,服务器不一定会崩溃,但一定会堵塞。
  5. 给出测试报告后应该做什么:
    1. 第一次反馈后,等待开发验证结果(当然如果领导要看,也可以发送邮件给领导)。
    2. 后续优化,如果是客户端剩余内存不足导致不能压测更多,则需要加内存(比较省钱的方法)、分布式;如果是服务器性能不足,就是加服务器的内存、调整架构。如果开发调整了几次,仍然没法提速,那就要提高带宽。
    3. 准备好,执行下一次测试(除必要的监听器,其他可以禁用,只保留聚合报告和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