天天看點

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 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()
        self.driver.find_element_by_id("com.zhibo.publisher:id/start").click()

        # 等待25秒,停止直播
        # 注意: 測試架構有BUG,逾時不要超過30秒,否則會出現腳本錯誤
        time.sleep()
        self.driver.find_element_by_id("com.zhibo.publisher:id/stop").click()

        # 等待6秒,讓連接配接斷開,結束
        time.sleep()

    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.軟體開發必備翻牆代理,低延遲(50ms),月費10元,詳詢(寶哥兒QQ1066690060)請自覺遵守國家法律法規