天天看點

安卓自動化測試添加用例執行回放

腦洞

最近腦洞有點兒大,最開始是想給自己的測試平台添加手動執行用例的功能,又覺得沒有一個很好的展示,是以想着要實時展示手機上的内容,輸出到web頁面,但是覺得有點難啊。

想了一下,還是換個方式吧,每個case執行完畢,都可以看到實時的錄像。這樣也許可行,哈哈哈!

準備條件

  • 一台安卓機
  • appium環境

基礎知識

  • adb指令

adb大家應該很熟悉,簡單的說就是個連接配接手機和電腦的工具,哈哈哈,簡單粗暴。

我們常用的adb指令有:

  • adb devices

    檢視已經連接配接上的安卓裝置

  • adb logcat

    檢視安卓日志

具體的大家可以自己去百度下。

不過這裡要講的是adb錄屏的指令~

我們連上安卓手機後, 在cmd視窗輸入指令:

adb shell screenrecord /sdcard/test.mp4

安卓自動化測試添加用例執行回放

這時候其實手機上的内容已經開始錄制了~

我為了偷懶,就照搬這位兄弟的部落格了~~

!傳送門在此
安卓自動化測試添加用例執行回放

注意

這裡的adb指令開始錄制以後,不管是否正常結束,都會儲存檔案,是以我們可以把錄制時間放長一點,到時候關閉就好了。

思路

因為用例是以一個class為機關的,就算這個class有很多個test開頭的測試用例函數,是以我這裡是以一個class類為機關存儲視訊的。

第一步

用例在setUp的時候,開啟錄制~

第二步

用例在tearDown的時候, 結束錄制~

第三步

用例結束錄制以後,使用adb指令将mp4檔案拉取到本地硬碟上,供web頁面展示,或者将本地檔案放入測試報告裡作為超連結通路。(但是此種方法不被Chrome浏覽器支援)

開始勞作

import unittest
from time import sleep


class TestCase(unittest.TestCase)

    @classmethod
    def setUpClass(cls):
        print("[{}]--正在執行登陸初始化操作: {}".format(datetime.now().strftime(
            "%Y-%m-%d %H:%M:%S"), cls.__name__))
        # 錄屏
        cls.replay = subprocess.Popen(r"adb shell screenrecord "
                             r"/sdcard/{}.mp4 --time-limit 600".format(cls.__name__),
                             creationflags=subprocess.CREATE_NEW_CONSOLE)

    def test_01(self):
        pass    # 這裡其實最好多一些操作,不然視訊一下就結束了,看不到效果

    @classmethod
    def tearDownClass(cls):
        # 終止錄像
        cls.replay.terminate()
        # 這裡我的cls.conf是個配置檔案, 擷取到錄像儲存的路徑然後mp4的名字是以用例class命名的
        replay_path = os.path.join(cls.conf.get_value("replay_path"), "{}.mp4".format(cls.__name__))
        sleep(2)
        # 這裡的pull是指從sdcard擷取檔案到本地硬碟,
        subprocess.Popen(r"adb pull /sdcard/{}.mp4 {}".format(cls.__name__, replay_path),
                             creationflags=subprocess.CREATE_NEW_CONSOLE)
        # 等待視訊拉取完畢
        sleep(6)
           

注意:

  • 第一個sleep

    為了等用例停止錄制後有個緩沖時間~

  • 第二個sleep

    為了pull的時候等檔案完全pull完畢,不然下一個case開始的時候又會調用adb,這個pull還沒結束,第二個adb又開始了,導緻拉取的檔案異常,無法播放。

  • subprocess

    這個是Python調用控制台指令的方法,後面的CREATE_NEW_CONSOLE是新起一個指令視窗。

優化:

  • sleep

應該有更好的辦法解決, 暫時還沒有考慮到更好的辦法~

  • 手機垃圾檔案清理

暫時還沒有做

繼續閱讀