作者:阿宝 

更新:2016-08-15 

来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibility-testing/index.html) 

简述

Android系统在短时间内大放异彩,得益于其源码的开放性;也正因其开放性,各厂商自由定制,导致了系统碎片化严重。Android硬件编码的MediaCodec方案便是著名的难题之一。

关于MediaCodec是什么,怎么用,官网已经进行了详细的讲解,这里不再多述。

下面重点讲解如何测试MediaCodec的硬编兼容性。

国内现状

目前,针对于Android的兼容性测试,常见两种解决方式,一种是购买足够数量的测试机,来满足机型覆盖,这一种我们暂且称为自有解决方案;另一种是租用测试机或者外包测试,我们称为商用解决方案;下面分别讲解。

自有解决方案

这种解决方案多见于大公司,这些公司资金充足,对数据的安全性有一定的要求,整体流程的依赖也比较多,所以需要在内部完成测试工作;要完成这些,首先需要购买足够的测试机型,为了覆盖足够多的机型,TOP200是必不可少的,费用在十万级别;其次,为了提高效率减少人工错误,需要一套系统来管理这些机器;然后是将测试用例转化成测试脚本,脚本依次在所有机型上运行测试,并输出测试报告。

商用测试方案

这种解决方案多见于中小型公司,由于资源的短缺(可能是资金,人力,时间等),不可能在内部完成测试工作,通常情况下,他们会购买少量的机型,用于日常开发测试,发布版本前付费找专业公司测试;

国内测试方案提供商

iTestIn是最早介入测试解决方案的公司之一,在业内也是做的比较好的,算是国内第一代测试公司;也许是当时一家独大,这家公司的进步是渐渐的慢了,主要接中型公司的单子,对小众用户是越来越不关心了,近两年已经明显的落后了。

第二代测试公司,崛起于国内具有的大型移动业务的公司,如百度,阿里,腾讯,纷纷成立了自家的移动云测试中心,在满足了内部的需求后,封装成新业务开放出来商用。

这些公司均提供针对于大公司的一体化方案,也有针对中小用户的通用测试方案。

为了称呼方便,在下文中,阿里云测移动质量中心统一简称阿里云测,百度移动云测试中心统一简称百度云测,腾讯优测统一简称腾讯云测。

测试方案选择

测试目标

测试市面上TOP200机型对MediaCodec硬件编码的兼容性,主要针对常见的H.264图像压缩算法,其他编码原理相同,就不逐个描述了。

机型挑选

Talkingdata的移动观象台提供TOP70机型,按周/月/季度3种单位统计,可以作为参考之一,链接地址

iTestIn提供TOP500机型,可以作为参考之一,链接地址

腾讯云测提供TOP50,TOP100,TOP200机型,符合我们的需求,链接地址 (注:此链接需要登录方可查看)

百度云测和阿里云测也有TOP机型数据,只是需要在付费使用之后,才能拿到,暂且不考虑;

所以我们选用腾讯云测的TOP200机型作为目标机型,整理《安卓MediaCodec硬件编码兼容性测试》文档。

测试方法选择

测试方法分为自动化测试脚本和人工测试两种。

自动测试脚本

自动测试脚本又分为私有脚本和开源脚本两种。

私有脚本

私有脚本,顾名思义,即自家用的脚本,在别家是用不了的。

这里涉及到脚本录制工具的概念,简单做一下描述,脚本录制工具,是一个应用,一般安装在PC或手机上,用于录制APP在手机上的操作动作,录制完成后,生成脚本,可以使用此脚本重复在多台测试机上进行测试,以减少人力成本和操作误差;

iTestIn,阿里云测,腾讯云测,3家均提供脚本录制工具,录制的脚本仅能在自家平台使用,这里不推荐使用,略过;

开源脚本

开源脚本,即由开源测试框架生成的脚本,语言支持范围广,通用性好。

目前市场上常见的测试框架有Appium和Robotium,Appium测试框架,适用于简单的界面功能测试;Robotium测试框架,除了界面功能测试之外,还提供了更多的测试功能,这里就不一一描述了;这两种框架均支持多种开发语言编写测试脚本,且通用性好,推荐使用。

