• Java性能测试从入门到放弃-详解篇


    Jmeter组件分类说明

    • Jmeter的组件可以放在任意位置

    • 线程池:用于创建线程。每个线程会"批次顺序"执行任务,因此后面的任务可根据前面的任务决定具体的操作。

              1. 普通线程组(主线程组):用于创建主要的线程任务

              2. setUp线程组: 在普通线程组之前触发,用于做测试的前置操作,例如创建测试账户

              3. tearDown线程组: 在普通线程组之后触发,用于做测试的后置操作,例如清理工作。

    • 取样器:用来模拟http,tcp请求。取样器父节点需要包含线程组,否则不会执行

    • 前置处理器: 用于定义取样器前置操作,例如定义用户生成,JDBC操作。

    • 后置处理器:用于解析取样器结果,父节点需包含取样器。

    • 断言:用来判断取样器结果,父节点需包含取样器。

    • 定时器:用于控制并发请求的频率。当父节点为取样器,只对父节点生效。当父节点为线程组,对整个线程组生效。

    • 配置元件:用于配置公共数据,可被同级节点或同级节点的子节点引用

    • 监听器:用于统计测试结果,形成图表。常用的有察看结果树,汇总报告,聚合报告。可通过安装Plugins Manager来丰富监听器的类型。

    • 假如想查看每个分类的详细说明,可以查看:倔强的潇洒小姐

    火焰图

    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请求
    • http请求右键添加->断言->json断言->用于判断api返回是否正确。不添加默认只有http code 200认为是正确的
    json断言
    • 线程组右键添加->监听器->察看结果树->用于查看各个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次

  • 相关阅读:
    Python学习之路(一)之Python基础1
    【第十一课】Tomcat原理解析【转】
    【第十课】Tomcat入门
    【第九课】MriaDB密码重置和慢查询日志
    【第八课】php-fpm.conf配置文件解析
    【第七课】Nginx反向代理和负载均衡
    【第六课】Nginx常用配置下详解
    maven项目中更新了核心库后导致一些包提示未定义,如:The import org.json cannot be resolved
    js代码突然在花括号回车自动多加了一个大括号
    SQL0419N 十进制除法运算无效,因为结果将有一个负小数位。 SQLSTATE=42911
  • 原文地址:https://www.cnblogs.com/suimeng/p/11425355.html
Copyright © 2020-2023  润新知