作者:阿宝 

更新: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. 取得system32文件夹下面文件的写入权限

    取得system32文件夹下面文件的写入权限 TAKEOWN /F %SystemRoot%\system32\riched32.dll ICACLS %SystemRoot%\system32\ri ...

  2. MySQL学习笔记(三)

    --回顾 字段类型(列类型):数值型,时间日期型和字符串类型 数值型:整型和小数型(浮点型和定点型) 时间日期型:datetime,date,time,timestamp,year 字符串类型:定长, ...

  3. C语言学习随笔

    前段时间我们学习了HTML,感觉自己不在状态,后来就开始怀疑自己的智商呢!现在C语言也到了尾声,在这20天的学习过程中,我没 有以前那么的傲娇了. 我开始慢慢去反省自己,自己究竟该如何去学习,都说勤能 ...

  4. Java 基本语法----变量

    变 量 变量的概念 内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先声明,后使用该区域的数据可以在同一类型范围内不断变化 定义变量的格式:数据类型 变量名 = ...

  5. sleep() 和 wait() 有什么区别?

    sleep()方法是使线程停止一段时间的方法.在sleep 时间间隔期满后,线程不一定立即恢复执行.这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非"醒来"的 ...

  6. codeforces 129B students and shoes

    https://vjudge.net/problem/CodeForces-129B 题意: 有n个学生,他们之间被鞋带缠住了.现在,老师首先把所有只与一个学生直接相连的学生找出来,让他们聚集到一起, ...

  7. 【学习笔记】C# 构造和析构

    构造方法 构造方法是一个特殊的方法,负责初始化对象 构造方法名必须和类名一致 构造方法没有返回值,但可以有参数,能够重载 构造方法可以不写,系统会自动为类添加一个无参的默认构造 如果将构造方法设置为P ...

  8. FTP服务器 Serv-u 环境搭建

    一.安装 *Windows 10 *Serv-u Windows-v15.1.2 *Mysql Mysql 5.7 安装成功后开始配置serv-u. 二.配置 1.新建域(test) 点击新建域,开始 ...

  9. ASP.NET MVC5 怒跨 Linux 平台

    安装CentOS 安装Mono #安装yum工具包 yum -y install yum-utils #通过rpm添加Mono源 rpm --import "http://keyserver ...

  10. 如何更换git托管

    有时候会遇到需要更换代码托管平台,从github,gitlab或者Bitbucket迁移到其它平台,过程中可能遇到不少问题,本文从是否保留历史提交记录两种需求出发,介绍一下基于git托管平台的迁移方法 ...