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内置的字符串处理函数整理
Jan 29 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
Python bisect模块原理及常见实例
Jun 17 Python
10个示例带你掌握python中的元组
Nov 23 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 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/11/25 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
checkbox使用示例
2013/08/23 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
javascript作用域问题实例分析
2015/07/13 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
javascript基础知识讲解
2017/01/11 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
python命令 -u参数用法解析
2019/10/24 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
应届生求职信写作技巧
2013/10/24 职场文书
小学生评语集锦
2014/04/18 职场文书
环保标语口号
2014/06/13 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
幼儿教师个人总结
2015/02/05 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
运动会开幕式主持词
2015/07/01 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android