• 14
  • 14
分享

1、测试背景

       随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼。

       公司也在赶时髦,做了一个直播平台,直播内容是面向公司内部员工的,还有少量外部用户。直播平台好不好,最重要的一点是观众观看是否流畅是否清晰,能否满足较多的人观看。平台需要进行测试是否满足大量用户观看直播,这么重要的事情当然要交给性能测试人员来做。

2、直播技术

       一般来说,我们常把视频直播的流程可以分为如下几步:

       采集 —>处理—>编码和封装—>传输(推流到服务器、服务器流分发)—>播放器流播放

       简单描述起来就是:主播端把音视频数据采集编码后通过网络传送到观众端,观众进行观看。视频直播就相当于是把图像数据打包,从一个地方运输到另一个地方。我们本次关注的就是流媒体的性能测试。

       网络直播面向对象在全国各地,在网络传输方面全部自己来做基本不现实,找提供推流服务的CDN服务商提供解决方案是最好的选择,但是我们这次测试的直播系统主要针对公司内部员工,走的内部网络,所已就不需要使用CDN技术。

       在开始之前,我先把流媒体服务中的双端关系说一下。在一个完整的流媒体服务框架中,角色就是"两端加一服"。推流端、拉流端加上媒体服务器。同时按照应用场景的不同,协议又分推流协议和拉流协议

11.png

       下面介绍一下主要的直播技术,国内的面向大众的直播平台都是采用的rtmp、httpflv和hls技术:

       httpflv:这种直播传输实际上就是利用的flv文件的特点,只需要一个matedata和音视频各自header,后面的音视频数据就可以随意按照时间戳传输,当然视频得按照gop段来传输,这种直播数据实际上就是一个无限大的http传输的flv文件,视频地址类似:http://live.iflytek.com/live.flv,客户端利用flv特性,可以一边接受数据边解码播放。

       rtmp:rtmp是adobe研发的开放协议,rtmp其实实质上也是传输的flv格式的数据,同样是flv tag,只不过rtmp在传输上封装了一层,比如rtmp不仅可以直播,也可以推流。rtmp的直播原理同样也是利用了flv文件的特性,只需要一些头信息,后面就可以随意传输音视频数据,达到边传输边播放。

       hls:hls是苹果公司开发的协议,http轮询传输,该协议主要的数据格式是ts视频文件,大致就是将裸流h264和音频直播数据,切片封装成ts段,形成无数的ts小文件,客户端先请求一个m3u8文件,该文件内部会有一列ts文件的地址,客户端按照顺序依次播放ts,以此类推,hls地址类似:http:// live.iflytek.com /live.m3u8,hls在大部分的浏览器利用html5 video是可以直接播放的。

       它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验HLS的出现是为了解决苹果原生环境中的流媒体播放,这个协议可以方便地让Mac和iPhone播放视频流,不依赖Adobe,

       RTMP HLS HTTP-FLV三者的关系使用场景所依赖的插件延时在下表中给出

2.png

       大部分教程在介绍这三个协议的时候,都忽略了一点,就是协议的应用场景到底是什么? RTMP 可以用在双端,但 HLS 只能用在拉流端。 

3、测试方法

       上面说了那么多是为了下面的测试方法做铺垫,视频直播性能测试可以拆分为两种测试,流媒体测试和普通的网页测试。页面就是我们平常进行web页面性能测试使用的方法,不需要过多的阐述,当然还是推荐使用loadrunner进行测试。视频直播也会存在交互界面,主持人与用户的互动,这个性能测试过程中需要注意并进行测试,下面主要讲述性能测试工具和方法

       3.1、RTMP和HLS压力测试工具配置安装和使用

       我们使用的测试环境是centos6.5,首先在环境中安装依赖软件包,使用git下载最新版本st-load源码包

[root@localhost ~]# yum install git unzip patch gcc gcc-c++ make
[root@localhost ~]# git clone https://github.com/winlinvip/st-load.git

       执行配置和编译

[root@localhost st-load]# ./configure
[root@localhost st-load]# make

       查看生成的文件和目录

[root@localhost st-load]# ls objs/
http-parser-2.1 src st_hls_load st_rtmp_load st_rtmp_publish
Makefile st-1.9 st_http_load st_rtmp_load_fast
[root@localhost st-load]#

       模拟RTMP用户

./st_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream

       模拟HLS直播用户

./st_hls_load -c 1 -r http://127.0.0.1:3080/hls/hls.m3u8

       模拟HSL点播用户

./st_hls_load -c 10000 -o -r http://127.0.0.1:3080/hls/hls.m3u8

       模拟RTMP推流用户

./st_rtmp_publish -i doc/source.200kbps.768x320.flv -c 1 -r rtmp://127.0.0.1:1935/live/livestream

       模拟RTMP多路推流用户

./st_rtmp_publish -i doc/source.200kbps.768x320.flv -c 1000 -r rtmp://127.0.0.1:1935/live/livestream_{i}

       支持RTMP流播放测试,一个进程支持5k并发

       支持RTMP流推流测试,一个进程支持500个并发。

       那么多并发前提是我们的压力机能够满足,压力机达不到要求建议使用较少的并发,较多的压力机。

       3.2、HTTP传输测试测试

       LR脚本原理:测试工具服务器会一直从服务器端下载推流数据,我们使用压力机进行压力测试,当然我们设置的事物不会成功,我们不需要担心,我们测试的是网络宽带流量。

