性能工具之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 采样的复杂度降低很不少。

示例脚本:

参考资料:

目录
相关文章
|
24天前
|
JSON 测试技术 数据格式
性能工具之Jmeter关联入门
【4月更文挑战第4天】关联是每个性能测试人员必须掌握的技能,是解决性能脚本中的"金钥匙"。
25 2
性能工具之Jmeter关联入门
|
2月前
|
XML Shell Linux
性能工具之 JMeter 使用 Python 脚本快速执行
性能工具之 JMeter 使用 Python 脚本快速执行
41 1
性能工具之 JMeter 使用 Python 脚本快速执行
|
2月前
|
Shell Linux 网络安全
性能工具之 JMeter 使用 shell 脚本快速执行
【2月更文挑战第30天】性能工具之 JMeter 使用 shell 脚本快速执行
108 1
性能工具之 JMeter 使用 shell 脚本快速执行
|
2月前
|
监控 数据可视化 Java
性能工具之Jmeter 后置监听器可视化数据逻辑
【2月更文挑战第29天】性能工具之Jmeter 后置监听器可视化数据逻辑
28 2
性能工具之Jmeter 后置监听器可视化数据逻辑
|
8月前
|
XML 前端开发 测试技术
使用 jMeter 对 SAP Spartacus 进行并发性能测试
使用 jMeter 对 SAP Spartacus 进行并发性能测试
73 0
|
9月前
|
JSON 监控 测试技术
性能测试--InfluxDB+Grafana+Jmeter搭建性能监控平台 (二)
性能测试--InfluxDB+Grafana+Jmeter搭建性能监控平台
|
9月前
|
监控 测试技术 时序数据库
性能测试--InfluxDB+Grafana+Jmeter搭建性能监控平台 (一)
性能测试--InfluxDB+Grafana+Jmeter搭建性能监控平台
|
10月前
|
XML 测试技术 API
JMeter和Postman:哪一个更适合性能测试?
Postman 和 JMeter 都可以用来做 API 测试,但是它们之间有一些区别。
|
11月前
|
JSON 前端开发 测试技术
性能测试(8)——Jmeter基础入门
Get、Post请求(以个人学生管理系统为例) 在线程组中右键新建“用户定义的变量”,添加键值对,如果在请求中需要使用到该变量,则在“值”这一栏下,填写${该变量名称},来引用该变量的值。
163 0
性能测试(8)——Jmeter基础入门
|
11月前
|
XML 设计模式 Java
性能测试(7)——Jmeter元件与组件
代表jmeter工具菜单中的一个子菜单(功能),比如HTTP请求、事务控制器、响应断言等,就是一个元件。元件下的子组件,比如逻辑控制器中有事务控制器,仅一次控制器,循环控制器等,这些都是元件,但它们被归类到逻辑控制器中,逻辑控制器就是组件。
177 0