全部产品
Search
文档中心

性能测试:创建JMeter场景

更新时间:Nov 01, 2024

Apache JMeter是Apache的开源压测工具,支持参数化、断言等功能。其丰富的开源生态提供了各种协议和控制器的扩展,同时可以通过自定义脚本编写参数处理等逻辑。PTS支持JMeter原生引擎的压测,并在此基础上,为您提供便捷的横向扩展能力,同时结合云监控集成功能持续补强JMeter在高并发和监控定位方面的能力和体验。本文介绍PTS原生JMeter压测的优势和操作步骤。

步骤一:创建JMeter场景

  1. 上传JMeter压测文件。

    1. 登录PTS控制台,选择性能测试 > 创建场景,然后单击JMeter压测

    2. 创建JMeter场景页面,输入场景名

    3. 场景装配区域,上传一个YAML格式的JMeter压测文件,文件名不包含空格字符,后缀名为jmx

      JMX压测文件上传后,PTS会自动为您补充缺失的插件,具体详情请参见JMeter插件自动补全

    4. 单击上传文件,上传其他文件,如csv格式的数据文件,jar格式的插件等。

      重要

      上传的同名文件将覆盖之前上传的文件。如需对比文件,可在该文件的操作列,获取MD5值,与您本地文件的MD5值进行对比,确认文件是否变更。

      使用限制

      • JMX脚本文件:文件大小不超过2 MB。您可上传多个JMX脚本文件,但是压测仅能使用一个JMX脚本,发起压测前必须选中一个JMX脚本文件。

      • JAR文件:文件大小不超过10 MB。上传之前,请在本地JMeter环境调试JAR文件,确保调试通过。

      • CSV文件:文件大小不超过60 MB,超过60MB请使用OSS数据源功能引入文件。非JMX文件总数不超过20个。

        重要
        • 准备CSV文件时,请不要直接修改XLSX文件的后缀。推荐使用Excel、Numbers等软件导出,程序生成可以使用Apache Commons CSV。

        • 如果JMX脚本中关联了数据文件,请务必将CSV Data Set Config中的Filename改为文件名本身,不要带路径(如下图所示)。否则会读取不到数据文件。同理,如果使用了__CSVRe函数或者在JAR中有指定文件,均需使用文件名。

        image

    5. 如果您上传了多个JMX文件,选中一个JMX文件作为发起该压测场景使用的JMeter脚本。

    6. (可选)为CSV文件选中切分文件,可以保证该文件的数据在每个施压机不重复。不选中该项,每个施压机上使用同一份数据。具体操作,请参见JMeter使用CSV参数文件

    7. (可选)如果您上传的脚本中有分布式适配组件,例如定时器(Timer)、控制器(Controller)等,可以对其进行多施压IP的分布式适配设置,有利于更精准、有效地进行性能测试。

      1. 设置同步定时器。若您上传的JMeter脚本中自带定时器(Timer),需要选择脚本中的设置值是全局生效单机生效

      2. 设置常数吞吐量定时器。若您上传的JMeter脚本中自带控制器(Controller),需要选择脚本中的设置值是全局生效单机生效。具体操作,请参见常数吞吐量分布式使用示例

    8. 选择是否使用依赖环境。具体操作,请参见JMeter环境管理

      • 若选择,则需要选择环境管理中已创建好的环境。

      • 若选择,则需要选择JMeter版本。目前支持Apache JMeter 5.0和Java 11。

  2. 施压配置。

    您可以参考压力模式与量级配置完成施压配置。

  3. (可选)高级设置。

    高级设置包含日志采样率设置、DNS配置和分布式适配组件设置。默认关闭,如果需要配置,请打开开关。

    高级设置关闭的状态

    将会使用默认效果。即日志采样率1%;每次循环清空DNS缓存开关不开启,使用系统DNS解析器,同步定时器和常数吞吐量定时器均为单机生效。image

    高级设置开启的状态

    1. 日志采样率设置

      可自定义采样日志的采样率,默认采样率为1%。 若需降低采样率,请填写(0,1]区间的值;若需提升采样率,请填写(1,50]区间内可被10整除的数,例如20。

      重要

      当指定大于1%的采样率时,会额外收取rate%的费用。例如采样率为20%会额外收取20%*VUM的费用。详情请参见按量计费(后付费)

    2. DNS缓存设置

      可选择每次访问请求是否清空DNS缓存,若需要清空DNS缓存,可选择使用系统DNS解析器或者自定义DNS解析器。

      可能需要使用自定义DNS解析器的情况:

      • 公网环境中的压测

        当压测业务请求需要通过公网访问,为了不影响线上业务,您可以使用测试环境的IP地址与公网域名绑定,实现压测流量和线上流量的隔离。

      • 阿里云VPC内网环境中的压测

        阿里云VPC内网压测是指压测用户位于阿里云VPC内网中的服务。为了压测时不用修改压测接口的域名,您可以在场景中为任意一个域名绑定阿里云VPC内网IP地址,实现在阿里云内网压测的目的。更多信息,请参见阿里云VPC内网压测

    3. 分布式适配组件设置

      如果您上传的脚本中有分布式适配组件,例如定时器(Timer)、控制器(Controller)等,可以对其进行多施压IP地址的分布式适配设置,有利于更精准、有效地进行性能测试。

      • 设置同步定时器。若您上传的JMeter脚本中自带定时器(Timer),需要选择脚本中的设置值是全局生效单机生效image

        • 全局生效:脚本中设置值为集群整体阈值,会根据使用到的IP数来拆分到单机集合阈值上(即单施压机阈值为脚本中值/IP数)。假设共使用到2个施压IP,脚本配置集合阈值为1000,单机阈值即为500。

        • 单机生效:脚本中设置值为单台施压机的阈值,不会替换脚本内容,此时需要注意并发量与配置值是否匹配。假设共使用到2个施压IP,脚本配置集合阈值为1000,单机阈值即为1000,施压集群整体为2000。

      • 设置常数吞吐量定时器。若您上传的JMeter脚本中自带控制器(Controller),需要选择脚本中的设置值是全局生效单机生效

        全局生效

        • 全局生效:脚本中设置值为集群整体阈值,会根据使用到的施压IP数来拆分到单机吞吐量目标值上(即单施压机阈值为脚本中值/IP数),假设使用到2台施压IP地址,并发为100,脚本上仅1个线程组,其吞吐量目标为每分钟100,计算模式为当前线程,此时场景的总目标每分钟吞吐量为2×(100并发/2 )×(100/2)=5000。

        • 单机生效:脚本中设置值为单台施压机的目标值,不会替换脚本内容,需要注意并发量级与配置值是否匹配。假设使用到2台施压IP,并发为100,脚本上仅1个线程组,其吞吐量目标为每分钟100,计算模式为当前线程,此时场景的总目标每分钟吞吐量为2×(100并发/2)×100=10000。

  4. (可选)添加云资源监控。

    通过添加监控的方式,您可以在压测过程和压测报告中快速查看相应的监控数据。默认关闭,如需要配置,请打开开关。

  5. (可选)添加其他信息。

    您可在此添加压测负责人和备注信息。默认关闭,如需配置请打开开关。

