Java性能测试从入门到放弃-详解篇
Jmeter组件分类说明
Jmeter的组件可以放在任意位置
线程池:用于创建线程。每个线程会"批次顺序"执行任务,因此后面的任务可根据前面的任务决定具体的操作。
1. 普通线程组(主线程组):用于创建主要的线程任务
2. setUp线程组: 在普通线程组之前触发,用于做测试的前置操作,例如创建测试账户
3. tearDown线程组: 在普通线程组之后触发,用于做测试的后置操作,例如清理工作。
取样器:用来模拟http,tcp请求。取样器父节点需要包含线程组,否则不会执行
前置处理器: 用于定义取样器前置操作,例如定义用户生成,JDBC操作。
后置处理器:用于解析取样器结果,父节点需包含取样器。
断言:用来判断取样器结果,父节点需包含取样器。
定时器:用于控制并发请求的频率。当父节点为取样器,只对父节点生效。当父节点为线程组,对整个线程组生效。
配置元件:用于配置公共数据,可被同级节点或同级节点的子节点引用
监听器:用于统计测试结果,形成图表。常用的有察看结果树,汇总报告,聚合报告。可通过安装Plugins Manager来丰富监听器的类型。
假如想查看每个分类的详细说明,可以查看:倔强的潇洒小姐
火焰图
火焰图不建议直接在google搜索,虽然可以得到很多结果,但是年份都在2017以前。但是不知为何都不能使用。Intellj Idea在2018.3之后推出了火焰图,但是最终我也没法解决这个问题。所以建议在github搜索flame graph
假如你是Linux用户,使用https://github.com/brendangregg/FlameGraph
假如你是Mac用户,使用https://github.com/kjeremi/java-flame-graph-osx
Java+Jmeter+火焰图+Macos 举栗

操作流程
- 启动Java后台项目, 9999端口,api为http://localhost:9999/v1/searchsrv/all/activities?value=1。请使用控制台启动。例如
# 记住包名
java -jar mockserver.jar
# api 返回值结构为
#{
# "error": null,
# "result": {},
# "success": true
#}
#在macos上,启动火焰图,并追踪到mockserver
#需要下载上面那个火焰图工具
./createFlameGraph.sh mockserver
- 启动Jmeter,添加线程组


线程组右键->配置原件->http请求默认值,协议http,服务名称localhost,端口号9999
线程组右键->配置原件->用户自定义的变量

- 线程组右键->取样器->http请求。
- 协议,服务器名称,端口号都置空,会自动获取http请求默认值
- 参数取了用户自定义的变量

- http请求右键添加->断言->json断言->用于判断api返回是否正确。不添加默认只有http code 200认为是正确的

线程组右键添加->监听器->察看结果树->用于查看各个api的详细执行结果.也可以添加在http取样器下面,单独监听。
线程组右键添加->监听器->汇总报告->用于查看各个api汇总的结果,也可添加在http取样器下面,单独监听。
Jmeter查看查看结果
- 通过察看结果树查看请求是否成功,自定义变量是否生效,JSON断言是否生效

- 通过汇总报告查看请求汇总情况

火焰图查看调用堆栈
- Jmeter接口循环多跑几次
- 停止Java项目
- 在火焰图工具目录下找到最新的svg文件,使用浏览器打开

