Android MediaCodec硬编兼容性测试方案

2023-12-06 06:08

本文主要是介绍Android MediaCodec硬编兼容性测试方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:阿宝 
更新: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 timeclass 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分钟就足够了,比起自动脚本测试要省不少的费用 ^_^。

测试结果

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

IJKPlayer状态机图

参考

工具推荐
1.软件开发必备翻墙代理,低延迟(50ms),月费10元,详询(宝哥儿QQ1066690060)请自觉遵守国家法律法规

这篇关于Android MediaCodec硬编兼容性测试方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460712

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D