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 相关文章推荐
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python的装饰器使用详解
Jun 26 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python循环结构的应用场景详解
Jul 11 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
Python callable内置函数原理解析
Mar 05 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 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
cache_lite试用
2007/02/14 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
python实现封装得到virustotal扫描结果
2014/10/05 Python
python获取外网ip地址的方法总结
2015/07/02 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
化学实验员岗位职责
2013/12/28 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
初中政治教学工作总结
2015/08/13 职场文书
个人向公司借款协议书
2016/03/19 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS