美文网首页
CTS调试模块

CTS调试模块

作者: 梧叶已秋声 | 来源:发表于2023-05-30 09:31 被阅读0次

    在调试CTS模块之前,需先对Android中的测试有一定的了解,特别是colab上的教程,建议阅读。
    colab教程
    测试应用 | Android Studio | Android Developers

    android中的测试分为:本地测试 和 插桩测试。

    当使用android studio 创建一个新的 Android 项目时,默认获得以下源集。

    • androidTest:包含称为instrumented测试的测试。

      插桩测试(androidTest源码集)

      这些测试在真实或模拟的 Android 设备上运行,因此它们反映了现实世界中会发生什么,但速度也慢得多。

    • test:包含称为本地测试的测试。

      本地测试(测试源集)

      这些测试在开发机器的 JVM 本地运行,不需要模拟器或物理设备。正因为如此,他们跑得很快,但他们的忠诚度较低,这意味着他们的行为不像在现实世界中那样。

    CTS中的目录结构更复杂。

    目前有以下几种方式,调试模块。

    am instrument
    atset
    源码导入 android studio

    1. am instrument

    1.1 修改源码

    修改后(例如添加log)。

    1.2 编译模块

    进入模块目录,mma 编译生成新的apk。如果想快一点就加上-j,例如 mma -j20 ,具体加多少看机器配置。加太多有可能会崩掉。最后会在out/host/linux-x86/cts 目录下生成。

    source build/envsetup.sh
    lunch aosp_arm64
    cd cts/tests/camera
    mma
    

    1.3 安装apk

    执行adb install -g 安装 apk.

    adb install -g CtsCameraTestCases.apk
    

    GitHub Copilot: 在 Android 兼容性测试套件(CTS)中,cts-tradefed 工具使用 Android Debug Bridge(ADB)来与 Android 设备进行通信,并在设备上运行测试用例。当 cts-tradefed 工具需要在设备上安装和运行测试应用程序时,它会使用 adb install 命令来安装应用程序,并使用 adb shell 命令来启动应用程序。在 Android 系统中,当应用程序需要访问敏感权限(例如读取联系人或发送短信)时,系统会弹出一个对话框,询问用户是否授权该应用程序访问该权限。如果用户授权了该权限,应用程序就可以访问该权限所需的功能。在 CTS 测试中,cts-tradefed 工具会自动授权测试应用程序所需的权限,以确保测试用例可以正确地执行。这是因为在 CTS 测试中,测试应用程序是由 CTS 测试框架自动安装和运行的,而不是由用户手动安装和运行的。因此,为了确保测试用例可以正确地执行,cts-tradefed 工具会自动授权测试应用程序所需的权限。具体来说,cts-tradefed 工具会在安装测试应用程序时,使用 adb install -g 命令来安装应用程序。-g 参数表示在安装应用程序时自动授予所有权限。这样,当测试应用程序在设备上运行时,它就可以自动访问所有需要的权限,而不需要用户手动授权。

    有时候apk无图标,可以使用pm list查看是否正常安装。

    pm list packages -e "camera"
    

    如果执行 adb install -r xx.apk ,后面执行单元测试可能会报错,这是由于需要permission。因此这种情况最好还是执行 -g去安装apk。如果执行 adb install -r xx.apk,在 settings里面打开camera的权限后,即可正常运行。
    如需卸载可使用 adb uninstall包名可在AndroidManifest.xml中查看。

    adb uninstall android.camera.cts
    

    1.4 使用am instrument测试

    执行am instrument 会运行整个测试软件包。要运行测试软件包中的所有测试类,请输入:

    adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner
    

    语法如下所示:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    am instrument 工具使用 -e 标记以键值对的形式将测试选项传递给 AndroidJUnitRunnerInstrumentationTestRunner,语法如下:

    -e <key> <value>

    GitHub Copilot: AndroidJUnitRunnerInstrumentationTestRunner都是Android测试框架中的测试运行器,但它们之间有一些区别。InstrumentationTestRunner是Android测试框架的早期版本中使用的测试运行器,它是一个基于Instrumentation的测试运行器,可以运行在Android设备或模拟器上。它可以运行JUnit3JUnit4测试,并提供了一些额外的功能,如测试套件的支持、测试超时、测试结果的输出等。AndroidJUnitRunner是Android测试框架的更新版本中使用的测试运行器,它是一个基于JUnit4的测试运行器,可以运行在Android设备或模拟器上。它提供了与JUnit4相同的功能,并支持JUnit4的注释和规则。此外,它还提供了一些额外的功能,如多进程测试、测试过滤、测试超时、测试结果的输出等。因此,AndroidJUnitRunner是更先进和更强大的测试运行器,建议在新的Android测试项目中使用它。

    因此可以使用如下命令测试某个方法。

    adb shell am instrument -e class android.hardware.camera2.cts.ZoomCaptureTest#testRawZoomCapture -w android.camera.cts/androidx.test.runner.AndroidJUnitRunner
    

    执行完这条命令后,该函数会被执行,可以看到添加的log被执行。

    1.5 优缺点

    优点:无需执行 ./cts-tradefed 就能执行JUnit单元测试,编译速度快。

    缺点:功能相对有限,不支持批量测试或高度定制化的测试场景。

    2. atset

    2.1 配置环境

    source build/envsetup.sh
    lunch aosp_arm64
    cd cts/tests/camera
    

    2.2 构建测试模块

    执行m CtsCameraTestCases构建CtsCameraTestCases模块:

    m CtsCameraTestCases
    

    2.3 测试

    2.3.1 测试整个模块

    atest CtsCameraTestCases
    

    执行 atest CtsCameraTestCases 会自动测试整个模块。

    2.3.2 测试特定方法

    官方文档中例子如下(更多请参考官方文档):

    atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
    

    也就是说,这里可以执行 atest className#methodName

    执行命令:

    atest android.hardware.camera2.cts.ZoomCaptureTest#testRawZoomCapture
    

    log出现,表示函数被执行。

    2.4 优缺点

    优点:这种方式,不用手动安装apk 。

    缺点:需找到对应模块,第一次构建模块,耗时较长。

    3. 源码导入 android studio后,直接debug

    3.1 导入Android Studio

    可参考这些:
    CTS自带测试用例(buletooth)导入Android Studio图文教程
    Android Studio导入CTS测试用例并测试
    (2)-cts调试环境的搭建

    3.2 优缺点

    优点:可直接run,走gradle编译。

    缺点:需配置gradle,导入framework等jar。配置较为复杂。可能适用于错误较多,长期debug的project。

    最后来个AI总结版。
    cts-tradefed、am instrument 和 atest 这3种执行JUnit测试的方法有什么优缺点?

    Poe中GPT4的回答:

    这三种执行JUnit测试的方法分别是CTS-TradeFed、am instrumentatest,它们在Android测试框架中都有应用。下面我们来分别看一下它们的优缺点:

    1. CTS-TradeFed (Compatibility Test Suite - Trade Federation)
      • 优点:
        • 专为Android兼容性测试而设计,确保设备及应用满足Android兼容性定义文档 (CDD) 的要求。
        • 支持批量测试和自动化测试。
        • 提供灵活的测试定制和运行选项。
        • 可以在设备测试时生成详细的测试报告。
      • 缺点:
        • 相对复杂,可能需要更多的时间来学习和配置。
        • 对于非兼容性测试场景,可能不是最佳选择。
    2. am instrument (Activity Manager Instrument)
      • 优点:
        • 作为Android系统的一部分,可以直接在设备上运行。
        • 使用简单,命令行即可执行。
        • 适用于简单的测试场景。
      • 缺点:
        • 功能相对有限,不支持批量测试或高度定制化的测试场景。
        • 测试报告可能不如CTS-TradeFed详尽。
    3. atest (Android Test Framework)
      • 优点:
        • 适用于单元测试、集成测试和端到端测试。
        • 提供了一个统一的测试入口,可以将多个测试工具整合在一起。
        • 支持Gradle构建系统,方便与Android Studio集成。
        • 支持测试分片、并行执行和结果报告。
      • 缺点:
        • 相较于am instrument,使用起来相对复杂,需要配置环境变量。
        • 对于非Android开发者,学习成本可能较高。

    总结:在选择执行JUnit测试的方法时,应根据测试场景和需求进行选择。CTS-TradeFed更适合兼容性测试,am instrument适用于简单的测试场景,而atest则提供了丰富的功能和灵活性,适用于多种测试场景。

    一点碎碎念:简书现在很难传图,传图很卡,所以图片都删去了。

    参考链接:
    CTS本地手动测试方法_camera cts 如何添加log
    Android Studio导入CTS测试用例并测试
    使用 adb 运行测试
    插桩测试
    运行测试 (Atest)
    使用am instrument验证CTS问题
    Google atest的使用
    使用Instrumentation命令测试cts apk

    相关文章

      网友评论

          本文标题:CTS调试模块

          本文链接:https://www.haomeiwen.com/subject/qvisedtx.html