Android手機測試, 涉及照相機(Camera)應用程式的穩定性測試的用例, 需要涉及100張照片的拍照自動化測試。 準備階段 1. 先清理老照片,照片一般存放在/scard/DCIM目錄下 2. adb shell am start + 相機的Activity 可以打開相機App 3. adb ...
Android手機測試,
涉及照相機(Camera)應用程式的穩定性測試的用例,
需要涉及100張照片的拍照自動化測試。
準備階段
- 先清理老照片,照片一般存放在/scard/DCIM目錄下
- adb shell am start + 相機的Activity 可以打開相機App
- adb shell input tap 坐標可以模擬點擊拍照按鈕
- 坐標可以通過設置-》開發者選項-》打開指針位置(坐標),
可以查看拍照按鈕的具體坐標(x,y)值
如何查看應用程式的包名
應用程式的包名(Package Name), 作為應用的唯一標識, 代表了一個apk。
包名用於應用程式管理(安裝,卸載), 如何看包名呢?
以魅族Note5手機為例:
相關命令 | 釋義 |
---|---|
pm list package |grep camera | 列出本手機里所有已經安裝了應用程式包名, 過濾後只顯示涉及camera相關的包名 |
dumpsys package com.meizu.media.camera |grep Activity | 查看com.meizu.media.camera軟體包的各類信息, 過濾後只顯示與Activity相關的信息 |
Python批處理腳本模式
# coding=utf-8
import os
import time
# 清除舊的照片
os.system("adb shell rm -rf /sdcard/DCIM/*")
# 打開相機
os.system("adb shell am start com.meizu.media.camera/.CameraActivity")
# 迴圈點擊拍照按鈕100次
for i in range(1, 101):
os.system("adb shell input tap 551 1773") # 點擊相機拍照按鈕的坐標
print("第%d張照片已經拍照完成"%i)
time.sleep(1) # 拍完一張後,間隔1s,再拍下一張
# 導出剛剛拍的100張照片, 再由測試人員手動Check相片質量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep))
os.system("pause")
os.getcwd()是獲取當前python腳本的當前路徑,
os.sep 是一個路徑分隔符, 建議大家常用,
可以很好的適配不同的操作系統路徑分隔符,
如果是在Windows系統,代表一個\字元 ; 如果是Linux系統,代表一個/字元。
Python面向過程函數形式
只需要一個拍照的函數camera_capture, 可以傳拍多少輪(張)照片。
# coding=utf-8
import os
import time
def camera_capture(cycle):
# 清除舊的照片
os.system("adb shell rm -rf /sdcard/DCIM/*")
# 打開相機
os.system("adb shell am start com.meizu.media.camera/.CameraActivity")
# 迴圈點擊拍照按鈕100次
for i in range(1, cycle+1):
os.system("adb shell input tap 551 1773") # 點擊相機拍照按鈕的坐標
print("第%d張照片已經拍照完成"%i)
time.sleep(1) # 拍完一張後,間隔1s,再拍下一張
# 導出剛剛拍的100張照片, 再由測試人員手動Check相片質量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep))
camera_capture(100)
os.system("pause")
Python面向對象類形式
- 以"萬物皆可歸類"的思想, 先抽象化出一個類來,
類名一般建議用"名詞", 所以我們命名為"CameraCapturer",
代表屏幕捕捉器, 且一般要駝峰式(首字母大寫)來規範類的命名.
- 養成良好的類的初始化(__init__)的習慣,
初始化過程中, 可以pass(什麼都不做) - 這個CameraCapturer類, 目前只需要一個拍照函數(動作功能)就足夠了,
函數的命名一般建議用"動詞", 所以我們命名為: "camera_capture" . - 類是一個抽象的事物, 必須實例化成具體的對象後,
才能進行調用, 所以我們實例化並命名成了c_obj, 表明是一個對象. - 實例化成具體對象後, 對象就可以調用camera_capture這個函數了.
# coding=utf-8
import os
import time
class CameraCapturer():
def __init__(self):
pass
def camera_capture(self, cycle):
# 清除舊的照片
os.system("adb shell rm -rf /sdcard/DCIM/*")
# 打開相機
os.system("adb shell am start com.meizu.media.camera/.CameraActivity")
# 迴圈點擊拍照按鈕100次
for i in range(1, cycle + 1):
os.system("adb shell input tap 551 1773") # 點擊相機拍照按鈕的坐標
print("第%d張照片已經拍照完" % i)
time.sleep(1) # 拍完一張後,間隔1s,再拍下一張
# 導出剛剛拍的100張照片, 再由測試人員手動Check相片質量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep))
if __name__ == '__main__':
c_obj = CameraCapturer()
c_obj.camera_capture(100)
os.system("pause")
代碼運行方式
確保Android車機設備通過USB線與電腦連接了,adb設備有效連接,
以上代碼的3種實現形式都可以直接運行,比如保存為take_photo.py並放在桌面,
可以考慮python take_photo.py 運行或者直接雙擊運行。
腳本優化方向
- 可以考慮自動做圖片對比,如果發現圖片在連續拍攝同意物體的過程中,
同一畫面,不同照片像素大小相差太大(或者色差相差太大),
則需要提示異常讓測試做檢測, 多媒體測試相關案例會介紹如何實現。
- 拍照過程中,考慮下把logcat log導出來,因為可能拍照過程中,出現了bug,
有log才能更好地跟蹤Bug。
包名與進程名(Process Name)不同,進程名用於進程管理(創建,銷毀),
應用程式的包名(Package Name), 作為應用的唯一標識,
代表了一個apk。包名用於應用程式管理(安裝,卸載)。
後續性能監控之類的,都是用進程進行進程級別的監控,
後續monkey之類的,都是用包名來進行指定Monkey的App。
更多更好的原創文章,請訪問官方網站:www.zipython.com
自拍教程(自動化測試Python教程,武散人編著)
原文鏈接:https://www.zipython.com/#/detail?id=609bf757abd548e5aca2a07f2c3a55f3
也可關註“武散人”微信訂閱號,隨時接受文章推送。