首页 > 其他分享 >性能工具之Taurus场景使用(进阶篇)

性能工具之Taurus场景使用(进阶篇)

时间:2023-04-03 14:31:50浏览次数:41  
标签:-% jmx 场景 Taurus 进阶篇 线程 测试 JMeter

性能工具之Taurus场景使用(进阶篇)_YAML

前言

在上两文中介绍了安装和入门使用,本文我们来看看 Taurus 一些进阶的玩法。

性能工具之Taurus入门(安装篇)

性能工具之Taurus使用(入门篇)

复杂场景统一测试

复杂场景的压力测试,如果有多个同学从事脚本开发,则有时必须使用多个测试脚本文件。这意味着将多个测试脚本需要集成到单个压力测试中。在 JMeter 中可以通过使用 TestFragments 功能部分解决,但是它需要手动管理主测试模块才能添加测试片段,将其排列到线程组中,计算压力场景等。

下面将介绍 Taurus 运行 JMeter 测试,从 YAML 设置和覆盖 JMeter 测试的某些测试参数,以及使用多个 YAML 文件构建统一的单个测试的各种场景。

多个JMeter JMX测试

这里我演示三个 JMeter 示例脚本:

  • build-ftp-test-plan.jmx
  • build-webservice-test-plan
  • jmx build-web-test-plan.jmx

运行多个 JMeter JMX 测试就将路径传递到 bzt 命令即可,如下所示:

  1. bzt build-ftp-test-plan.jmx build-webservice-test-plan.jmx build-web-test-plan.jmx

终端中显示实时测试状态:

性能工具之Taurus场景使用(进阶篇)_YAML_02

测试后的摘要统计信息:

性能工具之Taurus场景使用(进阶篇)_apache_03

Taurus 自动获取 JMeter JMX 脚本并同时执行它们,同时 Taurus 为每个 JMeter 测试脚本生成了一组额外的结果:

性能工具之Taurus场景使用(进阶篇)_YAML_04

文件说明:

  • modified_xxxx.jmx:注入了结果编写器的实际 JMX 文件
  • kpi.jtl:主要结果文件(CSV)
  • errors.jtl:包含有关错误的全面信息(XML)
  • jmeter.log:JMeter引擎日志文件
  • 等等

通过 Taurus 执行的每个 JMeter 脚本都有其自己的结果集。这里结果查看可以使用 MergeResults插件,该插件可以根据提供的文件的 .jtl 结果绘制区分的图或合并的图。

具体参考:https://jmeter-plugins.org/wiki/MergeResults/

效果示图:

性能工具之Taurus场景使用(进阶篇)_线程组_05

YAML 配置文件

Taurus 还支持从 YAML 文件运行多个现有的 JMeter JMX 测试脚本。

这里演示 Taurus 使用 2 个 Scenario 同时启动两个(或多个)JMeter JMX 测试:

编写 exist_multiple_jmx_conifg.yml


1. settings: # 环境变量设置
2.   env:
3.     BASE_DIR: /home/taurus/taurus_container_scripts   # 脚本目录
4.   artifacts-dir: /home/taurus/taurus_container_artifacts/simple1/%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
5. 
6. execution:
7. - scenario: simple1   # 场景1名称
8. - scenario: simple1   # 场景2名称
9. 
10. scenarios:
11.    simple1:
12.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本1
13.    simple2:
14.         script: '${BASE_DIR}/build-ftp-test-plan.jmx' # 脚本2
15. 
16. modules:
17.     jmeter:
18.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
19.         version: 5.2.1  # 版本号
20. 
21. reporting:
22. - module: final-stats   # 摘要报告
23. - module: console       # 控制台

执行命令:


1. bzt exist_multiple_jmx_conifg.yml

Taurus Console 显示两个测试当前正在并行执行:

性能工具之Taurus场景使用(进阶篇)_YAML_06

测试后的摘要统计信息:

性能工具之Taurus场景使用(进阶篇)_apache_07

覆盖JMeter测试参数

上面介绍了使用 Taurus 执行现有 JMeter 脚本测试的过程,现在让我们更深入地了解如何从 YAML 配置文件控制和覆盖 JMeter 测试参数设置。

单线程组

我们通过修改脚本一次通过一个线程访问:

性能工具之Taurus场景使用(进阶篇)_apache_08

现在让我们通过 YAML 配置文件来运行它:

  • 运行现有的 .jmx 脚本
  • 设置以下加载方式:
  • 并发:10个线程
  • 启动时间:1分钟
  • 持续时间:2分30秒

编写 cover_exist_jmx_conifg.yml


