基于网页分析的可播放性测试

1,460 阅读8分钟
原文链接: tmq.qq.com

到周末了,有空啦,很多同学就会拿起手机,打开QQ浏览器,点开热门视频,弄几个视频来犒劳犒劳自己,放松一下,搜索个片子,打开,额,播放不了:

再试试看,中国好声音,神马??版权已到期:

再搜索看看,中国好声音打开后发现这只是个片段,只播放1分多钟,这不是坑人呢吗:

好容易找到个大片《变形金刚3》,刚看两分钟发现这是收费视频,汗!!!!!!

当然,上面只是举了一些特例,但作为一个测试人员,解决不可播视频是职责所在,因为这会影响用户使用,影响产品声誉,下面就来琢磨琢磨怎么解决这个问题,提升产品体验。

1.背景

视频能不能播放是影响用户留存的核心因素之一,经常收到了用户的反馈说视频播放不了、播放片子的不是正片、播放内容有要收费,看几分钟就看不了,针对这些问题,本来是想通过真机来测试,因为真机测试是最能从用户的角度反映出问题的,但考虑到一是已经有同事在做这块了,二是库里面上百万视频,真机测试的成本相对比较大一些,故只能另寻它路。

从浏览器发起请求入手,当打开一个视频的url,分析下所有请求,可以看看能播放的视频和不能播放的视频有没有什么区别呢,经过分析,发现确实有区别,能播放的视频和不能播放的视频在html源文件里和很多XHR的请求数据里有不一样的地方,既然是这样,那我们就可以通过这个方法来进行测试了。

2.数据选取

找到了测试方法并验证可行之后,接下来就是进行测试了,而选取什么数据进行测试呢,这是一个问题,因为我们要把好钢用在刀刃上,解决最紧急最重要的问题,对于后台热门视频专区来说,视频聚合了二十几个站点的数据,其中最大的就是3家:腾讯、搜狐、爱奇艺,占所有视频比重的50%以上,还有用户访问最多的页面,其实就是首页的内容,所以第一个小白鼠就是腾讯视频的数据质量了,拿腾讯视频开刀。

2.1分析网页

打开chrome浏览器,按下F12键,刷新测试网页,在network项,会看到很多请求,过滤到图片的请求,因为一般接口数据肯定不会是一个图片:

这一块的分析是比较痛苦的,除了不需要分析图片,其他的请求你都需要分析一遍,重点看一些XHR的请求和Scripts的请求,一般情况下你会在里面发现干货,找到就可以偷着乐了,腾讯视频目前找到的接口是(如果有腾讯视频的同仁,请别禁用接口啊,这里只是测试而已):

上面是完整的接口,经过清洗测试后访问如下链接就可以了:

http://sns.video.qq.com/tvideo/fcgi-bin/video?otype=json&callback=jQuery191022279346804134548_1404615403445&vid= e0015w6djh7

重点看上面有一个vid,也就是说不同的视频,唯一的标示就是vid(这里需要根据不同的测试站点去寻找),这个vid在当前播放url的源文件就能找到(有的url里面就直接带vid)。

抓到的数据如下:

这里面有很多信息,对可播放性测试来说,最重要的是播放时长 duration(当有多个时长时,需要把时长加起来得到一个总时长)

2.2测试流程如下

总结出一个完整的测试流程其实要花费很长时间,就像做了一个数据模型,需要不停的使用数据去鞭策、锤炼模型,这里也是一样,不断的用数据去证明,流程模型是没有问题的。

2.2.1测试方法:

1.    先用已知的badcase(badcase是指那些播放不了url、收费的url)去试探模型能否判断正确;

2.    小批量数据验证完毕,看看从总结出来的流程去判断有没有误判,若有误判需要调整测试方法,尽量避免误判;

3.    从用户反馈中以及历史数据中找尽可能多的badcase去验证流程判断的正确性;

