Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > 【免费】Android-CTS-2.3-深入分析

【免费】Android-CTS-2.3-深入分析

收藏

本作品内容为【免费】Android-CTS-2.3-深入分析,格式为 docx ,大小 2057311 KB ,页数为 27页

【免费】Android-CTS-2.3-深入分析


('AndroidCTS2.3深入分析1.CTS简介CTS全称CompatibilityTestSuite兼容性测试工具。当电子产品开发出来,并定制了自己的Android系统后,必须要通过最新的CTS检测,以保证标准的androidapplication能运行在该平台下。通过了CTS验证,需要将测试报告提交给Google,已取得androidmarket的认证。CTS是一款通过命令行操作的工具。目前cts没有提供windows版本,只能在Linux下测试。在我们实际使用CTS的过程中,很可能需要根据特定的要求,来定制自己的TestPlan。这时就需要自己编译CTS,因此,本文主要向大家介绍如何编译CTS,及使用编译出的CTS工具。至于从android官网上取得的CTS,其使用方式与我们自己编译的工具类似,本文只做简单介绍。2.获取CTS工具假定Developer之前已经搭建好,linux环境。以下操作均在linux下进行。由于google的原因,Android2.3Gingerbread中的CTS是不完整的,所以我们选择Android2.2Froyo的CTS作为本文的研究对象。以下附上Google的回复:Theoretically,CTSforGingerbreadshouldbebuiltthesamewayasforFroyo.However(andthisisimportant),pleasenotethattheCTSversionthat\'scurrentlyinthegingerbreadbranchisincomplete.We\'reworkingonthat,butthelongholidaybreakshavemadeprogressslowerthanusual.来源地址:http://groups.google.com/group/android-building/browse_thread/thread/53de18db6af17513从回复中看,Gingerbread中CTS的编译过程和Froyo是一样的,命令使用方法是一样的。我猜测,有可能在Gingerbread中加入了一些新的测试,毕竟android对硬件的要求是越来越高了,从CDD可以看出。2.1下载编译源码获取CTS工具2.1.1下载git下载的android源码里包含cts,位置在/cts目录下(android2.1以后版本)如果没有也可以从此处下载git://android.git.kernel.org/platform/cts.git(源码70M左右)2.1.264bitSystem步骤根据Google的要求,自从android2.2以上,编译必须使用64bit系统,以下为android2.3CTS详尽编译步骤。\uf06c64bitSysteminstall与环境设置1.我们使用的是Ubuntu11.0164bit版本。安装的过程就不累述了,基本上和32bit系统一样。2.安装Java6JDK。因为Ubuntu11.04的JAVA源尚未更新,无法通过“官方”安装。所以我们需要编辑源列表:进入/etc/apt/下,sudovisources.list将#debhttp://archive.canonical.com/ubuntulucidpartner#deb-srchttp://archive.canonical.com/ubuntulucidpartner这两行的注示“#”去掉。可以在http://archive.canonical.com/ubuntu/pool/partner/s/sun-java6/看到有sun-java6的。执行sudoapt-getupdate,两个需要的资源已在获取列表中,再来执行:sudoapt-getinstallsun-java6-jdk要装JRE的:sudoapt-getinstallsun-java6-jre3.为了后面的android源码编译,还需要用apt-get命令安装以下组件:libc6-dev-i386g++-multiliblib32zl-devlib32ncurses5-devlibx11-devbisonflexgperf就是执行“sudoapt-getinstall以上组件名”。或者执行以下命令:sudoaptitudeinstallgit-coregnupgflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurllibncurses5-devzlib1g-dev以及以下软件包:sudoapt-getinstalllib64z1-devlibc6-dev-amd64g++-multiliblib64stdc++64.获取android源码(CTS源码包含在android源码中,也可以单独下载后编译。我们会分成两部分来说。)先来说获取整个android2.3源码,编译CTS的过程:首先安装GitandRepotools。repo工具是Google提供的一个Python脚本,方便管理多个Git版本库指令:sudoapt-getinstallgit-corecurl//git-core是git工具,Curl是Linux下一个很强大的http命令行工具,我们要用它获取repo工具,下文将会提及sudocurlhttp://android.git.kernel.org/repo>/usr/local/bin/repo//用此命令,将repo安装到/usr/local/bin/repo目录下sudochmod755/usr/local/bin/repo//赋予repo执行权限在用户目录下或者其它目录创建一个Android源码的保存目录,例如AndroidCTS。mkdirAndroidCTS//创建存放源码目录cdAndroidCTS../bin/repoinit-ugit://android.git.kernel.org/platform/manifest.git-bandroid-2.3.4_r1//如果下载指定Android版本则加上“-b版本英文名称,如果不指定则下载最新版本获取android指定版本的全部源码时间很长,视网络情况而定,我们用了大约6小时,下载了5.1G的android2.3源码。进入android源码根目录,输入以下命令:$.build/envsetup.sh//设置环境$make//编译android源码,这个时间也很长,直到新生成的out目录下产生相应的image,一切ok!$makects//此时生成测试计划,测试包,测试用例,和测试报告生成的目录编译好cts后生成的文件位置如下:#AndroidCTS/out/host/linux-x86/在该目录下包含如下测试文件PackageCTS:out/host/linux-x86/cts/android-cts.zipctsmakefile:mydroid/build/core/tasks/cts.mkrunctsprogram:mydroid/out/host/linux-x86/bin/ctstestplans:mydroid/out/host/linux-x86/cts/android-cts/repository/planstestpackages:mydroid/out/host/linux-x86/cts/android-cts/repository/testcasestestresults:mydroid/out/host/linux-x86/cts/android-cts/repository/resultsCTSprogramsettingsvalue:mydroid/cts/tools/utils/host_config.xml配置Framework环境变量:exportANDROID_ROOT=/[MyAndroid]/out/host/linux-x862.2下载gongle发布的CTS工具下载页面:http://source.android.com/compatibility/downloads.html点击Android2.3R3CompatibilityTestSuite(CTS)下载CTS工具现在Google最新发布的CTS工具是android2.3版本的,以后可以针对需要下载对应的CTS版本。3.使用3.1修改环境变量3.1.1编译的CTSCTS和androidSDK工具目录如下:/out/host/linux-x86/bin/android-sdk-linux_86/platform-tools/android-sdk-linux_86/tools将CTS工具路径和androidSDK工具路径加入环境变量,在linux下输入以下命令:\uf0d8env查阅原有环境变量,其中环境变量PATH的值为:PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/hanqigcxy/bin:\uf0d8exportPATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/hanqigcxy/bin:/home/hanqigcxy/android-source/out/host/linux-x86/bin:/home/hanqigcxy/android-sdk-linux_86/platform-tools:/home/hanqigcxy/android-sdk-linux_86/tools将CTS和androidSDK工具目录加入到环境变量中,如上红色部分所示。注意要求输入完整路径,各路径以分号间隔。3.1.2Goole发布的CTS如果使用的是Google发布的CTS工具路径为:CTS和androidSDK工具目录如下:/android-cts/tools/android-sdk-linux_86/platform-tools/android-sdk-linux_86/tools将CTS工具路径和androidSDK工具路径加入环境变量,在linux下输入以下命令:\uf0d8env查阅原有环境变量,其中环境变量PATH的值为:PATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/hanqigcxy/bin:\uf0d8exportPATH=/home/hanqigcxy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/hanqigcxy/bin:/home/hanqigcxy/android-cts/tools:/home/hanqigcxy/android-sdk-linux_86/platform-tools:/home/hanqigcxy/android-sdk-linux_86/tools将CTS和androidSDK工具目录加入到环境变量中,如上红色部分所示。注意要求输入完整路径,各路径以分号间隔。\uf0d8进入/out/host/linux-x86/cts/android-cts/repository/tools目录下,修改startcts脚本文件。将脚本中的SDK_ROOT该成自己的androidSDK路径。$cd/home/hanqigcxy/Downloads/android-cts/tools$vimstartcts修改脚本中出现的第一个SDK_ROOT,如:"SDK_ROOT=/home/hanqigcxy/android-sdk-linux_86"。注意:启动CTS的时候,应该输入startcts。3.1.3将环境变量写入系统上面配置环境变量使用Linux命令:export使用该命令设定的环境变量仅仅对当前的shell有效。如果用户再开启一个shell,那么需要再次设定环境变量。这是使用export命令的局限。但是最大的好处就是保证的系统的纯净,每次操作仅仅对当前有效。下面提供一种将环境变量写入配置文件的方法。户用不必每次启动Shell后,都要设定环境变量:Step1:输入命令,切换到root权限:\uf0d8su输入password回车Step2:进入用户文件夹,编辑.bashrc文件,例如在ubuntu下我有一个用户hanqigcxy\uf0d8cd/home/hanqigcxy\uf0d8ls-al\uf0d8vim.bashrc\uf0d8修改exportPATH=$PATH:$HOME/bin:为:exportPATH=$PATH:$HOME/bin:/home/hanqigcxy/android-source/out/host/linux-x86/bin:/home/hanqigcxy/android-sdk-linux_86/platform-tools:/home/hanqigcxy/android-sdk-linux_86/toolsStep3:启动系统\uf0d8reboot–n3.2连接设备3.2.1模拟器测试由于我们只需要用模拟器来模拟设备,因此不必搭建完整的linux下android开发环境。仅需要下载AndroidSDK并安装。见以下步骤:\uf075安装AndroidSDKStep1:点击下面链接,进入下载页面http://developer.android.com/sdk/index.htmlStep2:点击android-sdk_r08-linux_86.tgz下载SDKStep3:解压后文件目录Step4:添加环境变量,在linux下输入以下命令exportPath=………….:/home/hanqigcxy/android-sdk-linux_86/tools其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。Step5:输入以下命令,开启androidSDKandAVDManagerment$androidStep6:设定代理Step7:选定需要安装的插件\uf075创建AVD\uf075启动模拟器$emulator-avdCTS\uf075启动连接再开启一个Shell,输入以下命令:$adbstart-server$cts如果连接成功将显示一下提示:AndroidCTSversion2.2_r1Device(emulator-5554)connectedcts_host>cts_host>3.2.2Device测试(网络资源加自己的推测,需要设备做验证)\uf075在手机上安装CtsDelegatingAccessibilityService.apk$sudoadbinstall-r………………………………………………./out/host/linux-x86/cts/android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk省略号代表CtsDelegatingAccessibilityService.apk所需要的完整路径\uf075设置手机Settings->Accessibility->两个选项都选上;Settings>Application>Development三个选项都选上;Settings>Sound&Display>ScreenTimeoutshouldbesetto"NeverTimeout";\uf075修改脚本exportPath=………….:/home/hanqigcxy/android-sdk-linux_86/tools其中省略号代表环境变量Path原来的值,对系统原有的环境变量不能删除,仅仅在末尾加入一个新的换进变量路径即可。/home/hanqigcxy/android-sdk-linux_86/tools为android-sdk-linux_86/tools目录的全称,根据用户解压路径来定,修改的值可通过右键------属性来查阅。\uf075启动连接再开启一个Shell,输入以下命令:$adbstart-server$cts如果连接成功将显示一下提示:AndroidCTSversion2.2_r1Device(emulator-5554)connectedcts_host>cts_host>題目1:CTS在手機上的測試步驟?(測試機HTCG7)Step1.通過USB連接手機和PCStep2.調整HTCG7USB的連接方式為【HTCsync】,使G7允許USB調試。上述操作後,自動彈出以下界面Step3.在Linux下輸入以下命令:切換到root權限hanqigcxy@ubuntu:~$sudo-s[sudo]passwordforhanqigcxy:root@ubuntu:~#adbkill-serverroot@ubuntu:~#adbdevices顯示以下結果Step4.安裝CtsDelegatingAccessibilityServiceroot@ubuntu:~#adbinstall-r/home/hanqigcxy/android-source/out/host/linux-x86/cts/android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk顯示以下結果Step5.配置手機可能根据不同的手機,設定也会不一樣,例如網上的例子要求Settings->Accessibility->两个选项都选上;Settings>Application>Development三个选项都选上;Settings>Sound&Display>ScreenTimeoutshouldbesetto"NeverTimeout";HTCG7的實際設定:在Step2.中選擇【保持喚醒狀態選項】進入設置>應用程序>開發把三个选项都选上;進入設置>輔助功能把兩個選項都選上总之不管什么设备,需保证一下几点:1.設備的默認連接為USB調式,不能為USB充電或者USB磁盤驅動器2.設定設備始終為喚醒狀態3.設定權限,保證Host端操作無阻礙。Step開啟CTS工具進行CTS測試題目2adb如何知道設備被接入?adbusb-restartstheadbddaemonlisteningonUSB會有一個監聽USB的daemon,當設備通過USB介入後,可以做判斷。connect[:]-connecttoadeviceviaTCP/IP另外還有一通過TCP/IP的接入方法。模擬器應該是採用此方法連接。下圖,是我同時開啟模擬器和HTCG7後,調用adb查看的設備列表當一台PC機上連接有多個設備時(例如多個android手機),CTS可以指定在特定的設備中運行,但需要保證,同一時間是有一個設備上在運行CTS,並且CTS內部也有單例模式。保證一個Host端,只能運行一個CTS。題目3:CTS測試需要多少時間?Host:Ubuntu10.04(虛擬機上運行)Client:HTCG7報錯:Log信息如下,也可見附件CTS_DEBUG>>>1295313461352markmNeedRestartAdbServertotrueCTS_DEBUG>>>1295313461353NeedrestartADBserverCTS_INFO>>>MaxADBoperationsreached.RestartingADB...CTS_DEBUG>>>1295313461461deviceHC09MPL00642changedwithchangeMask=4CTS_DEBUG>>>1295313461461Devicestate:ONLINEDevice(HC09MPL00642)connectedCTS_DEBUG>>>1295313461617deviceHC09MPL00642changedwithchangeMask=2CTS_DEBUG>>>1295313461621Devicestate:ONLINECTS_INFO>>>Restartingdevice...TS_INFO>>>Restartingdevice...CTS_DEBUG>>>1295315511400executeCommand():cmd=adb-sHC09MPL00642rebootCTS_DEBUG>>>1295315528900deviceHC09MPL00642changedwithchangeMask=2CTS_DEBUG>>>1295315528902Devicestate:ONLINEDevice(HC09MPL00642)disconnected分析:錯誤出現在ADB操作超過了最大限制,必須重啟ADB之後手機自動重啟,重新啟動後,CTS測試失敗。嘗試修改CTS的配置文件host_config.xml中的參數防止手機重啟。結果失敗網上的解答是,USB驅動出現問題,要完成測試需要做修改,我判斷是HTC修改了USB驅動,限制了通過USB進行調試。過多的adb命令將到時重啟我分析不像是這個原因,有個能是廠商對USB調式做了限制,或者是adb內部有問題下面用模擬器驗證一下用模擬器進行了CTS完成測試:創建了性模擬器,包含了所有可模擬的硬件:結果:用了一天时间,發現CTSPlan仍然没有完整的执行完毕。但是单独执行CTS中的某一package确实比较快,分别执行CTS包含的52个package。每個平均耗時10-15分鐘以此計算,9-13小時可以完成測試分析:1.為什麼執行完整的CTSplan會如此耗時?主要原因是,CTSPlan的测试过程中,adb总会出现以下几个问题:MaxADBoperationsreached.RestartingADB...造成设备多次重启InstallingmettimeoutduetoUnknownreason.造成某个apk总是安装不上,就卡在哪里不停的重新安装,当到时adb操作超过上限时,测试机重启UninstallingmettimeoutduetoUnknownreason.造成某个apk总是卸载不了,就卡在哪里不停的重新卸载,当到时adb操作超过上限时,测试机重启2.為什麼執行單個package時間也不短?首先,執行單個package,重複使用adb的命令的次數少,出現問題1的概率小,不會造成adb出問題那麼主要原因因該是:在WIN7系統上用虛擬機跑linux。這樣host端(linux)和clien端(AndroidAVD)都運行在虛擬機上。硬件的利用率不高。如果用Linux系統直接測試設備,時間應該會短一點。結論:1.建議不要執行整個Plan,分Package或Test執行,比較好2.在一次測試結束後,不論結果成功與否,都要將CTS所安裝的apk完全卸載,避免下次測試失敗。3.建議不要在虛擬機上跑Linux,直接裝Linux系統。另外需要更正一點:測試結果,包含package的測試是否通過也包含每個testitem的測試情況。3.2CTS命令详解在讲解CTS命令之前,先阐述CTS测试中几个概念:\uf0d8TestPlan(Plan):测试计划,Testpackage的集合,每次Plan中都包含若干个测试包\uf0d8TestPackage(Package):测试包,Testcase的集合\uf0d8Testcase:测试用例,Test的集合\uf0d8Test:测试,每一个测试对应一个或者多个InstrumentationTest\uf0d8InstrumentationTest:Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用Instrumentation,你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。关于Instrumentation将在下一节CTS测试的含义及原理中详细介绍。这里只要明确一个概念。\uf0d8Result_Type:CTS的测试结果可以通过命令查阅,也可以通过浏览器查看下結果文件命令查阅结果:其中Testresult有四种类型的值:Pass,Fail,Timeout,NoExecuted浏览器查看XML文件:运行Performance测试Plan结果文件testResult.xml.路径:/out/host/linux-x86/cts/android-cts/repository/results/2011.01.04_00.16.40上图为performanceplan所包含的Testpackage的测试结果,可以看到这次测试每一个Testpackage的测试结果类型(result_type)都为Timeout,关于测试结果的分析,我们将在CTSDebug分析中介绍,这里主要让大家明确result_type的含义。小结一下,为了理解CTS命令的意义,我们必须明确Plan,Package,Testcase,Test,result_type,session的含义:\uf0d8CTS将Test组合为Testcase,Testcase再组合为Package,最后由Package组合为Plan。\uf0d8CTS可以执行一个Plan,一个Plan的某个Package,一个Plan的某个Test。\uf0d8CTS执行的结果以Session_ID来标识一个测试结果。\uf0d8CTS的结果类型result_type包含Pass,Fail,Timeout,NoExecuted四种上面的介绍,主要想帮助大家理解CTS命令。下表详细列出的CTS命令。参考资料:CompatibilityTestSuite(CTS)FrameworkUserManual选择红色部分下载。\uf075Avaiablecommandsandoptions:Hosthelpshowthismessage帮助文档exitexitctscommandline退出CTSPlanls--planlistavailableplans列出所有Planls--plan【plan_name】listcontentsoftheplanwithspecifiedname列出一个Plan的内容参数:plan_name,Plan的名称add--plan【plan_name】addanewplanwithspecifiedname添加一个Plan参数:plan_name,Plan的名称add--derivedplan【plan_name】-s/--session【session_id】-r/--result【result_type】deriveaplanfromthegivensession创建一个新的的Plan,这个plan通过指定一个Test_Plan的结果序号和该结果中特定的结果类型。即取得指定结果中,某一类型的所有testcase来组成一个新的Plan参数:plan_name,创建的新Plan名称session_id,已有结果的一个IDresult_type,结果中,每个testcase的结果类型取以下4值之一:pass/fail/notExecuted/timeout注:如果result_type为空,则默认为pass如果session_id为空,则默认选取最近的一次测试结果rm--plan【plan_name】/allremoveaplanorallplansfromrepository删除一个Plan参数:plan_name,Plan的名称参数为all时,删除所有的Planstart--plan【test_plan_name】runatestplan运行一个Plan参数:test_plan_name,Plan的名称start--plan【test_plan_name】-d/--device【device_ID】runatestplanusingthespecifieddevice在指定的设备上运行一个Plan参数:test_plan_name,Plan的名称device_ID,设备IDstart--plan【test_plan_name】-t/--test【test_name】runaspecifictest运行某个Plan中的一个Test参数:test_plan_name,Plan的名称test_name,Test名称start--plan【test_plan_name】-p/--package【java_package_name】runaspecificjavapackage运行某个Plan中的一个java包,该包由若干个Testcase组成参数:test_plan_name,Plan的名称java_package_name包的名称start--plan【test_plan_name】-t/--test【test_name】-d/--device【device_ID】runaspecifictestusingthespecifieddevice在指定的设备上运行某个Plan中的一个Test参数:test_plan_name,Plan的名称test_name,Test名称device_ID,设备IDstart--plan【test_plan_name】-p/--package【java_package_name】-d/--device【device_ID】runaspecificjavapackageusingthespecifieddevice在指定的设备上某个Plan中的一个java包,该包由若干个Testcase组成参数:test_plan_name,Plan的名称test_name,Test名称device_ID,设备IDPackagels-p/--packagelistavailablepackages列出所有的packagels-p/--package【package_name】listcontentsofthepackagewithspecifiedname列出一个package的内容参数:package_name,包的名字add-p/--packagerootaddpackagesfromroottorepository将包从root目录移到repository目录rm-p/--package【package_name】/allremoveapackageorallpackagesfromrepository删除一个package参数:package_name,包的名字当参数为all时,删除所有的packageResultls-r/--resultlistallresultofsessions列出所有的结果ls-r/--result-s/--session【session_id】listdetailcaseresultofaspecifiedsession列出指定的结果参数:session_id,结果的ID,通过ls–r可以参阅结果的详细信息,包括IDls-r/--result【pass/fail/notExecuted/timeout]】-s/--session【session_id】listdetailcasesofaspecifiedsessionbythespecifiedresult列出一个结果所使用的全部Testcases,根据结果的详细信息。参数:pass通过的test个数fail未通过的test个数notExecuted未执行的test个数timeout超时的test个数session_id结果的ID,通过ls–r可以参阅结果的详细信息,包括IDHistoryhistory/hlistallcommandsincommandhistory列出所有执行过的命令history/h【count】listthelatestcountrecordsincommandhistory列出history中可选择的子命令history/h-e【num】runthecommanddesignatedby\'num\'incommandhistory通过指定执行过命令的集合中的序号执行一个命令。参数:num,执行过的命令集合中的编号Devicels-d/--devicelistavailabledevices列出所有连接的设备,并显示设备的详细信息:设备ID,设备name,设备status4.CTS测试的含义及原理4.1CTSPlan在android2.2的cts中包含8个可用的TestPlan1)CTS:包含21000个测试,这些测试是检验兼容性所必须的,性能测试不包含在本计划中。随本版的跟新,本测试计划也将更新。2)Signature:包含所有针对公有APIs的署名测试。3)Android:包含针对androidAPIs的有所测试4)Java:包含所有针对Java核心library的测试5)VM:包含针对虚拟机的所有测试6)RefApp:包含针对参考应用程序的所有测试,随本版的跟新,本测试计划也将更新。7)Performance:包含所有针对性能的测试,随本版的跟新,本测试计划也将更新。8)AppSecurity:没有官方说明,猜测是针对Application安全性的测试集合4.2CTSTest和InstrumentationTest编译好的CTS工具存放在android-cts文件夹中,CTS包含的含的Plan和Package存放在repository目录中:Plans文件夹存放CTSPlanTestcase文件夹存放CTSPackage,Package以apk和xml文件形式存在Host_config.xml为配置文件,主要设置Plan中最大的test个数,测试Timeout时间等参数,比较简单,可以自行查看。\uf0d8输入命令查看某个Plan的内容:~/mydroid/out/host/linux-x86/cts/android-cts/repository/plans$catCTS.xml…………………………………..可见,某个testplan只需要包括一个到具体测试用例的uri申明即可。该uri的定义在testcases子目录下,例如以上面的一个uri="android.apidemos.cts”为例,我们可以到testcases子目录下查找名称中带有“apidemos”字符的XML文件,我们找到ApiDemosReferenceTest.xml,打开查看:\uf0d8查看对应package的xml文件~/mydroid/out/host/linux-x86/cts/android-cts/repository/testcases$catApiDemosReferenceTest.xml从xml文件中红色标识部分:apkToTestName="ApiDemos"appPackageName="android.apidemos.cts"name="ApiDemosReferenceTest"我们可以看出CTSPlan中包含的Package“android.apidemos.cts”正是对应着Package中:ApiDemosReferenceTest.apkApiDemosReferenceTest.xmlApiDemos.apk从xml文件中紫色标识部分:runner="android.test.InstrumentationTestRunner"Testname="testNumberOfItemsInListView"可以看出CTSPlan中包含的Package“android.apidemos.cts”调用InstrumentationTestRunner来执行一个InstrumentationTest。这个test就是testNumberOfItemsInListView。当然这里只执行了一个InstrumentationTest,其他例子中也可能执行多个。综上所述,CTS在Android的InstrumentationTest上又包了一层。4.3AndroidInstrumentationTest简介上一节说明了androidCTS的实质就是AndroidInstrumentationTest的封装。那么AndroidInstrumentationTest又是什么呢?这一节将向大家介绍。目的是,当我们遇到CTS测试失败后,可以定位到是那些InstrumentationTest出错。帮助我们定位错误的根源。\uf0d8JUnit作用JUnit是由ErichGamma和KentBeck编写的一个回归测试框架(regressiontestingframework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试。基于这套框架,已经port了很多版本如C#中的NUnit。对于Java,JUnit被编译成一个Jar文件,供程序员使用。\uf0d8JUnit在android中使用有限普通的Java单元测试,和Android没有任何关系。你无法测试任何关于Android系统中的API,你写的Activity,人机界面等等。所以,如果你想测试仅仅是一些封装数据的对象,或者是纯粹的数值计算,还是可以用这种方法的。原因就一个,不能测试与UI相关的代码。\uf0d8AndroidInstrumentationTest诞生InstrumentationTest针对Android的环境,扩展了业内标准的JUnit测试框架。在集成JUnitTestCase的基础上,拓展其对UI控制的能力。比如,可以向某个AP发送UI事件等。AndroidInstrumentation测试环境的主要特征有:1)可以访问Android系统对象。2)Instrumentation框架可以控制和测试应用程序。3)创建Android系统常用对象的模拟版本。4)运行单个test或testsuite的工具。5)支持以Eclipse的ADT插件和命令行方式管理Test和Test工程。但是使用AndroidInstrumentationTest仍然需要Developer编写测试程序,对于复杂兼容性检测,这显然是不符合要求的。因此Google以InstrumentationTest为基础,集成了诸多Testcase,达到自动化测试的目的。这就是如今的AndroidCTS\uf0d8命令行操作AndroidInstrumentationTestAndroidInstrumentationTest的使用方法比较多,本节主要简介如何使用命令行操作InstrumentationTest,这是因为在分析CTS测试结果时,可能需要单独调试CTSPlan中的一个test,这时在命令行中使用InstrumentationTest就是最好的方法。运行包中所有的Test:$adbshellaminstrument-wMyInstrumentationTestRunner参数MyInstrumentationTestRunner:可选择android.test.InstrumentationTestRunnerandroid.test.InstrumentationCtsTestRunnerandroid.test.InstrumentationCoreTestRunner之一Eg.如果假设com.android.foo是你的测试代码的包的根。当执行以下命令时,会执行所有的TestCase的所有Test:adbshellaminstrument-wcom.android.foo/android.test.InstrumentationTestRunner运行一个Testcase:$adbshellaminstrument\\-eclassMyInstrumentationTestCase\\-wMyInstrumentationTestRunnerEg.如果你想运行一个TestSuite,首先继承android.jar的junit.framework.TestSuite类,实现一个TestSuite(比如叫com.android.foo.MyTestSuite),然后执行以下命令执行此TestSuiteadbshellaminstrument-eclasscom.android.foo.MyTestSuite-wcom.android.foo/android.test.InstrumentationTestRunner运行一个test:$adbshellaminstrument\\-eclassMyInstrumentationTestCase#myTestMethod\\-wMyInstrumentationTestRunnerEg.如果仅仅想运行一个Test(比如就是上面MyTestCase的testFoo方法):adbshellaminstrument-eclasscom.android.foo.MyTestCase#testFoo-wcom.android.foo/android.test.InstrumentationTestRunner4.4CTSDebug分析\uf0d8一般使用的方法$startcts注意如果用手机设备调试,用root权限执行cts_host>ls--plan列出所有planout/host/linux-x86/cts/android-cts/repository/plans中有plan的具体内容cts_host>start--planVM运行某个plan测试结果在out/host/linux-x86/cts/android-cts/repository/results目录下,用浏览器看时间目录下的xml文件即可注意在改动cts后,还要makects重新编译,若只在cts目录中编译不能生效cts_host>ls-p查看当前可用的用例包cts_host>start--planAndroid-pandroid.app只运行某个用例包,节约时间cts_host>start--planAndroid-pandroid.app-tandroid.app.cts.AlertDialogTest#testAlertDialog只运行某个用例包中的某个用例\uf0d8遇到问题时方便调试的方法$adbinstallxxx/andandroid-cts/repository/testcases/SginatureTest.apk安装某个用例包$adbshellpmlistinstrumentationpm用于管理package,看当前机器安装了什么用例$adbshellaminstrument-wandroid.tests.sigtest/.InstrumentationRunneram用于管理activity运行某一Testcase$adbshellaminstrument-eclassandroid.app.cts.AlertDialogTest#testAlertDialog-wcom.android.cts.app/android.test/InstrumentationCtsTestRunner单独运行一个Test,该命令和在CTS环境下的start--planAndroid-pandroid.app-tandroid.app.cts.AlertDialogTest#testAlertDialog等效如果在一个时间很长的plan(如Android)中,某处错了,而错误信息又不全,需要单独跑一个Test,用-e指明class明就可以节约很多时间一般仅仅看failure的log就能判断错误的根源,需要长时间的经验积累,推荐按以上方法找到不能通过测试的Tests,根据4.2节的内容找到对应的源代码,分析错误原因。',)


  • 编号:1700752118
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:27页
  • 格式:docx
  • 风格:商务
  • PPT页数:2057311 KB
  • 标签:

广告位推荐

相关其他文档更多>