做Android手機(jī)/電視機(jī)/車載系統(tǒng)穩(wěn)定性測(cè)試,
需要進(jìn)行100次的系統(tǒng)重啟,確保啟動(dòng)過程中,不出現(xiàn)卡死起不來,
或者起來后Home界面異常等情況。
還有涉及首次使用開機(jī)激活界面的測(cè)試,要確保每次系統(tǒng)重啟,
只要設(shè)備沒激活,就得每次都彈出激活界面。
準(zhǔn)備階段
- adb reboot 或者adb shell reboot 命令, 可以實(shí)現(xiàn)手機(jī)軟重啟
- adb wait-for-device可以實(shí)現(xiàn)等待,等待重啟后的手機(jī)重新adb連接
- os.system可以調(diào)用以上 adb 命令行工具
- 100次,需要一個(gè)for循環(huán)語句。
Python批處理腳本形式
Python只需要用os.system()函數(shù),
即可快速實(shí)現(xiàn)調(diào)用各類命令行命令。
# coding=utf-8
import os
for i in range(1, 101):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系統(tǒng)第%s輪軟重啟中...請(qǐng)稍候!" % i)
os.system("pause")
os.system("pause"),建議盡量加上,其含義是暫停程序執(zhí)行,
等待用戶查看腳本執(zhí)行結(jié)果,避免運(yùn)行完畢后直接自動(dòng)關(guān)閉腳本執(zhí)行cmd窗口。
Python面向過程函數(shù)形式
找到可以封裝成一個(gè)函數(shù)塊的小代碼塊兒, 用函數(shù)封裝起來.
函數(shù)的命名一般建議用"動(dòng)詞", 所以我們命名為: "reboot",
封裝好后, reboot()函數(shù)調(diào)用即可。
# coding=utf-8
import os
def reboot(): # 封裝
for i in range(1, 101):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系統(tǒng)第%s輪軟重啟中...請(qǐng)稍候!" % i)
reboot() # 調(diào)用
os.system("pause")
以上是最簡(jiǎn)單的函數(shù),即將代碼塊打個(gè)包,用一個(gè)函數(shù)封裝起來。
另外一種形式如下:
# coding=utf-8
import os
def reboot(cycle): # 封裝
for i in range(1, cycle 1):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系統(tǒng)第%s輪軟重啟中...請(qǐng)稍候!" % i)
reboot(100) # 調(diào)用并傳參
os.system("pause")
以上這種是更高端的,帶參數(shù)輸入的函數(shù)形式的函數(shù),
其可以控制重啟次數(shù),想重啟100次,直接傳參100即可。
類名一般建議用"名詞", 所以我們命名為"Rebooter",
代表重啟器, 且一般要駝峰式(首字母大寫)來規(guī)范類的命名。
養(yǎng)成良好的類的初始化(__init__)的習(xí)慣,
初始化過程中, 可以pass(什么都不做)。
這個(gè)Rebooter類, 目前只需要一個(gè)重啟的函數(shù)(動(dòng)作功能)就足夠了,
函數(shù)的命名一般建議用"動(dòng)詞", 所以我們命名為: "reboot" 。
類是一個(gè)抽象的事物, 必須實(shí)例化成具體的對(duì)象后,
才能進(jìn)行調(diào)用, 所以我們實(shí)例化并命名成了r_obj, 表明是一個(gè)對(duì)象.
實(shí)例化成具體對(duì)象后, 對(duì)象就可以調(diào)用reboot這個(gè)函數(shù)了。
# coding=utf-8
import os
class Rebooter():
def __init__(self):
pass
def reboot(self, cycle):
for i in range(1, cycle):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系統(tǒng)第%s輪軟重啟中...請(qǐng)稍候!" % i)
r_obj = Rebooter() # 實(shí)例化一個(gè)對(duì)象
r_obj.reboot(100) # 用對(duì)象來調(diào)用函數(shù)。
os.system("pause")
代碼運(yùn)行方式
確保Android設(shè)備,通過USB與電腦連接了,
以上代碼的3種實(shí)現(xiàn)形式都可以直接運(yùn)行,
比如保存為adb_reboot_100.py并放在桌面,
每次需要截圖的時(shí)候,雙擊運(yùn)行adb_reboot_100.py,
就可以開始執(zhí)行腳本了。
腳本優(yōu)化方向
實(shí)際自動(dòng)化測(cè)試中,肯定不止這么簡(jiǎn)單,還需要考慮:
- 設(shè)備找到后,要考慮用demsg命令截取系統(tǒng)啟動(dòng)的kernel log
- 系統(tǒng)起來后,還需要考慮adb logcat截取App層的log。
- 系統(tǒng)起來后,還需要考慮adb shell screencap截取Home界面的圖片。
- 每一輪都需要命名一個(gè)文件夾,里邊的log的命名都需要有時(shí)間戳等。
- 軟重啟是指通過命令實(shí)現(xiàn)重啟,
硬重啟是通過摳電池或者拔掉切斷電源后再上電,實(shí)現(xiàn)斷電后重啟。
如何用Python實(shí)現(xiàn)硬重啟呢? 后續(xù)課程會(huì)講到。
更多更好的原創(chuàng)文章,請(qǐng)?jiān)L問官方網(wǎng)站:www.
自拍教程(自動(dòng)化測(cè)試Python教程,武散人編著)
原文鏈接:https://www./#/detail?id=d42a3e82a8814691839042ba3984b26a
也可關(guān)注“武散人”微信訂閱號(hào),隨時(shí)接受文章推送。
來源:https://www./content-1-663951.html
|