测试代码
Action()
{
//lr_think_time(3);
lr_start_transaction("load");
web_url("mp4",
"URL=http://127.0.0.1:5021/live/2",
"Resource=0",
"RecContentType=application/octet-stream",
"Referer=http:/127.0.0.1:5021/live/2",
"Snapshot=t6.inf",
"Mode=HTML",
LAST);
lr_end_transaction("load",LR_AUTO);
return 0;
}

       测试直播流的性能其实就是测试视频下载速度, rtmp hls 和http这些数据传输速度是我们所关注的点,我们做的是性能测试,功能测试关注点和性能测试所关注的有所不同。性能测试之前首先要确认测试环境的网络带宽,直播服务器推流的码率,帧数,交换机的带宽等一系列数据,获取这些数据后我们可以推算在此网络下我们能支持的并发数量,满足多少用户能够观看视频直播。

       压力工具准备,我们这次要满足5000路并发观看720p视频,数据会以1mb/s速度传输,网络环境是万兆网络双万兆网卡,粗略估算能够满足并发数据传输。传输速度达到5000mb/s,这当当然是相当大的数据量。一般的网络和压力机是承载不了的,我们需要较多的压力机进行负载,同时测试一台压力机的负载量。根据单台压力机的压力量进行分配压机机,比如我们单台压力机最多能达到1000mb/s,我们至少需要5台压力机。流量监控工具linux推荐使用iftop,windows使用自带监控,压测方法使用上述的方法。希望上述方法能够帮助大家了解视频直播和性能测试。


作者:Yannn酱

原文链接:https://blog.csdn.net/Lyan00/article/details/105192224#comments_15141403


 


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 行业背景:随着数字化建设的持续快速发展,业务部门对系统下载的文件质量提出了更高的要求,全面高效可持续的测试已成为银行IT建设和测试服务追求的目标。面对的问题:测试人员无法在有限的时间内人工完成大数据量多维文件的下载和数据比对工作,如六天时间内完成12906个txt文件和xml文件的四次下载和数据逐行比对测试。应对措施:通过程序开发和对已有测试工具的灵活运用,圆满高效完成测试任务;汇总经验,为后期下载多维文件数据比对测试提供有效的技术参考和工具支持。一、背景十九届四中全会,将"数据"列为生产要素参与分配,标志着以数据为关键要素的数据经济进入了新时代。金融业是数据密集型行业,在...
            0 0 1936
            分享
          •   今天给大家分享一个“VirtualEnv(虚拟环境)”的概念。在学习RobotFramework时遇到这么一个问题:电脑本地环境已经安装了python3,但是RobotFramework接口测试框架一开始对python3的兼容还不够完全,存在较多的问题,所以需要使用python2环境来开展接口自动化工作。这个时候就遇到python和python3版本造成的环境冲突的问题了。如果卸载python3重新安装python2会导致我原有的其他项目可能出现问题;那么如果直接使用python3环境对应的RobotFramework又存在很多兼容性问题。   怎么办?这时候“VirtualEn...
            0 0 1111
            分享
          • 1.什么是接口?接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。2.接口都有哪些类型?接口一般分为两种:1.程序内部的接口 2.系统对外的接口系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个...
            12 12 2596
            分享
          • 有很多同学进入测试行业之后,一直从事的是软件测试的工作,然后跳槽时遇到一些游戏的公司的面试,就会有点慌,我做的都是软件测试,能胜任游戏测试么?所以,今天我们需要先来了解一下,软件测试和游戏测试的 ”同“ 和 “异”。首先,我们要肯定的是:游戏也是软件的一种,所以从测试工程的角度来讲,游戏测试与软件测试的本质是完全相同的。明白了这一点之后,我们再来看看,他们之间的一个区别。其实,按照我们测试工程师应该有的“测试思维”,考虑任何一个软件的测试点,都应该从以下几个维度出发去考虑:功能,界面,兼容性,易用性,性能,安全。所以,我们接下来我们就从这几个方面来探讨以下:1、功能方面:对于需求实明确要求实现...
            1 1 1579
            分享
          • 如果碰到这种题目,我们可以从以下几个方面来分析:功能、界面/易用性、中断、网络、兼容性、安全性、性能测试功能测试1、朋友圈发送功能1)只发送文本考虑文本长度:1-1500字符(该数据为百度数据)、超出最大字符长度;考虑文本类型:纯中文、纯数字、纯字母、纯字符、纯表情(微信表情/手机自带表情)、混合类型、包含url链接;因为过长纯类型需要换行很容易出现超出边框问题,所以这里先考虑过长纯类型情况;文本是否支持复制粘贴;为空验证。2)只发送图片本地相册选择/拍摄;图片数量验证:1-9张图片、超出9张;图片格式验证:常见图片格式jpg、png(以实际微信需求支持的格式为准)、动态gif图片、不支持的图...
            11 14 3344
            分享
      • 51testing软件测试圈微信