MilgGtery 发表于 2018-3-5 15:09:50

Windows环境CTS测试实现

本帖最后由 MilgGtery 于 2018-3-5 17:25 编辑

CTS原本是基于Linux平台命令终端下运行的测试套件,而我们平常的一些工作都是在Windows系统
下完成的,当然我们可以使用虚拟机,但是对于不太熟悉Linux系统的同事来说,Linux下的CTS环境
配置、测试操作、报告获取等都是另人头疼的事情,况且经常在虚拟机下无法发现被测设备,也就
根本无法执行CTS测试。

    那CTS是否可以在Windows系统下执行测试呢?是否可以测试CTS测试包中所有测试项呢?答案是
肯定的,目前我提供的Windows环境下CTS测试工具CtsTool(结束处附加了下载地址)已经完美实现
android-cts-2.x.x、android-cts-4.0.x及android-cts-4.1的完整CTS测试(其中x在这里以及下文出现的
x暂只表示4.0到4.1系列版本),并提供sync命令自动更新“CtsTool”工具。下面将针对该工具在实现
Win环境CTS测试过程中所遇到问题的解决方法和大家分享,而这些问题也是所有试图在Windows环
境下执行完整CTS测试所必须解决的问题,问题如下:

    1、 如何启动CTS控制台?只有启动了CTS控制台才能进行所谓的CTS测试。

    2、 android-cts-4.0.x及android-cts-4.1版本CTS套件中均存在android.core.vm-tests-tf 包无法测
试,并抛出异常,导致无法生成测试报告。

    3、 android-cts-4.0.x版本中android.nativemeida 包执行时总会跳过测试(notExecuted),即无
法测试。

    4、 android-cts-4.1版本中android.nativemedia.s1和android.nativemedia.xa 2个测试包无法测试,
同问题3。

问题1 — 如何启动CTS控制台?
    CTS(兼容性测试套件)可简单分为2个部分:测试框架和测试用例。下面是android-cts-4.0.3_r3
版本CTS测试套件的目录结构:

    —android-cts-4.0.3_r3

      |—android-cts

         |—docs                  // 空文件夹

         |—repository

         ||—logs               // 存放工具(host)log及设备(devices)log

         ||—plans // 测试计划存放目录

         |||—Android.xml

         |||—AppSecurity.xml

         |||—CTS.xml            // 包含所有测试包,即对应run cts --plan CTS

         |||—……(更多)            

         ||—results             // 目录下存放的是测试结束后生成的测试报告

         ||—testcases         // 目录下存放的是所有CTS测试用例

         |—tools                  // 测试框架文件目录

            |—cts-tradefed         // Linux下启动CTS控制台的bash文件

            |—cts-tradefed.jar // CTS命令执行、过程控制、结果生成的核心文件

            |—ddmlib-prebuilt.jar

            |—hosttestlib.jar

            |—junit.jar

            |—tradefed-prebuilt.jar

    在Linux下我们只需打开命令终端,通过cd命令进入如上测试包目录结构中的tools目录下,执行.
/cts-tradefed 命令即可打开CTS测试控制台,继而执行CTS测试。

而在Windows下该如何调用测试包tools目录下的java文件,从而来启动CTS测试控制台呢?cts-trad
efed 这个bash文件的最后一段代码给了我们惊喜,代码如下:

java $RDBG_FLAG \

-cp ${JAR_PATH} -DCTS_ROOT=${CTS_ROOT} com.android.cts.tradefed.command.CtsConsole
"$@"

    根据这段代码,我们只需配置好${JAR_PATH}和${CTS_ROOT}变量对应的文件路径及修改Wind
ows下批处理运行java文件的一些语法即可进行验证,首先在tools目录下新建cts-tradefed.bat的批
处理文件,文件中输入如下代码:

@echo off

set CTS_ROOT=..\..

set CTS_DIR=%CTS_ROOT%\android-cts\tools\cts-tradefed.jar

set DDM_DIR=%CTS_ROOT%\android-cts\tools\ddmlib-prebuilt.jar

set TDF_DIR=%CTS_ROOT%\android-cts\tools\tradefed-prebuilt.jar

set HST_DIR=%CTS_ROOT%\android-cts\tools\hosttestlib.jar

set JAR_DIR=%CTS_DIR%;%DDM_DIR%;%TDF_DIR%;%HST_DIR%

call java %RDBG_FLAG% -cp %JAR_DIR% -DCTS_ROOT=%CTS_ROOT% com.android.cts.tradef
ed.command.CtsConsole

    运行cts-tradefed.bat批处理文件,惊喜的发现CTS控制台启动了!当然CTS测试相关命令都可正常
