Android終端(車載,手機)等,
需要考慮進行隨意進行各類按鍵(車載方向盤按鍵,手機硬按鍵)的操作,
測驗系統對按鍵事件的回應穩定性,一般測驗2小時,
準備階段
一般是用adb shell input keyevent + keyCode 來模擬按鍵事件,
比如adb shell input keyevent 24 可以模擬“音量加鍵”,
以下是比較常用的幾個按鍵的鍵值表,
| KeyCode | 釋義 |
|---|---|
| 3 | Home鍵 |
| 4 | 回傳鍵 |
| 5 | 電話撥號鍵 |
| 24 | 音量加鍵 |
| 25 | 音量減鍵 |
| 26 | 電源鍵 |
| 27 | 照相機啟動鍵 |
| 87 | 多媒體下一曲鍵 |
| 88 | 多媒體上一曲鍵 |
| 91 | 音量靜音鍵 |
Python批處理腳本形式
批量處理腳本的特點是:批量順序執行陳述句
# coding=utf-8
import os
import time
import random
timeout = 7200 # 2小時(7200s)
now_time = time.time() # 獲取當前時間戳,并保存到一個變數
keycode_dict = {3: "HOME鍵", 4: "回傳鍵", 5: "電話撥號鍵", 24: "音量加鍵",
25: "音量減鍵", 26: "電源鍵", 27: "照相機啟動鍵", 87: "下一曲鍵",
88: "上一曲鍵", 91: "靜音鍵"}
# 回圈獲取當前時間,與now_time變數做時間戳做減法
while time.time() - now_time <= timeout:
# 隨機選擇字典的某個“鍵”
keycode = random.choice(list(keycode_dict.keys()))
command = "adb shell input keyevent %s" % keycode
print("成功按下了%s" % keycode_dict[keycode])
# os.system(command)
time.sleep(0.5) # 間隔0.5s,再進行下一次按鍵模擬
print("已經進行了 %d 秒..., 一共需要測驗 %d 秒" % (time.time() - now_time, timeout))
os.system("pause")
Python面向程序函式形式
看哪些代碼塊,可以組成一個具體的功能,
這個案例,可以有一個輸入按鍵事件的功能函式,input_keyevent(),
這個函式可以接收引數輸入,可以指定輸入多久的按鍵事件,
# coding=utf-8
import os
import time
import random
def input_keyevent(timeout):
now_time = time.time() # 獲取當前時間戳,并保存到一個變數
keycode_dict = {3: "HOME鍵", 4: "回傳鍵", 5: "電話撥號鍵", 24: "音量加鍵",
25: "音量減鍵", 26: "電源鍵", 27: "照相機啟動鍵", 87: "下一曲鍵",
88: "上一曲鍵", 91: "靜音鍵"}
# 回圈獲取當前時間,與now_time變數做時間戳做減法
while time.time() - now_time <= timeout:
# 隨機選擇字典的某個“鍵”
keycode = random.choice(list(keycode_dict.keys()))
command = "adb shell input keyevent %s" % keycode
print("成功按下了%s" % keycode_dict[keycode])
# os.system(command)
time.sleep(0.5) # 間隔0.5s,再進行下一次按鍵模擬
print("已經進行了 %d 秒..., 一共需要測驗 %d 秒" % (time.time() - now_time, timeout))
input_keyevent(7200)
os.system("pause")
Python面向物件類形式
- 以"萬物皆可歸類"的思想, 先抽象化出一個類來,
類名一般建議用"名詞", 所以我們命名為"KeyeventInputter",
代表按鍵事件輸入器, 且一般要駝峰式(首字母大寫)來規范類的命名, - 養成良好的類的初始化(__init__)的習慣,
初始化程序中, 可以定義屬性,self.keycode_dict, - 定義方法(函式), input_keyevent函式,
- 類是一個抽象的事物, 必須實體化成具體的物件后,
才能進行呼叫, 所以我們實體化并命名成了k_obj, 表明是一個物件, - 實體化成具體物件后, 物件就可以呼叫input_keyevent這個函式了,
# coding=utf-8
import os
import time
import random
class KeyeventInputter():
def __init__(self):
self.keycode_dict = {3: "HOME鍵", 4: "回傳鍵", 5: "電話撥號鍵", 24: "音量加鍵",
25: "音量減鍵", 26: "電源鍵", 27: "照相機啟動鍵", 87: "下一曲鍵",
88: "上一曲鍵", 91: "靜音鍵"}
def input_keyevent(self, timeout):
now_time = time.time() # 獲取當前時間戳,并保存到一個變數
# 回圈獲取當前時間,與now_time變數做時間戳做減法
while time.time() - now_time <= timeout:
# 隨機選擇字典的某個“鍵”
keycode = random.choice(list(self.keycode_dict.keys()))
command = "adb shell input keyevent %s" % keycode
print("成功按下了%s" % self.keycode_dict[keycode])
# os.system(command)
time.sleep(0.5) # 間隔0.5s,再進行下一次按鍵模擬
print("已經進行了 %d 秒..., 一共需要測驗 %d 秒" % (time.time() - now_time, timeout))
k_obj = KeyeventInputter()
k_obj.input_keyevent(7200)
os.system()
運行方式與效果
確保Android設備通過USB線與電腦連接了,adb設備有效連接,
以上代碼的3種實作形式都可以直接運行,比如保存為random_keyevent.py并放在桌面,
建議python random_keyevent.py運行,當然也可以雙擊運行,
運行效果如下:
更多更好的原創文章,請訪問官方網站:www.zipython.com
自拍教程(自動化測驗Python教程,武散人編著)
原文鏈接:https://www.zipython.com/#/detail?id=635502eeeae5455c9ba064411cd5617d
也可關注“武散人”微信訂閱號,隨時接受文章推送,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165599.html
標籤:Python
