需求:app發版時,需要發佈60多個渠道包,爲保證渠道包質量,我們單位的工作流程裏包含一個抽測的環節,對即將發佈的幾十個渠道包隨機抽取10個左右進行隨機測試,主要看看安裝,打開是否正常,這很耗費人力。爲解放雙手,寫了一個可以應用的自動安裝腳本,以後就用它了。
ps:這是我學習過程的一個嘗試,歡迎討論指正。
實現方式:appium+python(最近正好在看這一塊),環境搭建網上一搜一大堆。
思路:
1、將apk們存放在本地;
2、獲取apk們的名字,存放到列表中;
3、循環讀取apk們的路徑,將apk們安裝到手機中,並打開,截圖,卸載,再進行下一個app的安裝,直到全部安裝完畢;
涉及知識點:
1、python獲取某一目錄下的所有文件名稱,這裏用來獲取某一文件夾下的所有apk的名稱,後邊用來循環遍歷:os.listdir(path)
2、appium中將本地包安裝到手機中 driver.install_app(path)
3、安裝包後打開安裝包:driver.install_app(path) 之後,使用driver.start_activity(包名,activity)啓動。注意這裏使用driver.launch_app()不行,啓動不了。我也不知道爲啥,有人知道嗎?
4、截圖 driver.get_screenshot_as_file(),以安裝包名+首頁+.png命名,這樣就能區分開各個不同安裝包的頁面
5、卸載app:driver.remove_app(packagename)
擴展:這裏其實還可以多做一些擴展,比如安裝包之後,啓動做一些點擊操作,這個我後續擴展
遺留問題:安裝apk時會有權限彈窗彈出詢問是否允許安裝,這個問題暫時還沒有解決。
我的目錄結構如下圖,images用來存放各個安裝包的截圖,packages用來存放要循環安裝遍歷的安裝包們:
執行完畢後打印的消息如下:
下面來看我的代碼:
# coding=utf-8 from appium import webdriver import os import time #設置存放安裝包的路徑 packages = os.listdir(os.getcwd() + "\\packages") #設置存放圖片的路徑 image_path = os.getcwd() + "\\images\\" #初始化測試平臺 desired_caps = { 'platformName': 'Android', 'deviceName': '868e033d', # 'deviceName': 'LE67A06230436549', 'platformVersion': '9', 'app': "C:\\Users\\shimei\\Desktop\\tiebaobei_channel_aiqiyi_release.apk", # apk包名 # 'appPackage': 'com.cehome.tiebaobei', # # apk的launcherActivity # 'appActivity': 'com.cehome.tiebaobei.activity.MainEntranceActivity' } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(20) driver.remove_app("com.cehome.tiebaobei") #循環讀取packages中的數據,將每個安裝包安裝至設備中,並打開、截圖、卸載 for pag in packages: try: #循環獲取到安裝包的位置 apk_path = os.getcwd() + "\\packages\\" + pag driver.install_app(apk_path) driver.start_activity("com.cehome.tiebaobei","com.cehome.tiebaobei.activity.MainEntranceActivity") # driver.launch_app() time.sleep(20) driver.get_screenshot_as_file(image_path+ pag + "首頁.png") #卸載二手機app driver.remove_app("com.cehome.tiebaobei") except Exception as e: print("============報錯================") print("%s安裝包出錯" %pag) print("具體錯誤信息:%s" %format(e)) else: print("%s包測試完畢!" %pag)