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 14 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python实现图片转字符画的示例代码
Aug 21 Python
基于tensorflow加载部分层的方法
Jul 26 Python
python实现简单图片物体标注工具
Mar 18 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Python日志无延迟实时写入的示例
Jul 11 Python
python是否适合网页编程详解
Oct 04 Python
python构建指数平滑预测模型示例
Nov 21 Python
python 实现目录复制的三种小结
Dec 04 Python
使用python模拟高斯分布例子
Dec 09 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 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附件下载中文名称乱码的解决方法
2015/12/17 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP strripos函数用法总结
2019/02/11 PHP
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
在Python中定义和使用抽象类的方法
2016/06/30 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python学生管理系统代码实现
2020/04/05 Python
Python实现基于POS算法的区块链
2018/08/07 Python
Django CBV类的用法详解
2019/07/26 Python
python3获取url文件大小示例代码
2019/09/18 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python argparse模块使用方法解析
2020/02/20 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
阿波罗盒子:Apollo Box
2017/08/14 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
高中生毕业自我鉴定
2013/10/10 职场文书
学校消防演习方案
2014/02/19 职场文书
个人租房协议书
2014/04/09 职场文书
公关活动策划方案
2014/05/25 职场文书
一般党员对照检查材料
2014/09/24 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
元宵节晚会主持词
2015/07/01 职场文书