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中文编码那些事
Jun 25 Python
python中遍历文件的3个方法
Sep 02 Python
python之Character string(实例讲解)
Sep 25 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
python三大神器之fabric使用教程
Jun 10 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
python hashlib加密实现代码
Oct 17 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
python学习之panda数据分析核心支持库
May 07 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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代码
2006/12/06 PHP
php 字符转义 注意事项
2009/05/27 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
img的onload的另类用法
2008/01/10 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
Webpack实战加载SVG的方法
2017/12/26 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
Python合并多个装饰器小技巧
2015/04/28 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
本科生详细的自我评价
2013/09/19 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
开场白怎么写
2015/06/01 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server