作者:阿宝 

更新: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. Java缓存框架使用EhCache结合Spring AOP

    一.Ehcache简介     EhCache是一个纯Java的进程内缓存框架,具有如下特点:     1. 快速简单,非常容易和应用集成.     2.支持多种缓存策略 .     3. 缓存数据有 ...

  2. css3变换,过度,动画实现梦幻网页

    html和css3一出,整个互联网设计发生了颠覆性的改变,各大IT企业也推出了很多新颖的设计,比如百度浏览器的下载首页,fullpage设计风格加css动画让网页看起来很流畅舒服. css3的变换有3 ...

  3. linux基础(五)

    一.linux网络原理及基础设置 ifconfig 命令:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址. [root@bogon ~]# ifconfig ens33: flags=41 ...

  4. sqlserver提高篇续集

    七.数据完整性 1.概念:数据一致性和准确性. 分类:域完整性.实体完整性.引用完整性. 解析:域完整性也叫列完整性是指一个数据集对某个列是否有效和确定是否允许为空值.实体完整性也叫行完整性 要求所有 ...

  5. SQL Server系列之SQL Server 2016 中文企业版详细安装步骤(超多图)

    1. 下载地址 下载地址 :https://www.microsoft.com/en-us/server-cloud/products/sql-server-2016/ 官方技术文档:https:// ...

  6. struts加载spring

    为了在Struts中加载Spring context,需要在struts-config.xml文件中加入如下部分: <struts-config> <plug-in classNam ...

  7. Python蜕变-2017-4-23

    我的第一篇博客,这是试水练习.这次上的菜是Haporxy配置文件操作. <1> 上需求: 具体配置文件如下: global log 127.0.0.1 local2 daemon maxc ...

  8. 【Django】django 的request和response(转)

    当请求一个页面时,Django 把请求的 metadata 数据包装成一个 HttpRequest 对象,然后 Django 加载合适的 view 方法,把这个 HttpRequest 对象作为第一个 ...

  9. JS浏览器对象:window对象、History、Location对象、Screen对象

    一.JS浏览器对象-window 1.window对象 window对象是BOM的核心,window对象指当前的浏览器窗口 所有JavaScript全局对象.函数以及变量均自动成为window对象的成 ...

  10. hadoop系列三:mapreduce的使用(一)

    转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/7224772.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的 ...