Python实现Android设备随机按键模拟测试脚本
本文介绍如何使用Python脚本在Android设备上模拟随机按键操作,以测试系统对按键事件的响应稳定性。通过ADB命令调用keyevent,结合random模块生成随机键值,并设置7200秒(2小时)的持续运行时间。文章提供了批处理、面向过程函数及面向对象类三种实现方式,适用于车载终端及手机硬按键的稳定性测试场景。
案例背景
针对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) 常量
once_time = time.time() # 获取当前时间戳,并保存到一个变量
keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
88: "上一曲键", 91: "静音键"}
# 循环获取当前时间,与once_time变量做时间戳做减法
while time.time() - once_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() - once_time, TIMEOUT))
os.system("pause")
Python面向过程函数实现
观察哪些代码块能组合成具体功能, 本案例中,可使用input_keyevent()函数代表输入按键事件的功能模块, 该函数可接收参数,指定按键事件持续的时间。
# coding=utf-8
import os
import time
import random
def input_keyevent(timeout):
once_time = time.time() # 获取当前时间戳,并保存到一个变量
keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
88: "上一曲键", 91: "静音键"}
# 循环获取当前时间,与once_time变量做时间戳做减法
while time.time() - once_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() - once_time, timeout))
input_keyevent(7200)
os.system("pause")
Python面向对象类实现
1.秉持“万物皆可归类”的理念,首先抽象出一个类,类名通常建议使用“名词”,因此命名为“KeyeventInputter”,代表按键事件输入器,且类名一般需采用驼峰命名法(首字母大写)以规范命名。
2.养成良好类的初始化(__init__)习惯,在初始化过程中,可定义属性,如self.keycode_dict。
3.定义方法(函数),即input_keyevent函数。 4.类是抽象概念,必须实例化为具体对象后才能调用,因此我们将其实例化并命名为k_obj,表明它是一个对象。 5.实例化为具体对象后,该对象即可调用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):
once_time = time.time() # 获取当前时间戳,并保存到一个变量
# 循环获取当前时间,与once_time变量做时间戳做减法
while time.time() - once_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() - once_time, timeout))
k_obj = KeyeventInputter()
k_obj.input_keyevent(7200)
os.system("pause")
运行方式与效果
确保Android设备已通过USB线与电脑连接,且adb设备有效连接,以上代码的3种实现形式均可直接运行,例如保存为random_keyevent.py并置于桌面,建议通过python random_keyevent.py命令运行,当然也可以双击运行。
运行效果如下:

以上就是Python 随机按键模拟2小时的详细内容,更多关于Python 随机按键模拟的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













