zoukankan      html  css  js  c++  java
  • 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次

  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/suimeng/p/11425355.html
Copyright © 2011-2022 走看看