因為測試任務是個很復雜的過程,所以要單獨拿出來講,里面還涉及了result_reporter的內容。所以這是一個大塊。首先把斷點打在CtsTest的run方法中,刪除其他斷點,重新啟動debug模式:

首先會調用checkFields檢查一下命令行參數。然后生成plan里的包名信息。(要理解plan的意思,plan就是cts目錄下plan文件下的xml文件,它里面配置的entry代表一個測試項,一個測試項里又包含多個測試的case)。本程序執行的是Signature計劃,我們就來看看這個xml文件中的內容。

~~~
<?xml version="1.0" encoding="UTF-8"?>
<TestPlan version="1.0">
<Entry uri="android.tests.sigtest"/>
</TestPlan>
~~~
里面就包含一個測試項。再通過這個去testcases目錄去找這個測試項的配置文件:

思考一個問題,我們是如何根據Entry的配置找到testcases下的SignatureTest.xml文件的。要理解通過
~~~
<Entry uri="android.tests.sigtest"/>
~~~
找測試項,并不是說這個測試項的xml名為android.tests.sigtest,而是你要打開xml文件去里面找一個叫appNameSpace屬性名,這個名稱才是Entry配置時參照的內容,這個時候我們打開SignatureTest.xml,來驗證一下是否相同:
~~~
<?xml version="1.0" encoding="UTF-8"?>
<TestPackage AndroidFramework="Android 1.0" appNameSpace="android.tests.sigtest" appPackageName="android.tests.sigtest" jarPath="" name="SignatureTest" runner=".InstrumentationRunner" signatureCheck="true" targetBinaryName="" targetNameSpace="" version="1.0">
<TestSuite name="android">
<TestSuite name="tests">
<TestSuite name="sigtest">
<TestCase name="SignatureTest">
<Test name="testSignature"/>
</TestCase>
</TestSuite>
</TestSuite>
</TestSuite>
</TestPackage>
~~~
很巧,剛好一樣,一會我們會在程序的debug過程中,驗證這一點。再回到程序中。
檢查完參數后,就要根據plan獲取測試項:

進入buildTestToRun方法中:

該方法中會先調用createTestCaseRepo得到testcases所有的測試對象(一個xml文件代表一個測試對象)。

如上,new一個TestPackageRepo對象,參數為File對象(指向testcases目錄)和boolean值。進入TestPackageRepo對象的構造方法,看其如何獲得xml文件的信息的。

直接看parse()方法

parse方法中,首先獲得testcases目錄中所有的xml文件。查看Variables一欄中xmlFiles對象。有80個元素,說明testcases目錄下有81個xml文件。

然后parse方法會逐個遍歷這些xml文件。轉到parseTestFromXml(xmlFile)方法中:

先創建一個TestPackageXmlParser對象,該對象繼承于AbstractXmlParser,通過SAX的方式解析xml文件。有關SAX如何解析xml文件的內容我就不多闡述了。parser.parse(createStreamFromFile(xmlFile));按F5,調用的是TestPackageHandler類中的startElement方法。

該方法執行完成后,xml文件里的信息都讀到了TestPackageDef對象中了。

此時我們來看經過TestPackageXmlParser.parse方法解析的xml文件是以什么形式保存的。

對應的屬性都存在了TestPackageDef對應的屬性中,要執行的case保存在mTests的列表中。

- 前言
- (1)-windows下cts配置
- (2)-cts調試環境的搭建
- (3)-基礎庫tradefederation配置
- (4)-任務的添加
- (5)-9大組件配置
- (6)-任務的執行
- (7)-任務執行的調度室
- (8)-IBuildProvider
- (9)-IDeviceRecovery
- (10)-TestDeviceOptions
- (11)-ICommandOptions
- (12)-ITargetPreparer
- (13)-任務執行過程
- (14)-任務執行過程
- (15)-任務執行完
- (16)-logcat信息收集系統
- (17)-fastboot狀態監聽器
- (18)-設備恢復
- (19)-設備狀態的分類以及恢復模式的分類
- (20)-cts自身log系統
- (21)-測試結果收集系統
- (22)-自動檢測設備
- (23)-設備分類
- (24)-case的組織