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反射用法实例简析
Dec 22 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
Django用户认证系统 User对象解析
Aug 02 Python
详解Python打包分发工具setuptools
Aug 05 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
python/golang 删除链表中的元素
Sep 14 Python
python如何绘制疫情图
Sep 16 Python
python 如何调用 dubbo 接口
Sep 24 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
自动分页的不完整解决方案
2007/01/12 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
三种php连接access数据库方法
2013/11/11 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
JS重载实现方法分析
2016/12/16 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
python+selenium开发环境搭建图文教程
2017/08/11 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
python实现反转部分单向链表
2018/09/27 Python
python分布式计算dispy的使用详解
2019/12/22 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
班干部演讲稿
2014/04/24 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
行政主管岗位职责
2015/02/03 职场文书
试用期辞职信范文
2015/03/02 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技