最近在做Android系统的自动化测试,所以花了点时间研究一下CTS。
        Android官方发布的CTS测试包默认是在Linux系统上运行的,由于CTS分两部分执行,一部分是CTSHOST,主要用来控制整个测试过程的,它的作用就是把测试包按照测试计划安装到被测设备上,然后通过Adb shell Am 执行相应的测试程序,然后再收集测试结果,最终把整个测试结果汇总,同时也会记录下测试日志。CTSHOST属于PC端测试工具,使用JAVA语言写成,所以可以运行在多个平台上。CTS的另外一部分就是测试包,以APK的形式存在,这些应用里就包含需要实际执行的TestCase。
      尽管我们是做Android开发,理应在Linux环境下工作,但很多时候还是无法避免使用Windows,下面就介绍如何在Windows执行CTS,这里我使用的Android CTS 4.0 R2 测试包来举例。下载CTS后,在Tools目录下新建CTS-Tradefed.bat,里面内容如下: @echo off
set CTS_ROOT=..\..
rem set RDBG_FLAG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0 暂不需用远程调试
set CTS_LIB=%CTS_ROOT%\android-cts\tools\cts-tradefed.jar
set DDM_LIB=%CTS_ROOT%\android-cts\tools\ddmlib-prebuilt.jar
set TDF_LIB=%CTS_ROOT%\android-cts\tools\tradefed-prebuilt.jar
set HST_LIB=%CTS_ROOT%\android-cts\tools\hosttestlib.jar
set JARS=%CTS_LIB%;�M_LIB%;%TDF_LIB%;%HST_LIB%
rem echo java %RDBG_FLAG% -cp %JARS% -DCTS_ROOT=%CTS_ROOT% com.android.cts.tradefed.command.CtsConsole
call java %RDBG_FLAG% -cp %JARS% -DCTS_ROOT=%CTS_ROOT% com.android.cts.tradefed.command.CtsConsole
rem pause
@echo on


CTS包中的shell脚本里包含远程调试的语句,但是实际执行没有用到,所以在批处理中也不需要用。不知道Google为什么要这样写。


有一点需要注意:就是在测试android.core.vm-tests-tf.jar这个包时,需要解压缩到临时目录,由于CTSHOST把这个临时目录写死了Linux的tmp,所以在Windows执行这个测试时会有问题,怎么办,我们可以简单修改一下CTSHOST:
在 cts\tools\tradefed-host\src\com\android\cts\tradefed\testtype 找到 VMHostTest.java


修改 installVmPrereqs 这个 方法中一条语句:把       File localTmpDir = FileUtil.createTempDir("cts-vm", new File("/tmp/")); 修改  File localTmpDir = FileUtil.createTempDir("cts-vm", new File(System.getProperty("java.io.tmpdir"))); 
然后重新编译一下,只需要编译 cts-tradefed.jar
如果你的版本和google发布一致,那直接替换,如果不一致,建议只替换包中VMHostTest.class,替换前可以jad反编译对比一下,这样最保险。
以上都是亲力亲为实践得出的。
Logo

更多推荐