>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19476 个阅读者 刷新本主题
 * 贴子主题:  android 自动化测试之MonkeyRunner学习 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-03-31 18:35:11     消息  查看  搜索  好友  邮件  复制  引用

         本文讲解怎么进行简单的MonkeyRunner测试。 这个拖了很久才有时间和心情总结一下。真是计划赶不上变化啊。  

          就不说废话了。 http://developer.android.com/tools/help/MonkeyDevice.html   , 这个地址是android上的MonkeyRunner官方文档地址。上面关于MonkeyRunner的一些方法说的很详细。本篇不是详细解释MonkeyRunner方法的文章,只是根据我的理解,结合自己的一个例子讲解一下怎么使用MonkeyRunner写测试程序。  

          MonkeyRunner工具共有三个类:MonkeyRunnerMonkeyDeviceMonkeyImage  

          一、 MonkeyRunnner类:  

                  这个类主要用于把MonkeyRunner连接至真机或者模拟器,另外有个显示提示信息的alert方法和一个选择方法比较常用。  

          二、 MonkeyImage 类:  

                  这个类主要是测试过程中,用来保存测试截图,把图片保存成各种格式,并且可以比较两个MonkeyImage对象。  

                  主要常用的有两个方法: writeToFile  ( string  path,  string  format)   ,这个是保存截图的位置,和命名,可以把图片保存到 sdcard里面,也可以保存到电脑里面; sameAs  ( MonkeyImage  other,  float  percent)   ,这个用来比较两个截图是否相同,结果为 boolean值。  

          三、 Monkey Device 类:  

                  这个类的方法就多了一下,主要提供了安装和卸载程序包、启动一个活动及操作键盘等事件的方法。像里面的 startActivity  ( string  uri,  string  action,  string  data,  string  mimetype,  iterable  categories  dictionary  extras,  component  component,  flags )   启动一个应用, press  ( string  name,  dictionary  type) 点击控件  , touch  ( integer  x,  integer  y,  integer  type) 点击控件(通过坐标定位)  , drag  ( tuple  start,  tuple  end,  float  duration,  integer  steps)   拖拉控件等等方法比较常用。  

                MonekeyRunner这个测试工具用起来不算太难,下面给出一段代码简单解释一下:  

            FetionTest.py

               #coding=utf-8    Python程序的第一句,添加这句使注释支持中文  

              # 导入需要的MonkeyRunner的包,也可以是自己写的类,如果文件很多的话  

              from  com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage  

              #连接真机,里面要写正确自己的真机对应的名字,cmd下命令下,可以用adb devices 看到  

              devices1=MonkeyRunner.waitForConnection(5,"1234567890ABCDEF")  

              #连接模拟器  

              devices2=MonkeyRunner.waitForConnection(5,"emulator-5554")  

              #启动飞信的主界面,这是我测的飞信程序,里面主要是配好飞信的包名和启动Activity  

                devices1.startActivity

             (component = 'cn.com.fetion/.android.ui.activities.StartActivity')  

             devices2.startActivity

             (component = 'cn.com.fetion/.android.ui.activities.StartActivity')  

             #休眠8秒,便于帐号的登录  

             MonkeyRunner.sleep(8.0)  

             #点击我的好友一栏,这里使用的是坐标方法  

              devices1.touch(202,258,"DOWN_AND_UP")  

             #选中好友  

             devices1.touch(222,326,"DOWN_AND_UP")  

             devices1.touch(442,325,"DOWN_AND_UP")  

             # 点击“加入黑名单”  

             devices1.touch(223,563,"DOWN_AND_UP")  

             # 下面是进行截图,和保存图片  

             result1 = device1.takeSnapshot()  

             result1.writeToFile('E:\slack01.png','png')  

             #点击返回键,可以找到模拟器上任何一个建对应的关键值,这个在官方文档里可以查到  

             device1.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)  

             result2 = device1.takeSnapshot()  

             result2.writeToFile('E:\slack02.png','png')  

               这个程序就简单说这些,另外可以对自己的程序进行优化,可以把不同的测试case封装到一个方法里,也可以把一些配置设置成全局变量,然后在不同的类里进行调用。这些需要简单了解一下Python的编程知识。  

             下面说一个比较好用的获取坐标的工具。就是用来获取真机上坐标的工具,当我们点击真机上的空间时,能显示真机上的点击点的坐标。  

          这个是一个可以自己定义的python文件,只有几句话:  

          from com.android.monkeyrunner import MonkeyRunner as mr  

          from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder  

          # 里面添加你的真机的名字  

          device = mr.waitForConnection(5,"MSM8225QRD5")  

          recorder.start(device)  

          比如,我把它定义为monkey_recorder.py, 然后放在G盘,在cmd下运行 monkeyrunner monkey_recorder.py ,就会出现如下界面:
            点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

            当我们在这个工具上点击时,真机也会跟着执行,并且会显示每一步我们点击的位置的坐标,比如,我点击打开音乐播放器会记录如下:
           点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

              这个工具的好只有处你用过几次才知道的,呵呵,反正有些应用程序里很小的图标只能通过坐标获取点击事件,这个工具的优势就显示出来了。另外,需要注意,这个是不能用来获取模拟器坐标的,模拟器上的坐标只有自己下个截图工具,来量取坐标了。这一点确实很蛋疼。  

          软件工具都是这样,没有绝对的便利。MonkeyRunner也不例外。呵呵,这一次就写这么多吧,这个工具简单的使用介绍的也差不多了,更多的还需要自己去摸索,熟能生巧嘛。希望大家能多多分享,多多交流。  

        

----------------------------
原文链接:https://blog.51cto.com/fengbohaishang/962705

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-04-17 12:26:33 重新编辑]
  Java面向对象编程-->输入与输出(上)
  JavaWeb开发-->使用过滤器
  JSP与Hibernate开发-->Spring、JPA与Hibernate的整合
  Java网络编程-->用Axis发布Web服务
  精通Spring-->组合(Composition)API
  Vue3开发-->Vue Router路由管理器
  Android 控件布局实现卡片效果,阴影效果
  Android开发实践:用脚本编译Android工程
  Android开发随想:iPhone和Android之间的对话
  Android 事件处理
  Android UI学习 - Menu
  Android那些事儿之LBS定位
  Android的init过程详解
  Android网络开发-创建请求队列
  Android SDCard Mount 流程分析
  Scroll的原理和简单使用
  Html5调用手机摄像头并实现人脸识别
  Android 自定义九宫格手势锁
  Android 内容提供者(Content Provider)
  Android访问WEBAPI,传递json
  Android中使用Activity管理类
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。