Cts框架解析(13)-任务执行过程

因为测试任务是个很复杂的过程,所以要单独拿出来讲,里面还涉及了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的列表中。

时间: 2024-08-27 22:22:58

Cts框架解析(13)-任务执行过程的相关文章

Cts框架解析(7)-任务执行的调度室

TestInvocation /** * {@inheritDoc} */ @Override public void invoke(ITestDevice device, IConfiguration config, IRescheduler rescheduler) throws DeviceNotAvailableException, Throwable { try { mStatus = "fetching build"; config.getLogOutput().init(

Cts框架解析(15)-任务执行完

case执行完毕后,会回到CtsTest的run方法中: 这个时候会先将mRemainingTestPkgs列表的第一项移除,以便下一次取第一个的时候,取的是新的TestPackage对象,然后根据case的类别来做相应的重启操作,最后返回到主界面.最后,截图留下犯罪现场,下载之前安装的jar包.在finally语句块中report未执行的case.为执行的case是通过执行其testStarted方法,但是不执行testEnded方法,让监听器识别出这条case未执行. 当CtsTest的ru

Cts框架解析(5)

解析配置文件 Cts框架分为9大部分: cmd_options:命令行接受的参数选项,command包中. device_requirements:设备相关要求,device包中 device_options:设备参数,device包中 builde_provider:版本提供者,build包中 target_preparer:预置条件准备,targetprep包中 test:测试类型,存在testtype包中 device_recovery:任务执行过程中设备异常后的设备恢复,device包中

Cts框架解析(2)-cts调试环境的搭建

上一篇文章中说了怎样在windows搭建cts以及执行cts进行測试.这篇文章来讲讲怎样在eclipse中配置源代码,进行debug调试. 下载 cts源代码地址:https://android.googlesource.com/platform/cts 能够使用git下载到本地. 文件夹结构 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFC

Cts框架解析(9)-IDeviceRecovery

当设备处于offline状态时,cts框架就要调用IDeviceRecovery接口类去做相应的恢复工作. 接口 /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the Licens

Cts框架解析(6)-任务的执行

前两篇讲了任务的添加和9大项配置,这篇讲任务的执行. 任务的执行 任务的执行在CommandScheduler的run方法中,所以删除所有的断点,在run方法中打上断点,重启启动debug: 先看while循环下面的第一行代码 ExecutableCommand cmd = dequeueConfigCommand(); private ExecutableCommand dequeueConfigCommand() { try { // poll for a command, rather t

Cts框架解析(1)-windows下cts配置

环境搭建 下载 cts工具的下载地址:http://source.android.com/compatibility/downloads.html windows选择Android4.4 R3 Compatibility Test Suite (CTS) - ARM下载. 文件夹结构 解压后的文件夹结构例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L5L2T/fontsize/400/fil

Cts框架解析(6)-任务的运行

前两篇讲了任务的加入和9大项配置,这篇讲任务的运行. 任务的运行 任务的运行在CommandScheduler的run方法中,所以删除全部的断点,在run方法中打上断点,重新启动启动debug: 先看while循环以下的第一行代码 ExecutableCommand cmd = dequeueConfigCommand(); private ExecutableCommand dequeueConfigCommand() { try { // poll for a command, rather

Cts框架解析(4)

Debug debug的入口在CtsConsole类,所以我们把第一个断点打在249行: Console console = new CtsConsole(); 按F6再按F5进入到Console.startConsole方法中. 按F5进入GlobalConfiguration.createGlobalConfiguration方法中. 该方法内主要是读取全局配置文件并设置IGlobalConfiguration接口对象sInstance.主要方法为95行读取文件的getGlobalConfi