Jmeter 压力测试并输出HTML报告

在进行性能测试执行之前,需要进行场景的设计:
以什么方式启动,如何持续进行,直至测试结束

三部曲:启动---持续进行---结束

  • 启动
    虚拟用户(VR)如何进入测试现场
    1)同时加载所有VR还是分阶段逐渐加载?
    2)一次加载100个VR 还是 每2秒加载5个VR,40秒完成100个VR的加载?
  • 持续时间
    在到达最大负载后,继续运行一段时间还是进行多次循环
  • 结束
    和启动相对应,某个时刻全部停止 或者分阶段逐渐减少用户,如2秒钟停止10个用户的操作,20秒后结束所有用户的操作

PS:一般情况下,建议限制Jmeter的的线程数在300及以内,这样能更好的发挥出jmeter的性能


本文模拟场景:
请求页面:百度新闻页、知道页、音乐页访问
100个线程,循环20次,同时加载完结束后全部停止
指标:响应时间以及错误率

测试步骤:
测试计划---线程组--HTTP请求---监听器---运行脚本---查看报告

PS:默认情况下,JMeter运行需要占用1 GB的内存,这可能还不够,取决于你的测试计划和需要运行的线程数

一、创建测试计划(Test plan building)

一个测试计划描述了一系列Jmeter运行时需要执行的步骤,可以包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件。

启动JMeter,会出现一个空的测试计划,此次练习通过手写脚本来实现
(不熟悉操作的,也可以通过模板的形式创建,在菜单栏文件--Templates,下拉列表中选择Recording,点击Create,一个完整的Test Plan就生成了,当然我们可以删除不需要的内容)

测试计划.png

二、添加线程组

作用:模拟用户个数、发送请求的频率及次数
PS:设置合理的线程数对能否达到测试目标有着决定性的影响,另外,设置合理的循环次数也很重要

  • 线程数:虚拟用户数
  • Ramp-Up period :设置虚拟用户数全部启动的时长(多少秒内完成所有线程的创建)
    如图线程数为100,准备时长为1秒,表示需要1秒钟启动100个线程,也就是平均每秒启动100个线程
  • 循环次数:如果勾选了永远,那么它将永远发送下去,直到停止脚本,循环数=20,则运行100个线程*20次,即2000次
添加线程组.png

三、添加HTTP请求

此处添加3个HTTP请求

请求页面.png

四、添加监听器

1、添加响应断言:设置响应码为200

响应断言.png

2、查看结果树,验证请求
调试时线程数和循环次数设为1就可以了,记得调试好之后再改回去

查看结果树.png

3、禁用查看结果树,命令行执行脚本
我们在启动Jmeter时就会看到命令行的提示信息,进行负载测试时请不要使用GUI模式,也就是用命令行模式运行 JMeter 测试脚本,这样可以大大缩减所需要的系统资源

备注:GUI 即图形用户界面模式,只应用于创建测试脚本、调试脚本

提示语.png

图中也给出了命令格式:jmeter -n -t [jmx file] -l [result file] -e -o [Path to output folder],JMeter 默认去当前目录寻找脚本文件,并把日志记录在当前目录,当然也可以使用绝对路径来执行

  • jmx file:测试计划的文件名称
  • result file:输出文件路径,可以是结果日志名称
  • Path to output folder:要保存的report文件路径

参数说明:

  • -n:非GUI模式执行JMeter
  • -t:执行测试文件所在的位置
  • -l:指定生成测试结果的保存文件,jtl文件格式
  • -e:测试结束后,生成测试报告
  • -o:指定测试报告的存放位置

(1)直接生成HTML报告
PS:输出文件(-l后的文件)必须是不存在的,report文件夹为空文件夹或者不存在(-o后面的),不然无法生存报告
启动CMD窗口,输入以下命令:
jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l C:\Users\zhangXXX\Desktop\html.csv -e -o C:\Users\zhangXXX\Desktop\baidu-reports

文件内容不为空时报错.png

(2)使用之前的测试结果,生成测试报告
启动CMD窗口,先生成测试结果,再生成报告,输入以下命令:

  • jmeter -n -t C:\Users\zhangXXX\Desktop\baidu.jmx -l 201804020001.jtl
非GUI模式执行.png
结果文件.png
  • jmeter -g 201804020001.jtl -o C:\Users\zhangXXX\Desktop\baidu-reports
报告.png

PS:-g 指定已存在的测试结果文件

以上两种方法,其实最终都依赖生成的测试报告。双击报告文件夹中的index.html就可以查看报告

报告详解

Dashboard:
Test and Report informations:指的是测试和报告信息

  • File:测试结果的保存文件名称
  • Start Time:测试开始时间
  • End Time:测试结束时间
  • Filter for display展示过滤器

APDEX(Application Performance Index):应用程序性能满意度的标准,范围在0-1之间,1表示达到所有用户均满意,越接近1满意度越高

Requests Summary:请求的通过率(OK)与失败率(KO),百分比显示

Statistics:数据分析,基本将Summary Report和Aggrerate Report的结果合并

Errors:错误情况,依据不同的错误类型,将所有错误结果展示

