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
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    PHP基本的语法以及和Java的差别
    Linux 性能測试工具
    【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
    【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
    【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
    Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
  • 原文地址:https://www.cnblogs.com/zipython/p/12562210.html
Copyright © 2011-2022 走看看