51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2155|回复: 1
打印 上一主题 下一主题

Monkeyrunner 写脚本的技巧(shell 命令,文件操作)

[复制链接]
  • TA的每日心情
    无聊
    2024-9-19 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2019-3-11 16:00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Android 4.0已经发布了,令我失望的一点是monkeyrunner工具本身没有大的提高,SDK看上去没有什么变化,但是之前曾将看到趋势,源码已经引入Ichampview和ease等新的模块,可惜源码还没有发布,不知道具体情况,况且现在的monkeyrunner也无法执行。感觉目前sdk列出的功能太少,在写脚本的时候,限制太多,好在monkeyrunner的脚本是python形式的,丰富的库文件可以弥补这一缺陷

    1.  adb命令的执行:os.system()

    例如 adb root, adb push, adb pull, 可以用 os.system()来实现,例如os.system("adb push e:\\tmp\\email_eception.log /sdcard/")


    2.目录操作: os.chdir(),os.getcwd()

    os.chdir('e:\\tmp')      

    os.getcwd()


    3. 创建以时间命名的文件夹

    首先获取时间:time.ctime(), 获得的时间格式如"Mon Oct 31 15:48:30 2011",因为window不支持文件夹名包括“:”,并且带有空格也会带来兼容性的问题,可以用字符串处理函数str.replace来将空格用“_”替换,将“:”删除,st2.replace(" ","_").replace(":","")


    4. 判断文件是否存在

    os.path.exists(), 返回True 或 False

    os.path.exists("D:\\shellwork\\devtool\\setup\\music\\setup.bat")


    5. 连接之前要确保是以root身份连接的(adb root)

    os.system('adb root')
    os.system('adb wait-for-device')


    6. startActivity来发送短信,通过 增加extra data ‘sms_body’,避开UI操作。上代码

    def sendsms(dev, number, smscontent = '', ifsend = True):
        ''' 发送一条短信,号码必须要指定,短信内容可选
        number: 发送短信的目的号码
        smscontent: 短信的内容
        ifsend: 是否点击短信编辑页面的发送键,将短信发送出去'''
        if smscontent == '':
            dev.startActivity(action = 'android.intent.action.SENDTO', data = 'sms:'+ str(number))
        else:
            extrasDic = {'sms_body': str(smscontent)}
            dev.startActivity(action = 'android.intent.action.SENDTO', \
                              data = 'sms:'+ str(number), extras = extrasDic)
        if ifsend:
            time.sleep(3)
            dev.touch(443, 816, MonkeyDevice.DOWN_AND_UP)
            time.sleep(1)
            keypress_home(dev)


    7.  startActivity 拨打电话

    def makecall(dev, targetdev, number, duration = 15, ifspeaker = False, ifhangup = True, timeout = 2):
        '''拨打一个电话
        number: 要拨打的目标电话的号码
        duration: 电话持续的时长,默认10秒钟
        speaker: 是否在接通电话后打开speaker
        hangup: 指定是否需要由发起电话的一端挂断电话
        timeout: 接听电话一方收到incomingcall的超时时长
        '''
        assert(number)
        dev.startActivity(action = 'android.intent.action.CALL', data = 'tel:'+ str(number))
        time.sleep(5)
        if ifspeaker == True:
            for i in range(4):  #尝试查询5次电话的状态,如果在电话中,打开扬声器
                if isincall(dev):
                    dev.touch(80, 665, MonkeyDevice.DOWN_AND_UP)
                    break
                time.sleep(2)
        acceptcall(targetdev, timeout = 15)
        time.sleep(duration)

        if ifhangup:
            if isincall(dev):
                dev.startActivity(component = 'com.android.phone/.MiuiInCallScreen')
                time.sleep(2)
                dev.touch(240, 800, MonkeyDevice.DOWN_AND_UP)


    8. monkeyrunner的交互解释器中使用help函数

    在monkeyrunenr的交互解释器中,也许你发现了,无法用help函数,我们习惯了在python的交互式解释器中直接输入help命令来查询各种函数或者模块的用法。但是在monkeyrunner中的交互解释器中就用不了了,会提示 NameError: name 'help' is not defined,这是因为没有导入help函数。只需要到如pydoc中的help就可以使用了,如下:

    from pydoc import help


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-4-8 09:16
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]测试连长

    2#
    发表于 2019-3-12 08:41:00 | 只看该作者
    还没学到这里来,感觉好厉害。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 13:53 , Processed in 0.059855 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表