步骤二:开始压测

  1. 调试场景可提前检查网络连通、插件完整性、脚本配置的正确性等问题,避免压测启动失败。调试场景可验证配置是否合理,避免压测失败。若需进行场景调试,单击调试场景即可进入场景调试页面。更多信息,请参见调试场景

  2. 单击保存去压测,在温馨提示页面,选择立即执行并勾选确认本次压测已获得准许并遵守当地法律,然后单击启动压测

  3. (可选)压测过程中,您可以监控压测数据,进行场景调速等操作。

    • 数据信息

      数据信息

      说明

      实时VUM

      本次压测消耗的资源总数,单位是VUM(每虚拟用户每分钟)。

      请求成功率(%)

      所有Agent统计周期内全场景请求成功率。

      平均RT(成功/失败)

      • 成功RT Avg(ms):所有成功请求的平均RT。

      • 失败RT Avg(ms):所有失败请求的平均RT。

      TPS

      所有Agent统计周期内的总请求数除以时间(单位:秒(s))所得。

      异常数

      请求异常的数量。导致请求异常的可能原因较多,常见的例如连接超时、请求超时等。

      流量(请求/响应)/s

      施压机发送请求的流量和接收响应的流量。

      并发(当前/最大)

      施压的并发值。若在压测过程中设置了场景调速,会分别显示当前并发值和配置最大并发值。如果在预热阶段则未达到配置并发,预热结束后即为配置的并发值。

      单击调速,并输入需要并发的数字,可在压测过程中进行场景并发的调整。

      总请求数

      整个场景在压测过程中发出去的总请求数。

      说明

      监控数据的来源基于Backend Listener进行了简单的聚合计算。施压Agent的统计采样周期是15s,数据汇总计算的周期也是15s,故可能会有数据延迟的情况。

    • 配置信息

      配置信息页罗列了场景配置中的基本信息,包括压力来源、配置时长、流量模型、指定IP数等信息。

    • 压测信息

      • 压测详情页签下,单击单个链路的右侧查看图表,查看其TPS、成功率、响应时间、流量等实时数据。

      • 单击施压机性能页签,显示了压测过程中所有施压机的CPU使用率、Load5、内存利用率、网络流量的时序曲线等信息。您还可以筛选查看特定施压机的性能信息。

      • 若您添加了ECS监控、SLB监控、RDS监控和ARMS监控等,可以单击云资源监控页签,查看相关监控信息。

    • 采样日志详情

      选择采样日志页签,可根据压测Sampler、响应状态、RT范围等筛选日志,查看日志详情。

      • 根据压测Sampler、响应状态等筛选日志。单击对应的日志操作列的单击查看详情

      • 日志详情对话框的General 页签下,查看日志字段和字段值。在对话框右上角切换显示格式:通用HTTP协议样式。

      • 如果JMeter脚本中配置了从HTML文件嵌入资源Embedded Resources from HTML Files),日志详情中会出现子请求详情页签。

        通过选择特定的子请求,可筛选出对应的请求日志。

        • Timing瀑布流页签,显示总请求和每一个子请求的耗时情况。

        • 调用链视图页签展示了被压测接口上下游的调用链路详情。

步骤三:查看压测报告

在压测停止之后,系统会自动收集压测过程中的数据,形成压测报告,展现JMeter压测场景和具体指令的压测动态信息。

  1. 登录PTS控制台,选择性能测试 > 报告列表

  2. 报告列表页面,选择JMeter场景类型。在目标报告的操作列,单击查看报告。具体操作,请参见查看JMeter压测报告

    说明

    趋势图中,每个点数据的统计采样周期是15s,最终数据报告上可能初期会有数据延迟的情况。压测报告数据保留30天,如有需要可导出报告本地保存。

(可选)步骤四:导出压测报告

如您需要,可以将当前压测报告导出至本地。

  1. 报告详情页面,单击报告导出

  2. 选择有水印版本无水印版本,可将压测报告(PDF)下载至本地。

JMeter压测的场景示例

JMeter压测适用于以下几种场景:

  • 需要高并发分布式压测。

  • 需要压测时观测实时秒级监控,压测后自动生成压测报告。

  • 需要统一管理JMeter脚本、JMeter环境依赖。

具体使用场景示例,请参见使用JMeter压测模拟上传