必要的了解
不管是MonkeyRunner还是我自己胡写的MteMonkeyRunner说穿了主要就是调用下面的几个个关键的API:
- ChimpChat
- IChimpDevice
- IChimpView
- IChimpImage
这几个类都来自于com.android.chimpchat.core package, 也就是chimpchat.jar. 这个类包中包含了很多基础的关键的Api, 比如 调用adb和HierarchyViewer等.
MteMonkeyRunner基本结构
就像前面提到的我只是把MonkeyRunner几个主要的类重写和拷贝了下, 在简单的进行了修改.只有四个主要的类文件.其实就是本人无耻的把对应方法中分析python参数的代码都删除掉了. 因为出发点为用java直接写代码, 所以并没有重新写个UI出来, 但是我分析过MonkeyRunner对应的界面代码, 真是挺对付的....
举个栗子
package test.example.testcase; import java.util.Collection; import com.mte.android.mmr.MteMonkeyDevice; import com.mte.android.mmr.MteMonkeyImage; import com.mte.android.mmr.MteMonkeyRunner; import com.mte.util.DateTimeUtil; public class MteMonkeyRunnerTest { public static void main(String args[]){ String apppath="./app/android/oschina/osc-android-app-2.2.apk"; String packageName="net.oschina.app"; String startActivity="net.oschina.app/.AppStart"; MteMonkeyDevice device=MteMonkeyRunner.waitForConnection(100000,"HC477WY00656"); System.out.println("Device name is : " + device.getProperty("build.model")); for(String prop:device.getPropertyList()){ System.out.println(prop +" : "+device.getProperty(prop)); } device.installPackage(apppath); device.startActivity(startActivity); MteMonkeyRunner.sleep(30000); MteMonkeyImage image=new MteMonkeyImage(device.takeSnapshot()); image.writeToFile("./screen/MteMonkeyRunnerTest"+DateTimeUtil.getCurrentDateTime()+".png", "png"); MteMonkeyRunner.sleep(10000); Collection<String> viewLst=device.getViewIdList(); System.out.println("device.getViewIdList() is : "+viewLst.size()); if(viewLst.size()>=1){ for(String prop:viewLst){ System.out.println(prop); } } MteMonkeyRunner.sleep(20000); device.removePackage(packageName); device.dispose(); } } |
可能出现的问题以及免责声明
本人在写完基本方法测试脚本的时候, 有时候发现 当我使用device.shell()或者是device.getViewIdList()等方法时候,会抛出异常, 而且在真机通过了,反而在模拟器上出现问题, 虽然花时间找了下解释, 但是基本上算是没解决, 我在见了自己的MteMonkeyRunner的类的时候,只是删除了对应的python的参数处理,而且关键的方法基本没变, 怀疑是本人的Mac环境问题,所以本人也很无奈, 大家如果有兴趣在使用的时候,请注意并请见谅.写的这些本身就是为了学习研究, 通过一些很具体的实践加深了解, 分析源代码是非常有效的学习方式.
参考
本帖子中的MteMonkeyRunner 所有源代码都可以在 https://github.com/PandaSense/mtesense 中下载到,包名为com.mte.android.mmr, 可以单独使用, 只要你把,帖子前面说明的五个jar添加到对应project的java build path就可以.
其他设想
扩展下MonkeyRunner的UI界面多加一些有用的操作(自带的界面非常简陋)
接受参数化的脚本,直接跑测试等等