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

示例脚本:

参考资料:

目录
相关文章
|
7月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1539 10
|
7月前
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
1028 0
|
9月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1310 23
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
805 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
272 2
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
291 3
|
8月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
1011 0
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
555 3
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
474 2
|
11月前
|
数据可视化 测试技术 API
JMeter、Apipost 与 Postman 的 API 测试对比:为什么 APIPost 是更聪明的选择
API测试如同筹备一场晚宴,选对工具至关重要。JMeter功能强大但上手难,适合专业用户;Postman简单易用,但在复杂场景和团队协作中表现有限;而Apipost则是一款智能高效的“厨房神器”。它性能测试轻松、结果清晰、学习门槛低,并且能一键集成CI/CD流程。对于追求效率与便捷的团队而言,Apipost无疑是更优选择,让API测试如同五星大厨烹饪般丝滑流畅。