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 循环遍历字典元素的简单方法
Sep 11 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
zookeeper python接口实例详解
Jan 18 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
Python文件夹批处理操作代码实例
Jul 21 Python
通过实例了解Python异常处理机制底层实现
Jul 23 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
python lambda 表达式形式分析
Apr 03 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下通过POST还是GET来传值
2008/06/05 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python实现随机漫步方法和原理
2019/06/10 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
质量月活动策划方案
2014/03/10 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
绿色环保口号
2014/06/12 职场文书
庆祝国庆节标语
2014/10/09 职场文书
2015年加油站工作总结
2015/05/13 职场文书
2016年春节问候语
2015/11/11 职场文书
《雷雨》教学反思
2016/02/20 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
详解pytorch创建tensor函数
2022/03/22 Python