Dashboard.png

Charts:用图表的形式展示测试数据,让测试报告更加直观**
主要有如下特点:
(1)将测试过程中经常使用的数据,用图表的形式展示,让测试结果更加直观
(2)每个图表数据,有两种展示形式
(3)支持请求样例过滤显示
(4)支持导出PNG图片格式

Over Time Charts:

  • Response Times Over Time:每秒钟响应时间,X轴表示的是系统运行的时刻,Y轴表示的是响应时间,F(X,Y)表示系统随着时间的推移,系统的响应时间的变化,可以看出响应时间稳定性
  • Bytes Throughput Over Time:字节接收与发送的数量,每秒传输字节吞吐量,表明Jmeter在测试时,随着时间推移发送和接收的字节数
  • Latencies Over Time:延迟时间
over time.png

Throughput Charts:

  • Hits Per Second: 每秒点击率
  • Codes Per Second:每秒状态码数量
  • Transactions Per Second:每秒事务量
  • Response Time Vs Request:响应时间点请求的成功与失败数
  • Latency Vs Request:延迟时间点请求的成功与失败数
Throughput Charts.png

Response Times Charts:

  • Response Time Percentiles:响应时间百分比
  • Active Threads Over Time:激活线程数
  • Time Vs Threads:响应时间用户数, X轴表示的是活动线程数,也就是并发访问的用户数,Y轴表示的是响应时间,F(X,Y)表示在某种并发量的情况下,系统的响应时间是多少
  • Response Time Distribution:响应时间分布
Response Times Charts.png

4、添加所需监听器,导入日志文件即可查看
在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,也可以为日后的性能测试报告提供更多的素材

在Jmeter中,结果都存放在 .jtl 文件中,格式有很多种,可以根据需要进行更爱,选择某个监听器,在configure页面进行相应配置,让我们来查看下保存后的文件有哪些内容:

日志文件内容.png
  • timeStamp:请求发出的绝对时间
  • elapsed:响应时间
  • label:HTTP请求名称
  • responseCode:请求返回码
  • responseMessage:请求返回消息
  • threadName:请求所属的线程名称
  • dataType:数据类型
  • success:是否成功
  • failureMessage:失败信息
  • bytes:字节
  • sentBytes:发送字节数
  • grpThreads:
  • allThreads:
  • Latency:延迟
  • IdleTime:思考时间
  • Connect:连接

接下来添加一个聚合报告,然后导入日志文件,查看结果,还可以添加其他的监听器,操作方法一样

导入日志文件.png

PS:如果测试计划中增加了监听器(生成概要结果),在执行命令时就可以看到每个线程的执行情况

查看每个线程的执行情况.png

PS:设置好线程数、循环次数、集合点、事务、断言、关联等等后即可执行压力测试



最后,大并发下还是需要进行分布式性能测试

原理和LR的agent差不多,因为jmeter由Java开发,耗内存、cpu,所以需要采用分布式

步骤:
1、关闭防火墙
2、在所要运行jmeter并作为负载生成器的机器上安装jmeter(确保在所有系统中使用了相同版本号的Jmeter和jdk)
PS:目标服务器需要在相同网段,确保Jmeter可以访问目标服务器
3、确定其中一台机器作为主controller,其他的机器作为agent,然后运行所有agent机器上的jmeter-server文件
4、在controller机器的jmeter中bin目录下,找到jmeter.properties文件,添加节点IP,修改localhost为压力机IP

image.png

5、启动conttoller机子上的jmeter应用,选择菜单【运行】---远程启动来分别启动agent,也可以直接选择【远程全部启动】来将所有个agent启动

在性能测试过程中,我们通常需要将测试结果保存在一个文件当中,既可以保存测试结果,也可以为日后的性能测试报告提供更多的素材

Jmeter中,结果都存放在.jtl文件,一般以csv文件格式记录,只需要选择某个监听器,点击页面的configure按钮,建议勾选如下项:Save Field Name,Save Assertion Failure Message



Jmeter的应用场景:性能测试(接口层)

技术点:HTTP相关设置+参数化+断言+关联+简单控制器+查看结果树
关联:通过Json控件或正则表达式获取
(1)线程组建议替换为jp@gc - Stepping Thread Group,功能比线程组多很多

线程
  • this group will start N threads:相当于LR中的并发数
  • First,wait for N seconds:启动第一个线程之前,需要等待N秒
  • Then start N threads:设置最开始启动N个线程
  • Next,add N1 threads every N2 seconds,using ramp-up N3 seconds:在N3秒内启动N1个线程,启动的策略为每隔N2秒启动一个
  • Then hold load for N seconds:并发数全部达到后再运行多久
  • Finally,stop N1 threads every N2 seconds:每隔N2秒停止N1个

(2)可以加事务控制器
(3)查看结果树替换为聚合报告或类似的报告,如果还是想看查看结果树记得勾选仅日志错误(查看结果树打印的日志比较多,会影响性能)
(4)造数据

总结:
一个子系统建议放在同一个 “测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。
比较独立的接口,可以统一放在一个线程组内,顺序完成测试。

流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容