阿里云测,百度云测均支持这两种测试框架,且提供了脚本示例,阿里云测Appium脚本示例, 阿里云测Robotium脚本示例, 百度云测Appium脚本示例, 百度云测Robotium脚本示例

这两种测试框架的脚本编写非常简单,且各家已经提供了示例程序,稍作修改即可使用,普通的小程序数行代码就可以完成测试了。

测试平台选择

自动脚本测试

百度云测默认可选的只有10款热门机型,费用每款10元,更多机型需要联系百度开通;

阿里云测默认可选的有200款机型,费用每款30元,符合我们这次测试的目标;

人工测试

iTestIn,阿里云测,腾讯云测,百度云测,4家均提供了远程真机调试服务:

iTestIn提供了475款可用的远程真机,费用每分钟1元,链接地址

腾讯云测提供了200款可用的远程真机,费用每分钟1元,目前首次激活送100分钟,链接地址

阿里云测提供了32款可用的远程真机,费用未知,链接地址

百度移云测提供了69款可用的远程真机,费用未知,目前处于测试阶段全部机型免费,链接地址

根据上面的信息,腾讯云测是最合适的人工测试平台;

测试流程

此处我们以直播行业常见的主播推流工具APP来作为测试对象,假设APP的包名为 com.zhibo.publisher,界面上只有两个按钮,ID分别为 @+id/start, @+id/stop,业务逻辑为,点击start按钮,开始直播推流到指定的流媒体服务器,点击stop按钮,停止直播。

自动测试脚本

这里以阿里云测的Python脚本作为示例讲解如何进行自动化测试,入口链接地址

首先,下载阿里云测的示例脚本appium_demo.zip,我们只需要对其中的 main.py 文件作简单的修改(6行代码),修改后如下:

# -*- coding: utf-8 -*-
from appium import webdriver
import desired_capabilities
from unittest import TestCase
from selenium.webdriver.common.by import By
import unittest
import time class MtsTest(TestCase): def setUp(self):
desired_caps = desired_capabilities.get_desired_capabilities()
uri = desired_capabilities.get_uri()
self.driver = webdriver.Remote(uri, desired_caps) def test_searchbox(self):
# 等待2秒,开启直播
time.sleep(2)
self.driver.find_element_by_id("com.zhibo.publisher:id/start").click() # 等待25秒,停止直播
# 注意: 测试框架有BUG,超时不要超过30秒,否则会出现脚本错误
time.sleep(25)
self.driver.find_element_by_id("com.zhibo.publisher:id/stop").click() # 等待6秒,让连接断开,结束
time.sleep(6) def tearDown(self):
self.driver.quit()

然后将main.py文件打成zip包,假设包名为main.py.zip,在阿里云测脚本测试页面提交 publisher.apk 和 main.py.zip ,指定需要测试的机型,即可开始自动化测试,然后坐等结果就好了。

人工测试

这里选择腾讯云测平台,来进行人工测试,入口链接地址

首先,挑选指定的测试机型,打开远程控制页面,然后上传要测试的APP,这里为publisher.apk,安装完成后会自动打开APP,这里手动操作开启直播,停止直播即可,和在普通手机上操作上一样的,完成后记录操作结果;如此重复200次即可;

根据笔者的经验,手动测试示例程序publisher,每款机型1分钟左右,200款机型测下来220分钟就足够了,比起自动脚本测试要省不少的费用 _

测试结果

最后,奉上某主播推流工具的测试结果

参考

