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

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

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

一、前言

上篇文章中,我们详细介绍了如何使用原生 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 采样的复杂度降低很不少。

示例脚本:

参考资料:

目录
相关文章
|
4天前
|
Dubbo Java 应用服务中间件
性能工具之JMeter Dubbo 脚本开发
【5月更文挑战第13天】性能工具之JMeter Dubbo 脚本开发
18 3
性能工具之JMeter Dubbo 脚本开发
|
1天前
|
Java 测试技术 API
性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
【5月更文挑战第16天】性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
16 4
性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
|
2天前
|
XML 存储 算法
性能工具之JMeter5.0核心类HashTree源码分析
【5月更文挑战第15天】性能工具之JMeter5.0核心类HashTree源码分析
14 2
性能工具之JMeter5.0核心类HashTree源码分析
|
3天前
|
Java 测试技术 Apache
性能工具之JMeter5.0核心源码浅析
【5月更文挑战第14天】性能工具之JMeter5.0核心源码浅析
14 1
性能工具之JMeter5.0核心源码浅析
|
6月前
|
Java 测试技术 Apache
用JMeter做接口压力测试
JMeter是Apache组织开发的基于Java的压力测试工具,它是用 Java 语言编写的
67 0
|
6月前
|
测试技术
JMeter压力测试简单例子
JMeter压力测试简单例子
71 0
|
8月前
|
XML 前端开发 测试技术
使用 jMeter 对 SAP Spartacus 进行并发性能测试
使用 jMeter 对 SAP Spartacus 进行并发性能测试
78 0
|
4天前
|
数据可视化 Java 测试技术
JMeter 如何实现 Elasticsearch 8.X 性能测试?
JMeter 如何实现 Elasticsearch 8.X 性能测试?
20 0
|
4天前
|
JSON 网络协议 Java
使用Jmeter进行功能和性能测试
使用Jmeter进行功能和性能测试
|
4天前
|
SQL Java 测试技术
Jmeter的安装与快速使用(做并发测试)
Jmeter的安装与快速使用(做并发测试)
21 0
http://www.vxiaotou.com