var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • monkeyrunner工具能够从Android代码之外控制Android设备或者模拟器,官方开发指南没提及其还支持录制和回放,只是支持的脚本一部分位于源码.\platform\sdk\monkeyrunner\scripts\中:help.pymonkey_playback.pymonkey_recorder.py,我打包了可以从此下载Monkeyrunner位于.\ android-sdk-windows\tools\下,使用时在命令行下输入monkeyrunner monkey_recorder.py启动录制界面,

    假如导出(Export Actions)脚本名为calc.mr,则回放输入monkeyrunner monkey_playback.py calc.mr。此类商用类似的工具有Testdroid Recorder

     

    使用monkeyrunnertouch会碰到不知道需要录制空间的屏幕坐标到底是什么,这时可以启动Hierarchy Viewer,切换到piexel perfect视图,鼠标在最右侧的屏幕上移动即可在中间的屏幕中获取该坐标,当然这个需要你的手机系统是debug版本。

  • 2011年11月26日

    Windows下下载Android源码(2)

    分类:

    自从上次Linux内核源码之后,方法无法使用而且google更改了其源码的存储域名。为了获取其最新源码路径,先去官网下载,在浏览器中访问https://android.googlesource.com/platform/manifest,转到的页面显示“git clone https://android.googlesource.com/platform/manifest.git”,在安装msysgitwindows上执行这条命令,在生成的manifest文件夹中能看到base-for-3.0-gpl.xmlbase-for-3.1-gpl.xmlbase-for-3.2-gpl.xml,打开任意一个xml即可知其源码路径,比如:“”表示webkit源文件需要通过命令“git clone https://android.googlesource.com/platform/external/webkit.git”下载。不过有些分支需要Switch/Checkout...选择想要的分支。

     

    另外还可以通过Windows 下用 repo 下载Android源码完成下载。

  • 2011年10月24日

    必须在Windows 下连接的Android设备

    分类:

    下表是目前不能在Ubuntu linux下运行自动化的设备,日后会随着设备的增多而更新:

    机型Android系统主屏尺寸IMEI No.MEIDadb(serial number)
    中兴 U880 2.2.2 3.5英寸 480×800像素(WVGA) 860457002619006   ZTE_SP920
    华为 C8500 2.1-update1 2.8英寸 240×320像素(QVGA)   A000002D3858FE ?(A&EFBA7D2&0&5)
    华为 Vodafone 845 2.1-update1 2.8英寸 240×320像素(QVGA) 351602040994061   ?(6&492613F&0&7)

     

    说明:

    1. 以上机型都能用lsusb列出
    2. 中兴 U880在Ubuntu下用命令usb devices无法显示设备号
    3. 华为C8500和Vodafone 845在Ubuntu下用命令usb devices显示设备号为“????????????”,但用命令连接设备时“adb –s ???????????? shell”无法连接上

    解决方案:

    1. 在Windows下连接设备进行自动化测试
    2. 对设备号为“?”的分批做自动化测试
  • 2011年10月24日

    Android 自动化测试用例规范

    分类:

    这是我一个月前完成的规范。
    目的:指导没接触过界面自动化的开发快速上手,不偏离正轨。不是自动化编码规范。

    根据当前XX自动化开发的现状,特制订此规范。

    安装/卸载测试用例

    1. 当安装应用程序测试用例启动时,如果应用程序已被安装,首先执行卸载应用程序
    2. 安装应用程序使用配置文件中设定的程序路径
    3. 验证应用程序被安装,验证应用程序版本号
    4. 验证应用程序被完全卸载,还需要验证主屏无该应用程序快捷方式

    通用测试用例规范

    1. 测试用例名同测试用例的编号。
    2. 每个测试用例粒度必须尽可能小,短小简单的测试用例易于调试。如果测试用例不得不长而复杂,则把它分成两个或更多的私有方法,并单独调用这些方法。尽量把重复任务放入一个方法中,这样它可以被多个测试用例调用。
    3. 所有的测试用例必须作为一个独立的测试用例运行,每个独立的测试用例负责自己的初始化和清理任务:
      • 测试用例在setUp方法中构建该测试用例所需环境即前置条件,在tearDown方法中清理环境即该测试用例的后置条件,以实现测试用例间不相互依赖
    4. 测试用例需要记录操作步骤。
    5. 测试用例执行出错要截图,从日志查看错误能一目了然。
    6. 测试用例要有合适的验证点,符合测试用例的期待结果。验证用是否存在的方法,如文件存在。
    7. 测试用例只要不匹配预设的验证点,即使该测试用例还有未执行完的代码也要中断下面的执行,抛出合适的异常并提供详细的失败信息,然后设置该测试用例运行结果为失败
    8. 测试用例要尽量处理所有的异常以健壮,对已知应用的程序的bug在处理的同时需要在代码注释中附上禅道上的bug库名和号。
    9. 测试用例要支持横屏和竖屏。
    10. 测试用例要能无人值守运行,即用户传递给测试程序若干必要的参数,自动化测试就会开始运行。
    11. 测试用例要调用的文件要保存在文件夹\datafile内,跟自动化程序同目录。
    12. 安装/启动/卸载测试用例失败后,设置其它所有测试用例执行失败并输出到日志。
    13. 除安装/卸载测试用例,每个测试用例要判断SD卡是否存在,如果不存在则需要设置该测试用例执行失败。
  • 2011年09月27日

    TMTS 简介

    分类:

    TMTS(Taobao Mobile Test System)是淘宝开发的一款Android浏览器应用的轻量级开源自动化测试框架,很明显它借鉴了RobotiumSelenium的Android driver。官方博客做了一个表对比了它同Robotium和Android driver的特性,就从我目前的源码的阅读上来看,Android中访问网页其实现不如Android driver完善,如com.taobao.tmts.framework.viewelememt包中类JavascriptInterface的函数getResult们虽然也返回了javascript的值但并未对返回值进行处理,如转换成json等形式,估计其容错功能也没Android driver强;各种View的封装虽然很多,但没做到Robotium的那样抽象。为了能在浏览器中支持click事件,TMTS在包com.taobao.tmts.framework.viewelememt中的类TmtsWebView中的函数initJavascript中loadJavascript(initJavascript);其中final String initJavascript = "var e = document.createEvent('HTMLEvents');" +"e.initEvent('click', false, false);";调用则在包com.taobao.tmts.framework.viewelememt中的类TmtsWebElement中的函数click中loadJavascript("element.dispatchEvent(e)");。
    下面以QA的形式来阐述若干问题。

    一.为何Android浏览器程序自动化框架都要自己做一个浏览器?
    如Selenium的Android driver和TMTS,我想原因有三:
    1. Android的签名机制阻碍了黑盒instrument操控浏览器
    2. 能够引用源码和反射。前者通过调用findViewById能更方便地找到需要的View,后者可以通过反射更易于对浏览器进行操控
    3. 易于绑定前端的javascript和后端的java代码,如TMTS在包com.taobao.tmts.framework.viewelememt的类TmtsWebView中先定义private final JavascriptInterface jInterface;再在函数initWebViewSettings(WebView webView)中绑定:webView.addJavascriptInterface(jInterface, "webdriver");TMTS在这点上有对Selenium的Android driver进行借鉴。

    二.如何保持自动化运行时屏幕常亮?
    Android手机绝大多数都不能设置不休眠屏幕永远不黑,于是有了这个需求。Selenium的Android driver中采用在包org.openqa.selenium.android.server中的类JettyService中的类startServer:PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "IJetty");
    wakeLock.acquire();然后在函数onDestroy中释放if (wakeLock != null) {
    wakeLock.release();
    wakeLock = null;
    }
    以上Api调用需要在AndroidManifest.xml中设置权限:“<uses-permission android:name="android.permission.WAKE_LOCK"/>”。但目前TMTS没有实现这个需求,不知道为何?我们这边的是写成了一个Service,但在部分机型上不起作用。