更丰富多彩的图形展示
jmeter虽然在可视化界面运行时能有很多图形界面,但是开启了会影响性能。所以建议使用命令行跑,然后生成一个html的页面
下面提供一个脚本,每次运行会根据时间生成一个目录,并将可视化界面生成到目录下。使用的时候需要修改resultPath(结果路径),sciptFile(脚本路径)
- 可视化 CLI 模式
#设置结果集记录
time_now=`date "+%Y-%m-%d_%H_%M_%S"`
resultPath=/Users/hehe/performanceTest/localRun/result/${time_now}
logPath=${resultPath}/log
samplePath=${resultPath}/sample
reportPath=${resultPath}/report
mkdir ${resultPath}
mkdir ${logPath}
mkdir ${samplePath}
mkdir ${reportPath}
#设置脚本路径
scriptFile=/Users/hehe/performanceTest/localRun/script.jmx
#设置jmeter路径
jmeterPath=/Users/klook/SoftwareInit/apache-jmeter-5.1.1/bin/jmeter
sh ${jmeterPath} -n -t ${scriptFile} -l ${samplePath}/result.jtl -j ${logPath}/result.log -e -o ${reportPath}
- 参数说明
-n: 指定 Jmeter 使用 CLI 模式运行
-t: 指定编写完成的测试计划脚本( jmx 文件)
-l: 指定记录样本结果的 JTL 文件的名称
-j: 指定 Jmeter 运行日志输出文件
-r: 在指定的服务器(JMeter property "remote_hosts")上运行测试计划
-R: 在指定的多个远程服务器上运行测试计划
-g: 仅生成报告仪表盘
-e: 测试完成后生成报告仪表板
-o: 指定测试报告输出的位置,文件夹不得存在或为空
-H: 指定代理服务器主机名或IP地址
-P: 指定代理服务器端口
易踩坑
因为同一个线程组的任务是顺序执行的,所以同一个线程组中,频率最低的任务是所有任务的瓶颈。例如A->B,A每分钟60次,B每分钟120次,实际B为每分钟60次
Java性能测试从入门到放弃-详解篇的更多相关文章
- Java性能测试从入门到放弃-概述篇
Java性能测试从入门到放弃-概念篇 辅助工具 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.JMeter 可以用于对服务器.网络 ...
- 【转】JSch - Java实现的SFTP(文件下载详解篇)
上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能.并介绍一些SFTP的辅助方法,如cd,ls等. 同样,JSch的文件下载也支持三种传输模式:OVERWRI ...
- JSch - Java实现的SFTP(文件下载详解篇)
上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能.并介绍一些SFTP的辅助方法,如cd,ls等. 同样,JSch的文件下载也支持三种传输模式:OVERWRITE ...
- JSch - Java实现的SFTP(文件下载详解篇)(转)
上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能.并介绍一些SFTP的辅助方法,如cd,ls等. 同样,JSch的文件下载也支持三种传输模式:OVERWRI ...
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- Java性能分析之线程栈详解与性能分析
Java性能分析之线程栈详解 Java性能分析迈不过去的一个关键点是线程栈,新的性能班级也讲到了JVM这一块,所以本篇文章对线程栈进行基础知识普及以及如何对线程栈进行性能分析. 基本概念 线程堆栈也称 ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- 经典Spring入门基础教程详解
经典Spring入门基础教程详解 https://pan.baidu.com/s/1c016cI#list/path=%2Fsharelink2319398594-201713320584085%2F ...
随机推荐
- 使用 Spring Framework 时常犯的十大错误
Spring 可以说是最流行的 Java 框架之一,也是一只需要驯服的强大野兽.虽然它的基本概念相当容易掌握,但成为一名强大的 Spring 开发者仍需要很多时间和努力. 在本文中,我们将介绍 Spr ...
- NetCore跨平台桌面框架Avalonia的OSX程序打包
虽然工作开发语言已经转到了java,但平时仍会用netcore做一些小工具,提升工作效率,但是笔记本换成了Mac,小工具只能做成命令行形式,很是痛苦,迫切需要一个.net跨平台的桌面程序解决方案. 为 ...
- python课堂整理14---函数式编程
一.分类 当下主流的编程方法大体分为三类 1. 面向过程 2. 函数式 3. 面向对象 二.函数式编程:函数式 = 编程语言定义的函数 + 数学意义的函数 特征:1. 不可变数据 2. 第一类对象 3 ...
- WebGL中深度碰撞方法总结
z-fighting问题是三维渲染中常见的问题,本文根据实际工作中遇到的一些场景,进行了系统的总结 一个实际工作中的问题 当两个面离得太近就会发生深度碰撞问题,比如: 遇到深度检测问题,最重要的是先搞 ...
- arm汇编指令--str ldr
STR :把寄存器中的字保存到存储器(寄存器到存储器) 示例: STR R0,[R1],#8 :将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.STR ...
- Java初中级程序员面试题宝典
Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...
- vue.js主要内容
vue的主要内容 1.了解vue 2.vue开发环境的搭建和脚手架工具的使用 3.vue具体的指令和项目实战 1.了解vue 1.具备基础:html.css.js,模块化概念.ES6语法(简单即可) ...
- Wpf窗口设置屏幕居中最前显示
public Window() { InitializeComponent(); WindowStartupLocation = Win ...
- 初试kafka消息队列中间件一 (只适合初学者哈)
初试kafka消息队列中间件一 今天闲来有点无聊,然后就看了一下关于消息中间件的资料, 简单一点的理解哈,网上都说的太高大上档次了,字面意思都想半天: 也就是用作消息通知,比如你想告诉某某你喜欢他,或 ...
- Android使用xUtils3上传图片报错解决:java.lang.ArrayIndexOutOfBoundsException: 70918
今天在使用安卓xUtils3框架配合SmartUpload框架上传图片到Java服务端时,遇到了一个莫名其妙的错误: 安卓端代码如下: 似乎并没有发现什么问题,以前在用xUtils2.6老版本时也是这 ...