性能工具之 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 其实并不复杂。

示例脚本:

目录
相关文章
|
5月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
575 130
|
6月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
635 2
|
6月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
6月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
7月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
304 0
|
7月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
946 0
|
6月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1316 10
|
6月前
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
885 0
|
8月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1234 23
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
533 3