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中操作字典之fromkeys()方法的使用
May 21 Python
Django实现快速分页的方法实例
Oct 22 Python
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
python或C++读取指定文件夹下的所有图片
Aug 31 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
Python中json.dumps()函数的使用解析
May 17 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
附件名前加网站名
2008/03/23 PHP
php session劫持和防范的方法
2013/11/12 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
web前端开发也需要日志
2010/12/09 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python科学画图代码分享
2017/11/29 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
python程序文件扩展名知识点详解
2020/02/27 Python
python Scrapy框架原理解析
2021/01/04 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
大堂副理的岗位职责范文
2014/02/17 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
继承权公证书
2014/04/09 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
防震减灾主题班会
2015/08/14 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书