1. settings:
2.   env:
3.     BASE_DIR: /home/taurus/taurus_container_scripts   # 脚本目录
4.   artifacts-dir: /home/taurus/taurus_container_artifacts/simple1/%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
5. 
6. execution:
7. - concurrency: 10  #并发线程数
8.   ramp-up: 1m      # 启动时间
9.   hold-for: 2m30s  # 持续时间
10.   scenario: simple1  # 场景名称
11. 
12. scenarios:
13.    simple1:
14.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本
15. 
16. modules:
17.     jmeter:
18.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
19.         version: 5.2.1  # 版本号
20. 
21. reporting:
22. - module: final-stats   # 摘要报告
23. - module: console       # 控制台

注意:

  • 并发是线程数(并发用户);它用于10个线程,而不是每秒10个请求;
  • 测试持续时间 -是启动值和持续值的总和,因此10秒后,如果所有10个线程均会启动,则10个线程将启动1分钟(从1个线程开始,每6秒再增加1个)。在正常运行的情况下,测试将继续进行2分钟30秒。总测试时间为 1m+2m30s=3分钟30秒

用在 JMeter GUI 中打开生成的 .jmx 文件的 Taurus 命令如下:


1. bzt cover_exist_jmx_conifg.yml -gui

性能工具之Taurus场景使用(进阶篇)_YAML_09如上图所示,修改了 “Number of Threads”, “Ramp-Up” 和 “Loop Count” 的参数值,根据 YAML 文件设置了测试持续时间,并添加了2个监听器以存储测试指标以及有关错误的详细信息。

除了这些基准更改之外,还可以:

  • 添加(或覆盖)任何属性(包括 JMeter 属性和系统属性);
  • 添加(或覆盖)用户自定义变量;
  • 启用/禁用从线程组开始并以监听器结束的任何测试元素;
  • 修改任何测试元素值;
  • 等等

多线程组

我们看到 Taurus 能够修改基准线程组参数(以及其他测试属性)。但是,如果我们在 JMeter 测试计划中有多个线程组怎么办?

我们使用上例相同的 YAML 文件,以及几乎相同的 .jmx 脚本,让我们添加第二个线程组,复制现有的线程组并将其粘贴到下面: 性能工具之Taurus场景使用(进阶篇)_apache_10

让我们再次运行 Taurus,并选择它显示生成文件的JMeter gui:


1. bzt cover_exist_jmx_conifg.yml -gui

性能工具之Taurus场景使用(进阶篇)_YAML_11如图所示,第一个线程组的线程数现在减少到 5,这是由于Taurus修改了。Taurus 可以计算并发并将其平均分配到现有的(启用的)线程组中。第二个线程组也有5个线程数。注意不考虑禁用线程组,而是将其保留在生成的 .jmx 测试脚本中。Taurus不会修改 setUp 和 tearDown 线程组。

多个线程组和不同线程数

Taurus 如何处理多个线程组具有不同线程号的情况。

比如:使用下面 JMeter 测试计划结构:

  • 测试计划
  • 线程组1-5个并发线程数
  • 线程组2-10个并发线程数

还有一个Taurus YAML配置文件,其中包含:

  • 并发:30

产生的压力测试配置将如下所示:

  • 测试计划
  • 线程组1-10个并发线程数
  • 线程组2-20个并发线程数

Taurus 将配置的并发数按比例分配在2个线程组之间,并保持原始场景压力比例。

多个JMeter JMX测试脚本

可以从 YAML 文件中覆盖多个 JMeter 测试脚本的执行参数。但是,必须分别为每个 .jmx 文件设置执行参数。先前描述的行为(Taurus 将在 .jmx 文件中的已启用线程组之间分配已定义的并发数)仍然存在。

相关配置可执行2个并行提供的 JMeter .jmx 脚本,并根据我们配置(10个线程,1分钟启动时间,2分半钟)覆盖线程数配置,如下所示:


1. settings:
2.   env:
3.     BASE_DIR: /home/taurus/taurus_container_scripts   # 脚本目录
4.   artifacts-dir: /home/taurus/taurus_container_artifacts/simple/%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
5. 
6. execution:
7. - concurrency: 10  #并发线程数
8.   ramp-up: 1m      # 启动时间
9.   hold-for: 2m30s  # 持续时间
10.   scenario: simple1  # 场景名称
11. - concurrency: 10  #并发线程数
12.   ramp-up: 1m      # 启动时间
13.   hold-for: 2m30s  # 持续时间
14.   scenario: simple2  # 场景名称
15. 
16. scenarios:
17.    simple1:
18.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本
19.    simple2:
20.         script: '${BASE_DIR}/build-ftp-test-plan.jmx'  # 脚本
21. 
22. modules:
23.     jmeter:
24.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
25.         version: 5.2.1  # 版本号
26. 
27. reporting:
28. - module: final-stats   # 摘要报告
29. - module: console       # 控制台

