性能工具之Jmeter HLS 插件(入门篇)

简介: 【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比

一、前言

上篇文章中,我们详细介绍了如何使用原生 HTTP 采样器如何制作一个 HLS 流媒体脚本,那么今天我们来介绍了如何容易做到,即使用 BlazeMeter 发布的 Jmeter HLS 插件。

二、插件介绍

BlazeMeter JMeter HLS插件允许用户仅使用一个自定义采样器来模拟 HLS 场景。现在,你不需要使用多个HTTP 请求采样器,ForEach 控制器或 RegEx PostProcessors

相反,完整的逻辑被无缝封装,因此你只需关心用例:媒体类型,播放时间和网络条件而已该,我们可以通过 Jmeter 插件管理器安装。

1、安装

从插件管理器安装 HLS 插件。

image.png
image.png

安装插件后,Jmeter 会自动重启。

2、外观

该插件内部解决了 HLS 的复杂性。它获取主播放列表文件,选择一个变体,并获取其媒体播放列表文件,片段等。该插件可模拟用户通过 HLS 支持不同的情况:流类型、播放时间、网络带宽和设备分辨率。

MPEG Dash 也是如此。它从 URL 获取清单文件,并根据可用性,流类型,播放时间,网络带宽和设备分辨率为媒体,音频和字幕选择一个自适应集。

这是采样器的外观:

image.png

3、核心源码

插件的代码仓库:https://github.com/Blazemeter/HLSPlugin

核心代码调用逻辑如下:

image.png

首先下载主播放列表:

  private Playlist downloadMasterPlaylist(URI uri)
      throws PlaylistDownloadException, PlaylistParsingException {
   
   
    return downloadPlaylist(uri,
        p -> p != null && !p.isMasterPlaylist() ? buildPlaylistName(MEDIA_TYPE_NAME)
            : buildPlaylistName(MASTER_TYPE_NAME));
  }

然后下载媒体播放列表:

  private Playlist downloadPlaylist(URI uri, Function<Playlist, String> namer)
      throws PlaylistDownloadException, PlaylistParsingException {
   
   
    return downloadPlaylist(uri, namer, Playlist::fromUriAndBody);
  }

