性能工具之Jmeter HLS 插件(入门篇)
前言
在上篇文章中,我们详细介绍了如何使用原生 HTTP 采样器如何制作一个 HLS 流媒体脚本,那么今天我们来介绍了如何容易做到,即使用 BlazeMeter 发布的 Jmeter HLS 插件。
插件介绍
BlazeMeter JMeter HLS插件允许用户仅使用一个自定义采样器来模拟 HLS 场景。现在,你不需要使用多个HTTP 请求采样器,ForEach
控制器或 RegEx PostProcessors
。
相反,完整的逻辑被无缝封装,因此你只需关心用例:媒体类型,播放时间和网络条件而已该,我们可以通过 Jmeter 插件管理器安装。
安装
从插件管理器安装 HLS 插件。
安装插件后,Jmeter 会自动重启。
外观
该插件内部解决了 HLS 的复杂性。它获取主播放列表文件,选择一个变体,并获取其媒体播放列表文件,片段等。该插件可模拟用户通过 HLS 支持不同的情况:流类型、播放时间、网络带宽和设备分辨率。
MPEG Dash
也是如此。它从 URL 获取清单文件,并根据可用性,流类型,播放时间,网络带宽和设备分辨率为媒体,音频和字幕选择一个自适应集。
这是采样器的外观:
核心源码
插件的代码仓库:https://github.com/Blazemeter/HLSPlugin
核心代码调用逻辑如下:
首先下载主播放列表:
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);
}
插件使用
创建测试
- 创建一个线程组;
- 添加 HLS 采样器添加 - >采样器 - > HLS 流式采样器。
主播放列表网址
将链接设置为主播放列表文件:
持续时间
将播放时间设置为整个视频或一定的视频时长(秒)
音频和字幕轨道
可以通过语言代码或名称(例如 fr 或 french)指定是否要让插件下载特定的替代音频或字幕轨道。
带宽
选择要在测试中模拟的带宽。如果所选带宽只有一个播放列表,则插件将仅根据此标准选择播放列表。
- 自定义带宽(位/秒)
- 最小带宽可用
- 最大可用带宽
清晰度
选择所需带宽后,可以选择分辨率来模拟特定设备。
恢复视频下载
指定是否要在两者之间继续播放。如果保留默认值,则插件将在每次迭代时从流的开头重新开始播放。
测试结果
可以设置监听器以评估测试结果。查看结果树监听器将显示 HLS 采样器的结果样本,因此可以检查请求和响应的工作方式。它将显示具有相关类型(主播放列表,媒体播放列表或视频片段)的每个样本,以轻松识别它们。
采样器将自动添加一个 X-MEDIA-SEGMENT-DURATIONHTTP
响应头,其中包含以秒为单位的媒体段持续时间(以十进制表示)。将该值与关联样本中花费的时间进行比较后,可用于执行分析。
对于 MPEG DASH,结果树显示具有相关类型(媒体,音频和字幕的清单,初始化和片段)的结果样本,以便可以轻松识别它们。
断言和后置处理器
该插件支持在任何可能的样本结果类型(主播放列表,媒体播放列表,媒体片段,音频播放列表,音频片段,字幕,字幕播放列表和字幕片段)上添加断言和后置处理器。要添加与特定结果匹配的断言或后置处理器,只需将其用作名称后缀以及应断言或后置处理的样本结果的类型即可。
以下是仅适用于媒体段的断言示例:
如果要将断言应用于所有生成的样本结果,则只需使用不包含样本结果类型后缀的任何名称。
注意:断言和后处理器将不适用于子结果(如重定向子样本)。并且选择要应用于断言和后置处理器的样本(主样本/子样本)将不起作用。
停止/关机按钮
当按下“关机”按钮时,您可能需要等待相对较长的时间才能真正停止测试计划。发生这种情况的原因可能是该按钮的行为,即等待当前采样结束,并且 HLS 采样器可能需要相对较长的时间才能完成 URL 采样,具体取决于指定的播放时间以及使用的播放列表的类型。例如,如果设置了一个实时流 URL 并指定要播放整个视频,那么它将永远不会结束,并且关闭视频也不会停止它。
相反,当按下“ Stop” 时,当前样品中断(并生成故障样品结果),并且测试计划立即停止。
示例脚本
我们在 HLS 插件的基础上简单制作上篇文章中的例子。
首先我们通过硬编码定义全局变量:
对于线程组的设置:
HLS采样器设置:
以上,这样我们一个简单的 HLS 脚本就已经搞定了,是不是相比原生 HTTP 采样的复杂度降低很不少。
示例脚本:
参考资料:
- 点赞
- 收藏
- 关注作者
评论(0)