让我们再次运行 Taurus,并选择它显示生成文件的JMeter gui:


1. bzt cover_multiple_threadgroup_exist_jmx_conifg.yml -gui

性能工具之Taurus场景使用(进阶篇)_apache_12

控制测试中的TPS

长时间来 JMeter 用户必须不断尝试测试,找到确切的线程数和计时器延迟,以产生期望的TPS,并且认为时间可能很耗时并且并不总是准确的而JMeter提供了 ConstantThroughputTimer 和 ThroughputShapingTimer。 性能工具之Taurus场景使用(进阶篇)_线程组_13性能工具之Taurus场景使用(进阶篇)_线程组_14

而 Taurus 构建固定 TPS 场景非常简单,能够为压测测试脚本精确设置所需的TPS。

让我们从一个非常简单的示例场景开始,一个10用户压测,启动时间为1分钟,测试持续时间为2分钟30秒。相关的 Taurus YAML 配置文件为:

cover_exist_jmx_conifg_win.yml

    1. settings:
    2.   env:
    3.     BASE_DIR: E:\Taurus   # 脚本目录
    4.   artifacts-dir: E:\Taurus\artifacts\simple1\%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
    5. 
    6. execution:
    7. - concurrency: 10  #并发线程数
    8.   ramp-up: 1m      # 启动时间
    9.   hold-for: 2m30s  # 持续时间
    10.   scenario: simple1  # 场景名称
    11. 
    12. scenarios:
    13.    simple1:
    14.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本
    15. 
    16. modules:
    17.     jmeter:
    18.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
    19.         version: 5.2.1  # 版本号
    20. 
    21. reporting:
    22. - module: final-stats   # 摘要报告
    23. - module: console       # 控制台

    通过 Taurus 运行:

    性能工具之Taurus场景使用(进阶篇)_YAML_15在我们的案例中可以看到,TPS 平均为 10 左右,让我们通过 Taurus 将其 TPS 限制为5:

    编写 cover_exist_jmx_conifg_limit_tps.yml


    1. settings:
    2.   env:
    3.     BASE_DIR: E:\Taurus   # 脚本目录
    4.   artifacts-dir: E:\Taurus\artifacts\simple1\%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
    5. 
    6. execution:
    7. - concurrency: 10  #并发线程数
    8.   throughput: 5    # 限制TPS
    9.   ramp-up: 1m      # 启动时间
    10.   hold-for: 2m30s  # 持续时间
    11.   scenario: simple1  # 场景名称
    12. 
    13. scenarios:
    14.    simple1:
    15.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本
    16. 
    17. modules:
    18.     jmeter:
    19.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
    20.         version: 5.2.1  # 版本号
    21. 
    22. reporting:
    23. - module: final-stats   # 摘要报告
    24. - module: console       # 控制台

    重新启动测试后,我们可以看到 TPS 受到限制,并在1分钟的启动时间内 TPS 负载逐渐增加到 5。性能工具之Taurus场景使用(进阶篇)_线程组_16

    我们在JMeter GUI中以下方式打开此测试脚本:

      1. bzt cover_exist_jmx_conifg_limit_tps.yml -gui

      我们将看到 ThroughputShapingTimer 已添加到测试计划中,并且其配置与启动周期和目标 TPS 相匹配。 性能工具之Taurus场景使用(进阶篇)_apache_17

      我们已经注意到 TPS 是通过两个步骤添加的:

      • 在60秒内将负载从1 TPS 增加到 5 TPS(启动)
      • 将负载以5 TPS的速度保持150秒(保持)

      我们也可以使用 Taurus 中的 steps 参数来控制所需的步骤数。因此,如果我稍微修改测试并添加 5个步骤,如下所示:


      1. settings:
      2.   env:
      3.     BASE_DIR: E:\Taurus   # 脚本目录
      4.   artifacts-dir: E:\Taurus\artifacts\simple1\%Y-%m-%d_%H-%M  # path where to save artifacts, default is %Y-%m-%d_%H-%M-%S.%f
      5. 
      6. execution:
      7. - concurrency: 10  #并发线程数
      8.   throughput: 5    # 限制TPS
      9.   steps: 5         # 阶梯
      10.   ramp-up: 1m      # 启动时间
      11.   hold-for: 2m30s  # 持续时间
      12.   scenario: simple1  # 场景名称
      13. 
      14. scenarios:
      15.    simple1:
      16.         script: '${BASE_DIR}/build-web-test-plan.jmx'  # 脚本
      17. 
      18. modules:
      19.     jmeter:
      20.         download-link: 'https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-{version}.zip' # 下载地址
      21.         version: 5.2.1  # 版本号
      22. 
      23. reporting:
      24. - module: final-stats   # 摘要报告
      25. - module: console       # 控制台

      然后,将导致以下 ThroughputShapingTimer 配置:

      性能工具之Taurus场景使用(进阶篇)_线程组_18

      因此,只需要设置步数,Taurus 就会在定义的加速期内自动按比例分配目标TPS。

      小结

      本文我们介绍了几种复杂场景的使用方法 ,其中包括:

      • 复杂场景统一测试
      • 多个JMeter JMX测试;
      • YAML 配置文件;
      • 覆盖JMeter测试参数
      • 单线程组;

      • 多线程组;

      • 多个线程组和不同线程数;

      • 多个JMeter JMX测试脚本;

      • 控制测试中的TPS

      总结其核心思想,就是我们可以使用 YAML 来统一描述性能测试,这就是我们想要的 test as code




      示例脚本:

      https://github.com/7DGroup/JMeter-examples/tree/master/taurus


      标签:-%,jmx,场景,Taurus,进阶篇,线程,测试,JMeter
      From: https://blog.51cto.com/u_15181572/6166359

      相关文章

      • 全网最详细中英文ChatGPT-GPT-4示例文档-复杂函数快速转单行函数从0到1快速入门——官
        目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
      • 国标视频融合监控汇聚云平台的方案实现及场景应用
        SkeyeVSS国标视频融合云平台基于端-边-云一体化架构,部署轻量简单、功能灵活多样,平台可支持多协议(GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等)、多类型设备接入(IPC/NVR/监控平台),在视频能力上,可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、集群、智能......
      • ​openEuler 23.03 正式发布,聚集社区创新力量,增强基础技术能力,协同全场景创新
        3月31日,openEuler23.03创新版本正式发布。openEuler作为一个凝聚全球开发者的创新平台,持续在多样性算力、基础技术、全场景和生态服务等方向持续创新。openEuler23.03是社区最新发布的创新版,版本代码总计7.3亿行,相比openEuler22.09,新增代码5500万行,新增代码主要集中......
      • Jmeter-普通性能场景设计
        普通性能场景设计直接使用一个固定量的并发用户数,进行性能测试,得到性能指标值在jmeter中,模拟多用户并发,修改线程组的线程数、线程组:用于性能场景设计的线程数:模拟性能测试的并发人数jmeter中,线程数,理论上是没有限制的。但是,要模拟的人越多,要消耗(发起方)......
      • Jmeter-负载测试场景设计
        负载测试场景设计负载测试逐步增加并发用户数,找到最大可接受的并发用户数区间。最大并发用户数一般是说把服务器压奔溃、或者出现持续报错最大可接受并发用户数能接收的标准最大可接受的并发用户数,并不一定是tps值最大所需插件负载测试,需要引入插件:......
      • SpringBoot中常见的各种初始化场景分析
        大家能区分出以下各种初始化适用的场景吗ApplicationRunner,CommandLineRunner,BeanFactoryPostProcessor,InitializingBean,BeanPostProcessor首先可以简单分类Springboot的钩子        1,ApplicationRunner        2,CommandLineRunner上述2个钩子其实没啥......
      • encodeURI()、encodeURIComponent()区别及使用场景
        一、URLURL是使用ASCII进行编码的,所以有些内容是不支持的,例如中文,URL会使用编码的手段将其转义为可解释内容。在URL中,合法字符分成两类。URL元字符:分号(;),逗号(,),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加号(+),美元符号($),井号(#) 语义字符:a-z,A-Z,0-9,连词号(-),下划线(_),点(.),感叹号(!),波浪......
      • SpringBoot 集成支付宝的各种应用场景
        SpringBoot是一个非常流行的Java框架,它提供了一种快速、简便的方式来开发基于Java的Web应用程序。支付宝是中国最大的第三方支付平台,它提供了丰富的API,支持多种支付方式。在本篇博客中,我将介绍如何使用SpringBoot集成支付宝支付,包括以下几个场景:手机网站支付电脑网站支付移动支付......
      • 一文看懂时序预测 or 销量预测场景下的的评估指标
        文章目录前言1.加权分位数损失(wQL)2.加权绝对百分比误差(WAPE)3.均方根误差(RMSE)4.平均绝对误差(MAE)5.平均百分比误差(MAPE)6.平均绝对缩放误差(MASE)总结前言在时序预测或者销量预测场景中,我们会通过确定一些准确率指标来评估我们的预测值。在学术界和工业界,我们常用指标有:均方根误差(RMSE)、......
      • 全网最详细中英文ChatGPT-GPT-4示例文档-智能编写Python注释文档字符串从0到1快速入门
        目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......