执行,然而我们执行run cts -- plan CTS时,当执行到android.core.vm-tests-tf这个测试包时,程序
会抛出异常错误,CTS无法继续进行下去,而android-cts-4.x.x版本测试套件在测试过程中若意外终
断测试将不会生成测试报告,这让我们相当郁闷,毕竟我们最需要的是测试报告,后面我们还发现
android-cts-4.0.x版本测试套件中android.nativemedia共9个测试用例也无法测试(只是不执行测试
而已,不会中断测试),且android-cts-4.1版本测试套件中android.nativemedia.s1、android.native
media.xa2个包也无法测试。

    但我们想要的是在Windows环境下执行CTS测试能达到同Linux环境下测试一样的效果,这些问题
将如何解决?下面将进入本文所要解决问题的重点,即解决部分测试包无法在Windows环境下执行
测试的问题。

问题2 — android.core.vm-tests-tf包无法测试
问题原因:

    CTS工具在Windows环境下无法创建临时目录,同时也无法在设备的/data/local/tmp/vm-tests目录
下创建dalvik-cache目录(vm-tests目录工具可创建)。

解决办法:

    android-cts-4.0.x版本、android-cts-4.1版本都存在android.core.vm-tests-tf测试包。这里以android4.
0.4源码为例,源码根目录为source,首先找到VMHostTest.java文件,路径为source/cts/tools/tradefed
-host/src/com/android/cts/tradefed/testtype/VMHostTest.java。

    对VMHostTest.java文件作如下2点修改:

    修改点1:从文件中找到代码createRemoteDir(device, VM_TEST_TEMP_DIR + "/dalvik-cache" ); ,
将其复制到如下图所示的蓝色框部分,同时注释掉原代码。

    修改点2:从文件中找到代码"/tmp/",并将其改为如图所示的蓝色框中代码。


    修改上面2点后,在source/cts/tools/目录下执行mmm tradefed-host命令编译出cts-tradefed.jar文
件,文件生成在source/android-4.0.4_r2/out/host/linux-x86/framework目录下,当然需先在source目
录下执行. /build/envsetup.sh命令才可使用mmm命令,现在我们要做的便只是将编译出的cts-tradef
ed.jar文件替换掉CTS测试套件中tools目录下的cts-tradefed.jar文件即可,此时执行run cts - p androi
d.core.vm-tests-tf包便会顺利执行测试,当然执行run cts -- plan CTS测试命令也就没有任何问题了。

问题3 — android.nativemeida包无法测试
问题原因:

    CTS工具在Windows环境下无法在设备/data/local/tmp/目录创建cts-native-tests目录同时无法传输
测试相关文件到cts-native-tests目录下。

解决办法:

    同前文,源码根目录为source,首先找到GeeTest.java文件,路径为source/cts/tools/tradefed-host
/src/com/android/cts/tradefed/testtype/ GeeTest.java。

将GeeTest.java文件做如下图5点修改,即将“图一”中红色框中代码改为如“图二”蓝色框中代码,如下
图一和图二:




    修改上面图示5点后,在source/cts/tools/目录下执行mmm tradefed-host命令编译出cts-tradef
ed.jar文件,然后替换CTS工具包中tools目录下的cts-tradefed.jar文件即可。

问题4 — android.nativemeida.s1和android.nativemeida.xa包无法测试
    Android-cts-4.1版本测试套件已不存在android.nativemedia包,与这个包相关的是android.nat
ivemeida.s1和android.nativemeida.xa 2个包,由于4.1版本的CTS测试套件有更新,4.0.x版本编译
出的cts-tradefed.jar文件替换掉android-cts-4.1版本中tools目录下的cts-tradefed.jar文件后,nati
vemedia相关的2个测试包仍然无法测试,实际上也确实如此,可以说是CTS工具的向下兼容性。

解决办法:

    在android4.1源码中找到VMHostTest.java和GeeTest.java文件做如上文相同修改,再重新编译出
cts-tradefed.jar文件,用该cts-tradefed.jar文件替换CTS工具包中tools目录下的cts-tradefed.jar文
件即可,经过验证,该cts-tradefed.jar文件也适用于4.0.x版本测试套件。

备注:由于我虚拟机中的系统是32位ubuntu,因此android4.1源码无法编译,我的解决办法是将a
ndroid4.1源码下cts/tools目录复制到android4.0.x源码对应目录下,将原tools目录命名为tools_bk,
然后再执行如上编译操作即可。

海海豚 发表于 2018-3-5 15:38:43

谢谢分享~

梦想家 发表于 2018-3-5 16:35:07

:victory:
页: [1]
查看完整版本: Windows环境CTS测试实现