Android MediaCodec硬编兼容性测试方案的更多相关文章

  1. android MediaCodec 音频编解码的实现——转码

    原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...

  2. APP兼容性测试(三)测试方案设计

    1.  背景 App的兼容性问题可能会导致流失潜在的客户,为了尽量减少因兼容性问题导致的同类问题,进一步提高产品的质量,提升用户体验,所以进行兼容性测试,尽可能多的保证更多的用户都可以正常使用app. ...

  3. 手机APP兼容性测试

    兼容性测试方案 兼容性问题 屏幕分辨率兼容性问题 软件(iOS和Android系统版本及不同厂家的定制ROM)兼容性问题 硬件(不同的CPU.内存大小等等)兼容性问题 网络(2G/3G/4G/WIFI ...

  4. 手机APP测试如何进行兼容性测试?

    Android App兼容性测试是一个比较重要的App评价内容,实际上兼容性测试不仅仅和测试人员相关,在开发阶段就应当着重考虑,因为兼容性问题是除了实现App本身要求的功能后,必须要关注.而且至关重要 ...

  5. ffmpeg mediacodec 硬解初探

    ffmpeg mediacodec 硬解初探 1编译: ffmpeg自3.1版本加入了android mediacodec硬解支持,解码器如图 硬件加速器如图(还不清楚硬件加速器的功能) 编译带h26 ...

  6. 安卓手机APP兼容性测试如何有效进行?

    Android App兼容性测试是一个比较重要的App评价内容,实际上兼容性测试不仅仅和测试人员相关,在开发阶段就应当着重考虑,因为兼容性问题是除了实现App本身要求的功能后,必须要关注.而且至关重要 ...

  7. MediaCodec在Android视频硬解码组件的应用

    https://yq.aliyun.com/articles/632892 云栖社区> 博客列表> 正文 MediaCodec在Android视频硬解码组件的应用   cheenc 201 ...

  8. android 兼容性测试 CTS 测试过程(实践测试验证通过)

    source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...

  9. 【转】android 兼容性测试 CTS 测试过程(实践测试验证通过)

    原文网址:http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明,官方 ...

随机推荐

  1. 虚函数&多态

    对于经常被问到的虚函数和多态的问题,发现百度百科回答得十分详细,所以自己在百度百科上的解释进行总结 一.虚函数 (1)虚函数简介:在某基类中声明为virtual并在一个或者多个派生类中被重新定义的成员 ...

  2. Oracle索引批量重置笔记

    ---单个索引重置语句 alter index indexname  rebuild; ---查询数据索引对象语句 select *  from user_indexes; ------将数据库的索引 ...

  3. ubuntu(linux)新装系统恢复备份后无法进入系统问题的解决

    1. 引子: 可以跳过直接看3.~5. 我们可能会遇到这样的状况,从ubuntu转到别的系统,兜兜转转又回到了ubuntu. 比如说: Fedora升级后一大堆BUG,与java有关的软件渲染都糟糕的 ...

  4. 新浪微博的OAuth2认证过程

    1. 创建应用 在weibo.com上申请一个应用,获取app key和app secret, 填写redirect uri 2. 获取code 通过在浏览器访问 https://api.weibo. ...

  5. ASP.NET MVC HttpPostedFileBase文件上传

    HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存 文件传输信息封装 /// <summary> /// 文件生成方式 /// </summ ...

  6. maven依赖jar包更新,业务jar需同步更新(业务jar依赖API)

    背景: 环境出现问题,定位为依赖jar缺失,修改工程pom文件补充依赖jar. 更新要点说明: 依赖jar,更新提交 业务jar,也需更新提交:maven构建会把依赖jar引用进去,更新环境如果单独更 ...

  7. 【SignalR学习系列】3. SignalR实时高刷新率程序

    创建项目 创建一个空的 Web 项目,并在 Nuget 里面添加 SignalR,jQuery UI 包,添加以后项目里包含了 jQuery,jQuery.UI ,和 SignalR 的脚本. 创建基 ...

  8. 【echart】学习笔记

    1.  x 轴 y轴 的max  min 只能为5的倍数 2.

  9. hadoop环境中误删除tmp文件夹的恢复

    情景描述: 种种原因,不小心把系统根目录中的tmp文件删除了!发现jps之后看不到 master主机上面的namenode,resourcemanager,secondarynamenode三个进程了 ...

  10. ubuntu下处理mysql无法启动故障一例

    故障现象: mysql无法启动 1: dmesg |grep mysql [101353.820000] init: mysql post-start process (9077) terminate ...