性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本

简介: 在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。

一、前言

在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。

二、编写脚本

由于 HLS 基于HTTP,因此 JMeter 可以轻松模拟拉流,这意味着我们很容易创建测试计划。正如上篇文章提到的那样,HLS 的工作原理是将媒体源拆分为小文件(ts),然后将其分发为播放列表格式(m3u8)。因此,基本上在获取播放列表后,可以循环播放内容并下载所有文件(拉流)。

这里演示主播放列表地址为:

1、获取一级索引文件

由于整个流被分成小段,这意味着,为了保留主播放列表文件(m3u8),我们必须首先完成初始 HTTP 请求(一个执行 GET 的简单 HTTP 采样器)。请注意,每个流可以有多个播放列表(即不同的视频分辨率)。

image.png

由于主播放列表的响应提供了一个块列表(即较小的二级播放列表),因此我们将使用正则表达式后处理器将它们全部收集到一个数组中:
image.png

2、获取二级索引文件

现在我们有了“块”数组,我们需要添加一个 If Controller 非空判断:

image.png

下一步主要为获取的媒体(ts文件)列表,以便我们的“浏览器”能够进一步接收媒体内容(拉流)。这需要创建另一个 HTTP 采样器:

image.png

由于二级播放列表的响应提供了一个块列表(即所有 ts 文件列表),因此我们将使用正则表达式后处理器将它们全部收集到一个数组中:

image.png

注意:
“Match No.’”中的“ -1” 值,表示 JMeter 能够找到与特定正则表达式匹配的所有字符串。

3、拉流

现在我们有了 ts 文件列表“块”数组,我们需要添加一个 foreach-controller

image.png

该控制器了解变量“块”是字符串列表。因此,它将每次迭代的当前值放入“块”变量中。

下一步涉及获取实际的流部分,以便我们的“浏览器”能够接收媒体内容。这需要创建另一个 HTTP 采样器:

image.png

这里为了达到顺序拉流的,使用了循环计算器来做标记:

image.png

4、整体测试计划

注意这里使用 ${__P(tokenSetOnCommandLine,something)} 硬编码全局变量赋值:

image.png

5、测试结果

执行的测试结果如下:

image.png

压测 HLS 视频流的逻辑其实非常简单,先下载一级索引,它里面记录了二级索引文件的地址,然后模拟浏览器再去下载二级索引文件,二级索引文件中又记录了 TS 文件的下载地址,这样模拟浏览器就可以按顺序下载 TS 流媒体文件并连续播放,俗称“拉流”。

三、小结

由于 HLS 依赖 HTTP 协议,因此它以与其他任何协议数据流几乎相同的方式流传输视频流。它提供了极大的灵活性,因为它允许我们使用基于原生的 HTTP 的工具来测试,开发和操作在线视频。阅读此文章后,希望你现在也可以看到使用 JMete 压测 HLS 其实并不复杂。

示例脚本:

目录
相关文章
|
22小时前
|
网络协议 JavaScript 前端开发
性能工具之Jmeter压测Hprose RPC服务
【5月更文挑战第19天】性能工具之Jmeter压测Hprose RPC服务
11 5
|
2天前
|
消息中间件 Java 测试技术
性能工具之Jmeter扩展函数及压测ActiveMQ实践
【5月更文挑战第18天】性能工具之Jmeter扩展函数及压测ActiveMQ实践
28 5
|
3天前
|
API Apache
性能工具之JMeter5.0核心类JMeterEngine源码分析
【5月更文挑战第17天】性能工具之JMeter5.0核心类JMeterEngine源码分析
18 4
性能工具之JMeter5.0核心类JMeterEngine源码分析
|
4天前
|
Java 测试技术 API
性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
【5月更文挑战第16天】性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
20 4
性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
|
5天前
|
XML 存储 算法
性能工具之JMeter5.0核心类HashTree源码分析
【5月更文挑战第15天】性能工具之JMeter5.0核心类HashTree源码分析
15 2
性能工具之JMeter5.0核心类HashTree源码分析
|
6天前
|
Java 测试技术 Apache
性能工具之JMeter5.0核心源码浅析
【5月更文挑战第14天】性能工具之JMeter5.0核心源码浅析
15 1
性能工具之JMeter5.0核心源码浅析
|
7天前
|
Dubbo Java 应用服务中间件
性能工具之JMeter Dubbo 脚本开发
【5月更文挑战第13天】性能工具之JMeter Dubbo 脚本开发
21 3
性能工具之JMeter Dubbo 脚本开发
|
7天前
|
小程序 Java 编译器
性能工具之JMeter 微信小程序 WebSocket 脚本入门
【5月更文挑战第12天】性能工具之JMeter 微信小程序 WebSocket 脚本入门
12 1
|
Web App开发 前端开发 Android开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。
748 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer操作。
658 0