播放在所选媒体播放列表中声明的每个媒体片段,可以重新加载播放列表以发现任何添加的片段。

  protected T downloadPlaylist(URI uri, Function<T, String> name, PlaylistParser<T> playlistParser)
      throws PlaylistParsingException, PlaylistDownloadException {
   
   
    Instant downloadTimestamp = timeMachine.now();
    HTTPSampleResult playlistResult = httpClient.downloadUri(uri);
    if (!playlistResult.isSuccessful()) {
   
   
      String playlistName = name.apply(null);
      sampleResultProcessor.accept(playlistName, playlistResult);
      throw new PlaylistDownloadException(playlistName, uri);
    }
public HTTPSampleResult downloadUri(URI uri) {
   
   
    if (interrupted) {
   
   
      throw new SamplerInterruptedException();
    }
    try {
   
   
      return sample(uri.toURL(), "GET", false, 0);
    } catch (MalformedURLException e) {
   
   
      throw new IllegalArgumentException(e);
    }

三、插件使用

1、创建测试

  • 创建一个线程组;
  • 添加 HLS 采样器添加 - >采样器 - > HLS 流式采样器。
    image.png

2、主播放列表网址

将链接设置为主播放列表文件:
image.png

3、持续时间

将播放时间设置为整个视频或一定的视频时长(秒)
image.png

3、音频和字幕轨道

可以通过语言代码或名称(例如 fr 或 french)指定是否要让插件下载特定的替代音频或字幕轨道。

image.png

4、带宽

选择要在测试中模拟的带宽。如果所选带宽只有一个播放列表,则插件将仅根据此标准选择播放列表。

  • 自定义带宽(位/秒)
  • 最小带宽可用
  • 最大可用带宽

image.png

5、清晰度

选择所需带宽后,可以选择分辨率来模拟特定设备。
image.png

6、恢复视频下载

指定是否要在两者之间继续播放。如果保留默认值,则插件将在每次迭代时从流的开头重新开始播放。
image.png

7、测试结果

可以设置监听器以评估测试结果。查看结果树监听器将显示 HLS 采样器的结果样本,因此可以检查请求和响应的工作方式。它将显示具有相关类型(主播放列表,媒体播放列表或视频片段)的每个样本,以轻松识别它们。

image.png

采样器将自动添加一个 X-MEDIA-SEGMENT-DURATIONHTTP 响应头,其中包含以秒为单位的媒体段持续时间(以十进制表示)。将该值与关联样本中花费的时间进行比较后,可用于执行分析。

image.png

对于 MPEG DASH,结果树显示具有相关类型(媒体,音频和字幕的清单,初始化和片段)的结果样本,以便可以轻松识别它们。

8、断言和后置处理器

该插件支持在任何可能的样本结果类型(主播放列表,媒体播放列表,媒体片段,音频播放列表,音频片段,字幕,字幕播放列表和字幕片段)上添加断言和后置处理器。要添加与特定结果匹配的断言或后置处理器,只需将其用作名称后缀以及应断言或后置处理的样本结果的类型即可。

以下是仅适用于媒体段的断言示例:

image.png

如果要将断言应用于所有生成的样本结果,则只需使用不包含样本结果类型后缀的任何名称。

注意:断言和后处理器将不适用于子结果(如重定向子样本)。并且选择要应用于断言和后置处理器的样本(主样本/子样本)将不起作用。

9、停止/关机按钮

当按下“关机”按钮时,您可能需要等待相对较长的时间才能真正停止测试计划。发生这种情况的原因可能是该按钮的行为,即等待当前采样结束,并且 HLS 采样器可能需要相对较长的时间才能完成 URL 采样,具体取决于指定的播放时间以及使用的播放列表的类型。例如,如果设置了一个实时流 URL 并指定要播放整个视频,那么它将永远不会结束,并且关闭视频也不会停止它。

相反,当按下“ Stop” 时,当前样品中断(并生成故障样品结果),并且测试计划立即停止。

四、示例脚本

我们在 HLS 插件的基础上简单制作上篇文章中的例子。

首先我们通过硬编码定义全局变量:

image.png

对于线程组的设置:

image.png

HLS采样器设置:

image.png

以上,这样我们一个简单的 HLS 脚本就已经搞定了,是不是相比原生 HTTP 采样的复杂度降低很不少。

示例脚本:

参考资料:

目录
相关文章
|
1月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
86 2
|
7天前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
35 2
|
15天前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
41 3
|
1月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
16天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
63 3
|
2月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
120 1
|
2月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【8月更文挑战第5天】性能测试确保应用高负载下稳定运行。Apache JMeter与Locust是两大利器,助力识别解决性能瓶颈。本文介绍这两款工具的应用与优化技巧,并通过实战示例展示性能测试流程。首先,通过JMeter测试静态与动态资源;接着,利用Locust的Python脚本模拟HTTP请求。文中提供安装指南、命令行运行示例与性能优化建议,帮助读者掌握性能测试核心技能。
111 0
|
2月前
|
消息中间件 Java 测试技术
Python性能测试全攻略:JMeter与Locust,双剑合璧斩断性能瓶颈🗡️
【8月更文挑战第4天】在软件开发中,性能至关重要。对Python开发者来说,掌握高效性能测试方法尤为关键。本文将带您探索性能测试工具JMeter与Locust的强大功能。JMeter作为Java世界的巨擘,以其强大功能和灵活性在性能测试领域占有一席之地,不仅适用于Java应用,也能测试Python Web服务。
103 0
|
16天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
45 4
|
1月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
167 7
Jmeter实现WebSocket协议的接口测试方法