4.    不断循环校验整个过程,直到能够判断出几乎100%不可播放视频为止;

从中也分析出不同种类的播放成功失败原因,对不同的失败原因进行标示,方便后面数据处理和统计:

0.时长正常 1.播放状态正常 2.收费视频  3.播放状态不正常  4.时长有误 5.时长为空 6.站点来源错误 7.返回码错误 8.页面跳转失败 9.页面跳转 10.时长为0 播放正常 11.抓数据接口出现问题 12.时长小于平均时长的百分比

2.2.2.流程图如下:

2.3编写脚本

编写脚本的语言这里选择Python来编写,一是因为python简洁明了、学习成本低、实现算法快;二是因为上一个项目也积累了不少基础; 所以妥妥的走起。

通过前面对测试流程的梳理,找到了区别正常视频和非正常视频的方法后,就开始编码了。

2.3.1脚本流程图如下:

2.3.2代码处理片段:

1)    读取文件:

2) 检查网页是否跳转,如果跳转,用python模拟网页的js跳转:

3)获取vid:

4)通过vid从接口请求数据并分析数据(如果有多个vid则每个vid都要请求一次,因为腾讯视频有的剧集会由多个vid拼接起来):

5)判断视频的正确性:

6) 获得剧集名称并判断名称的正确性(获得剧集名称后需要清洗下名称)

3.脚本上线

脚本验证完毕后,就可以交给开发同学准备线上运行了,7*24小时实时监控,发现异常url后及时下线,不要让用户看到不可播放的视频,需要注意以下事项:

1)    脚本测试完毕确认无误后,先到测试服务器跑一个礼拜;

2)   在脚本里必须加入一个监控功能,如果发现脚本大批量误判(一般url的失败率为10%左右,如果超过这个比例属于误判),立即停止脚本运行,并回滚数据库数据,以免造成不必要的损失;

3)  对关键接口访问频率的控制,最高频率不要太高,否则跑脚本服务器的IP很有可能会被禁掉(目前遇到访问sohu视频接口的频率过高会被禁止掉);

4) 尽量多找几个接口,有时被测站点的接口失效,会导致脚本大批量误判(目前发现爱奇艺的接口有时会停止掉,不让访问),最好是多接口都加到脚本里,这样当一个接口被禁止掉,不会影响脚本正常运行;

4.测试结果

通过分析网页的请求来判断视频的可播放性效率高,速度也比较快,下面通过上述描述的测试方法已经取得的成果,附上测试报告一份。

目前已覆盖 直播首页热门视频爱奇艺站点视频搜狐站点视频腾讯站点视频,测试稳定,测试结果已接入开发同学的视频屏蔽库,为屏蔽不可播放视频提供数据依据。

【测试方法】

测试环境:在PC机上编写脚本,通过分析html静态页面和接口数据来测试各站点视频URL源的可播放性;
测试内容:主要是对上线数据库抽出按热度排行的视频源网址进行可播放性测试;
【测试结论】

1.经过外包验证,测试结果正确性很高,总体误判率低于1/1000,测试结果可用于直接快速屏蔽不可播放视频;

2.不可播放视频占总体视频的10.52%,屏蔽这些劣质源可提升视频内容的质量,使得视频不可播放率降低到1%以下,预计能有效降低用户反馈不可播放问题;

3.通过脚本测试可播放性的速度比较快,可达 1.7万视频/小时,可用来测试全量视频和增量视频,有效节省人力;

【详细结果】

测试结果汇总

·        数据分布

备注:

    不可播放视频:视频页面跳转失败、链接失效,版权到期,视频已下线,时长不正确(电影花絮,电视剧花絮,综艺片段)等;

    收费视频:需要注册,有会员资格才能观看的视频;

·        各站点成功失败率占比

·        各站点视频不可播放率和总体平均值

·        收益:根据测试结果屏蔽不可播放剧集,视频不可播放率将大大降低,如下图: