zoukankan      html  css  js  c++  java
  • 《自拍教程50》Python adb随机按键模拟2小时

    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)
    now_time = time.time()  # 获取当前时间戳,并保存到一个变量
    keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
                    25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
                    88: "上一曲键", 91: "静音键"}
    
    # 循环获取当前时间,与now_time变量做时间戳做减法
    while time.time() - now_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() - now_time, timeout))
    
    os.system("pause")
    

    Python面向过程函数形式

    看哪些代码块,可以组成一个具体的功能,
    这个案例,可以有一个输入按键事件的功能函数,input_keyevent(),
    这个函数可以接收参数输入,可以指定输入多久的按键事件。

    # coding=utf-8
    
    import os
    import time
    import random
    
    
    def input_keyevent(timeout):
        now_time = time.time()  # 获取当前时间戳,并保存到一个变量
        keycode_dict = {3: "HOME键", 4: "返回键", 5: "电话拨号键", 24: "音量加键",
                        25: "音量减键", 26: "电源键", 27: "照相机启动键", 87: "下一曲键",
                        88: "上一曲键", 91: "静音键"}
    
        # 循环获取当前时间,与now_time变量做时间戳做减法
        while time.time() - now_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() - now_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):
            now_time = time.time()  # 获取当前时间戳,并保存到一个变量
            # 循环获取当前时间,与now_time变量做时间戳做减法
            while time.time() - now_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() - now_time, timeout))
    
    
    k_obj = KeyeventInputter()
    k_obj.input_keyevent(7200)
    os.system()
    

    运行方式与效果

    确保Android设备通过USB线与电脑连接了,adb设备有效连接,
    以上代码的3种实现形式都可以直接运行,比如保存为random_keyevent.py并放在桌面,
    建议python random_keyevent.py运行,当然也可以双击运行。
    运行效果如下:


    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=635502eeeae5455c9ba064411cd5617d
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    python快速查看内置模块函数
    kettle -小技巧 null 跳过唯一索引
    IOException:Connection refused:connect Kettle连接数据库
    各种数据库的jdbc驱动下载及连接方式
    DataCleaner中文文档
    ModuleNotFoundError: No module named 'xlwt' 。
    liunx 常用命令
    Mysql 环境搭建详解
    查询mysql所有表数据、字段信息
    mysqp pk、nn、qu、b、un、zf、ai、g代表的意思
  • 原文地址:https://www.cnblogs.com/zipython/p/12562210.html
Copyright © 2011-2022 走看看