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 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
Python生成随机密码的方法
Jun 16 Python
python合并同类型excel表格的方法
Apr 01 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
Python模块、包(Package)概念与用法分析
May 31 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python多进程并发demo实例解析
Dec 13 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
如何利用python和DOS获取wifi密码
Mar 31 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 正则匹配函数体
2009/08/25 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
python非递归全排列实现方法
2017/04/10 Python
单链表反转python实现代码示例
2018/02/08 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
python实现图片横向和纵向拼接
2020/03/05 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
Python中过滤字符串列表的方法
2020/12/22 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
实习会计求职自荐信范文
2014/03/10 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
小学节能减排倡议书
2014/05/15 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
工程质检员岗位职责
2015/04/08 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL