Python 随机按键模拟2小时


Posted in Python onDecember 30, 2020

案例故事:

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 随机按键模拟2小时的详细内容,更多关于Python 随机按键模拟的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python生成pdf文件的方法
Aug 04 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
python函数中return后的语句一定不会执行吗?
Jul 06 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
django1.11.1 models 数据库同步方法
May 30 Python
python绘制直方图和密度图的实例
Jul 08 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
如何在Windows中安装多个python解释器
Jun 16 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
Python的scikit-image模块实例讲解
Dec 30 #Python
用Python实现职工信息管理系统
Dec 30 #Python
python实现双人五子棋(终端版)
Dec 30 #Python
pandas 数据类型转换的实现
Dec 29 #Python
python中xlutils库用法浅析
Dec 29 #Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 #Python
python中uuid模块实例浅析
Dec 29 #Python
You might like
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python文件操作的简单方法总结
2019/11/07 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
python如何爬取动态网站
2020/09/09 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
大专生自荐信
2013/10/04 职场文书
采购部部门职责
2013/12/15 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
演讲稿的写法
2014/05/19 职场文书
企业精神口号
2014/06/11 职场文书
教师教育心得体会
2016/01/19 职场文书