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简单商城购物车实例代码
Mar 15 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
python多个模块py文件的数据共享实例
Jan 11 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
Python Django 命名空间模式的实现
Aug 09 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
Python OrderedDict的使用案例解析
Oct 25 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
python入门教程之基本算术运算符
Nov 13 Python
opencv 分类白天与夜景视频的方法
Jun 05 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遍历数组的几种方法
2012/03/22 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
如何在PHP中生成随机数
2020/06/04 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
js操作二进制数据方法
2018/03/03 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
详解Python中DOM方法的动态性
2015/04/11 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
python实现合并两个排序的链表
2019/03/03 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
四年级作文之植物
2019/09/20 职场文书
python 使用pandas读取csv文件的方法
2022/12/24 Python