美文网首页
Python Appium自动化测试 MonkeyScript

Python Appium自动化测试 MonkeyScript

作者: 白码会说 | 来源:发表于2020-12-12 22:10 被阅读0次

    Time will tell.

    前边讲解的 Monkey 都是随机事件流,Monkey 在手机里像个无头苍蝇一样乱蹦乱跳,那么本章节就教你如何让 Monkey 按指令在手机里闹腾 —— Monkey 自定义脚本。

    1、monkey 隐藏命令

    –pck-blacklist-file<黑名单文件>
    
    –pck-whitelist-file<白名单文件>
    
    –f<脚本文件>:可以指定monkey的自定义脚本
    
    

    一般 Monkey 测试都是随机的测试事件,假如我们需要测试某一个特定的场景,普通的命令很难办到,这是就是需要自定义脚本这个命令了。

    它的使用方式也是很简单方便的,只要我们按照 Monkey 的脚本规范写好脚本,之后将它保存到手机中,然后运行 Monkey 的时候使用-f命令指定脚本就行。

    2、monkey 自定义脚本格式

    虽然,Google 官方并没有提供对 MS 详细讲解的 API 文档,但是我们是可以通过源码来分析出 MS 支持的 API 的。

    MS 的源码文件是:MonkeySourceScript.java

    Monkey 的源码 MonkeySourceScript.java类中有一段关于 Monkey 脚本规则的描述MonkeySourceScript.java有兴趣的同学可以去看一下这个源码,这里以 5.1.1 为例子,进行讲解,其实这一块的代码变动非常的少,找一个版本了解即可。我们看一下源码对脚本规则描述。

    脚本规则的描述

    /**
     * monkey event queue. It takes a script to produce events sample script format:
     *
     * <pre>
     * type= raw events
     * count= 10
     * speed= 1.0
     * start data >>
     * captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
     * captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
     * captureDispatchFlip(true)
     * ...
     * </pre>
     */
    
    

    解释意思

    #声明脚本的类型
    type= raw events
    #脚本的执行次数,由于monkey运行次数在命令设置的,这里的设置是无效的
    count= 10
    #事件执行时间间隔,这个也是通过命令来设置,这里不起作用
    speed= 1.0
    #脚本的入口,说明脚本从下面开始执行
    start data >>
    #下全是monkey命令
    captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
    captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
    captureDispatchFlip(true)
    
    

    知道 Monkey 脚本书写的基本格式,在来看一眼 Monkey 常见脚本 API 。

    1.LaunchActivity(包名,Activity名称)
    启动被测应用的某个Activity
    2.Tap(x,y,TapDuration)
    一次单击事件
    x,y:是坐标
    TapDuration:持续的时间,单位毫秒
    3.DispatchPress(keyName)
    模拟一个按键
    keyName:按键的名称
    4.RotateScreen(RotationDegree,peresist)
    旋转屏幕
    RotationDegree:0~3分别表示顺时针的四个方向
    peresist:是否存留
    5.DispatchFiip(true/false)
    打开或关闭软键盘
    6.LongPress()长按2秒
    7.PressAndHold(x,y,PressDuration)
    模拟长按事件
    x,y:点击的坐标
    PressDuration:持续时常,单位毫秒
    8.DispatchString(input)
    输入字符串
    input:输入的内容
    9.Drag(xStart,yStart,xEnd,yEnd,pCount)
    模拟拖动操作
    xStart,yStart:开始的坐标值
    xEnd,yEnd:结束的坐标值
    pCount:滑动事件的次数
    10.PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2ystart,pt2xEnd,pt2yEnd)
    手势缩放事件
    pt1xStart,pt1yStart:第一个手指起始的坐标位置
    pt1xEnd,pt1yEnd:第一个手指结束的坐标位置
    pt2xStart,pt2ystart:第二个手指开始的坐标位置
    pt2xEnd,pt2yEnd:第二个手指结束的坐标位置
    11.UserWait(sleepTime)
    设置睡眠时间
    sleepTime:等待时间,单位毫秒
    12.DeviceWake()
    唤醒设备屏幕
    
    

    在源码中,所有我们上面介绍的 API 都是以一个static final的形式被声明。这里简单就LaunchActivity 的方法的源码进行讲解,其他的 API 其实也大同小异。

    LaunchActivity的方法的源码讲解:

    1、浏览器输入源码地址,找到静态字符串LaunchActivity,如图:

    2、将鼠标定位到静态字符串LaunchActivity通过ctrl(command)+?️左键我们可以定位到方法的位置。大约在597行,如图:

    3、将鼠标定位到LaunchActivity的方法通过ctrl(command)+?️左键我们可以进入到方法代码。大约在597行,如图:

    4、如上边LaunchActiviity方法源码所示,LaunchActiviity会以数组的形式接收两个参数,分别表示 PackageNameActivityClassName,下面具体对应的实现,我们就不细看了。再参照上面介绍的 API ,就可以很清晰的定位出方法和参数的含义了。

    有兴趣的小伙伴们可以通过以上步骤一一查看那些方法的 API 。

    3、Monkey 脚本的实例

    1、Monkey 脚本主要包含两部分,一部分是头文件信息,一部分是具体的 Monkey 命令。

    2、按照2.1的脚本描述规则我们来编辑monkeyscript,如下:

    type = user
    count = 1
    speed = 500
    start data >>
    #启动应用程序
    LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity)
    UserWait(5000)
    #点击下步按钮
    Tap(615,609)
    UserWait(1000)
    #点击编辑框
    Tap(200,85,1000)
    #输入sg
    DispatchString(sg)
    
    

    注意这里分别使用了DispatchPressDispatchString来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。

    3、执行脚本

    1. 编写好脚本,保存为monkey.script文件。

    2. 通过 adb push将其上传到待测试的设备中。要pushsdcard文件夹中(这里一夜神模拟器为例),如图:

      adb push C:/Users/DELL/Desktop/monkey.script /sdcard/
      
      
    3. 查看有没有push到设备中,从下图可以看到成功的push进去了。如图:


    4. 有兴趣或者不相信的可以查看文件内容,如图:


    5. 然后通过 monkey -f执行此脚本,例如下面执行 1次。

      adb shell monkey -f /sdcard/monkey.script -v 1
      
      
    6. 效果截图


      image
    7. 执行完成之后,可以在控制台,看到输出的 Log 信息。


      image

    4、总结

    1、通过adb pulladb push手机与电脑之间传输文件

    (1)将手机卡中的某个文件复制到电脑

    1. 手机连接电脑后,在命令行输入 adb devices,获取到设备序列号后说明手机已经和电脑连接成功。

    2. 输入: adb pull 手机存储路径 电脑路径    adb pull /sdcard/xxx /Users/xxxx/xxx.tx

    (2)从电脑端向手机复制文件

    1. 输入: adb pull 电脑路径 手机存储路径    adb push /Users/xxxx/xxx.txt /sdcard/xxx

    2、注意事项(此处有坑!)

    头文件代码书写注意 “=” 两边预留空格,否则会出现如下报错。

    java.lang.NumberFormatException: Invalid int: ""
    
    

    以上就分享到这里,最近正好有时间做自动化测试方面的资料整理。如果你对Python自动化测试、面试题,感兴趣可以加入我们扣裙一起学习175317069,有各项测试资料,面试题资料。

    欢迎【点赞】、【评论】、【关注】~

    Time will tell.(时间会证明一切)

    相关文章

      网友评论

          本文标题:Python Appium自动化测试 MonkeyScript

          本文链接:https://www.haomeiwen.com/subject/bowygktx.html