• MonkeyRunner自动化测试


    目录

    一:简介

    二:monkeyrunner工具与Monkey工具的区别

    三:MonkeyRunner的录制与回放

    1:新建monkey_recorder.py文件

    2:  新建monkey_playback.py文件

    3:运行monkeyrunner_recorder

    ​编辑4:回放录制的脚本

    四、录制回放步骤总结

    五、注意事项


    一:简介

     MonkeyRunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。     使用monkeyrunner前,需要安装和配置JDK、SDK和Python。

    二:monkeyrunner工具与Monkey工具的区别

    Monkeyrunner和Monkey都是Android UI自动化测试工具,但是它们的使用场景和功能有所不同。

    Monkey工具是一个基于随机事件的黑盒测试工具,它可以随机模拟用户操作事件并发送到被测试的应用程序中,从而发现应用程序中可能存在的问题,如崩溃、性能问题、安全漏洞等。Monkey工具的功能简单、易于使用,适用于快速发现应用程序的潜在问题。

    而Monkeyrunner工具则是一个更为灵活、高级的工具,它提供了一个Python API,可以编写脚本来控制设备,执行自动化测试和其他任务,如截图、日志分析等。与Monkey工具不同的是,Monkeyrunner工具可以更加自定义化地模拟用户操作,比如模拟多点触控、滑动屏幕、输入文本等,从而更加准确地测试应用程序的功能和性能。

    因此,Monkey工具适用于快速测试应用程序的基本功能和健壮性,而Monkeyrunner工具适用于更加深入、全面地测试应用程序的功能和性能,需要更高的编程技能和专业知识。


    三:MonkeyRunner的录制与回放

    1:新建monkey_recorder.py文件

    1. #!/usr/bin/env monkeyrunner
    2. # Copyright 2010, The Android Open Source Project
    3. #
    4. # Licensed under the Apache License, Version 2.0 (the "License");
    5. # you may not use this file except in compliance with the License.
    6. # You may obtain a copy of the License at
    7. #
    8. # http://www.apache.org/licenses/LICENSE-2.0
    9. #
    10. # Unless required by applicable law or agreed to in writing, software
    11. # distributed under the License is distributed on an "AS IS" BASIS,
    12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13. # See the License for the specific language governing permissions and
    14. # limitations under the License.
    15. from com.android.monkeyrunner import MonkeyRunner as mr
    16. from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
    17. device = mr.waitForConnection()
    18. recorder.start(device)

    2:  新建monkey_playback.py文件

    1. # Copyright 2010, The Android Open Source Project
    2. #
    3. # Licensed under the Apache License, Version 2.0 (the "License");
    4. # you may not use this file except in compliance with the License.
    5. # You may obtain a copy of the License at
    6. #
    7. #     http://www.apache.org/licenses/LICENSE-2.0
    8. #
    9. # Unless required by applicable law or agreed to in writing, software
    10. # distributed under the License is distributed on an "AS IS" BASIS,
    11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12. # See the License for the specific language governing permissions and
    13. # limitations under the License.
    14. import sys
    15. from com.android.monkeyrunner import MonkeyRunner
    16. # The format of the file we are parsing is very carfeully constructed.
    17. # Each line corresponds to a single command.  The line is split into 2
    18. # parts with a | character.  Text to the left of the pipe denotes
    19. # which command to run.  The text to the right of the pipe is a python
    20. # dictionary (it can be evaled into existence) that specifies the
    21. # arguments for the command.  In most cases, this directly maps to the
    22. # keyword argument dictionary that could be passed to the underlying
    23. # command.
    24. # Lookup table to map command strings to functions that implement that
    25. # command.
    26. CMD_MAP = {
    27.     'TOUCH': lambda dev, arg: dev.touch(**arg),
    28.     'DRAG': lambda dev, arg: dev.drag(**arg),
    29.     'PRESS': lambda dev, arg: dev.press(**arg),
    30.     'TYPE': lambda dev, arg: dev.type(**arg),
    31.     'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg)
    32.     }
    33. # Process a single file for the specified device.
    34. def process_file(fp, device):
    35.     for line in fp:
    36.         (cmd, rest) = line.split('|')
    37.         try:
    38.             # Parse the pydict
    39.             rest = eval(rest)
    40.         except:
    41.             print 'unable to parse options'
    42.             continue
    43.         if cmd not in CMD_MAP:
    44.             print 'unknown command: ' + cmd
    45.             continue
    46.         CMD_MAP[cmd](device, rest)
    47. def main():
    48.     file = sys.argv[1]
    49.     fp = open(file, 'r')
    50.     device = MonkeyRunner.waitForConnection()
    51.     
    52.     process_file(fp, device)
    53.     fp.close();
    54.    
    55. if __name__ == '__main__':
    56. main()

    3:运行monkeyrunner_recorder

    Cmd下在SDK目录下的tools文件下输入:

    monkeyrunner monkey_recorder.py

    打开monkeyrunner的录制界面


    4:回放录制的脚本

    在CMD中输入

    monkeyrunner monkey_playback.py recorder.mr

    回放刚录制的脚本,用虚拟机录制的脚本一般回放速度较慢,需耐心等待。

    四、录制回放步骤总结

    以下是录制和回放MonkeyRunner脚本的步骤总结:

    1. 安装Android SDK并配置环境变量

    2. 打开终端或命令提示符,进入Android SDK中的tools目录

    3. 运行MonkeyRunner脚本录制命令

    monkeyrunner -v -p package_name -s serial_number script_file.py

    其中,-v表示启用详细输出,-p后跟应用程序的包名,-s后跟设备的序列号,script_file.py表示脚本文件的路径。

    1. 在设备上执行一些操作,例如点击、滚动等

    2. 终止录制并保存生成的脚本文件

    3. 运行MonkeyRunner脚本回放命令

    monkeyrunner script_file.py

          4.检查回放结果,查看应用程序是否按照预期运行 

    以上是录制和回放MonkeyRunner脚本的基本步骤,需要注意的是,在录制脚本时应尽量模拟真实用户交互,避免一些无意义的操作。同时,也应根据应用程序的不同特点进行定制化的脚本开发,以充分发挥MonkeyRunner工具的测试效果。

    五、注意事项

    在录制和回放MonkeyRunner脚本时,需要注意以下事项:

    1.设备连接: 在录制和回放MonkeyRunner脚本之前请确保设备已经正确地连接到计算机上。

    2.清晰的操作流程: 在录制脚本之前,需要想好清晰的操作流程,以避免录制过程中出现混乱的情况。

    3.正确的坐标: 在录制触摸屏的操作时,需要确保手指在正确的坐标位置,以确保触摸到正确的界面元素。

    4.尽可能多的错误处理: 在编写脚本时,需要考虑尽可能多的错误处理情况,以确保脚本具有更好的稳定性。

    5.日志记录: 在脚本回放时,可以使用日志记录来记录执行的步骤和发生的错误,以便于调试脚本。

    6.避免过度依赖图像识别: 尽可能使用显式的元素定位方法来进行操作,避免过度依赖图像识别,以确保脚本的可靠性和稳定性。它,向它发送模拟击键,截取它的用户界面图片,并将截图存储

  • 相关阅读:
    Postman基础功能-前置脚本与接口关联
    mybatis-plus使用拦截器实现sql完整打印
    【信号隐藏-数字水印】基于DCT实现音频水印嵌入提取附Matlab代码
    什么是React Router?它的作用是什么?
    【负荷预测】基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)
    【云原生】SpringCloud系列之服务治理Eureka
    使用SQL语句处理csv数据
    基于SSM和Web实现的农作物生长监控系统
    仿牛客项目总结
    C++中的##、#符号含义
  • 原文地址:https://blog.csdn.net/LYX_WIN/article/details/133097536