本机代码覆盖了Android宋构建系统

问题描述 投票:5回答:1

我试图生成使用宋楚瑜构建系统与AOSP源代码,我的本地组件代码覆盖率报告。

我已经扩展AOSP vhal但单元测试用例是相同下面的链接。 http://androidxref.com/8.1.0_r33/xref/hardware/interfaces/automotive/vehicle/2.0/default/tests/

在Android.bp尝试添加下面cc_test,cc_binary

native_coverage : true,

    cflags: [
         "-g",
         "-O0",
         "-fprofile-arcs",
         "-ftest-coverage",
    ],

     ldflags : [
        "-fprofile-arcs",
        "-ftest-coverage",
    ],

本机二进制单元测试覆盖在出/目标/产品产生的,但我不能找到这个gcno中间体。

以下运行命令给我*为每个测试文件.gcda文件。

adb shell \
    GCOV_PREFIX=/data/local/tmp \
    GCOV_PREFIX_STRIP=`echo $ANDROID_BUILD_TOP | grep -o / | wc -l` \
    /data/local/tmp/unit-tests-coverage

我曾尝试下面的链接,但不知道如何着手:(

http://logan.tw/posts/2015/04/28/check-code-coverage-with-clang-and-lcov/ https://android.googlesource.com/platform/bionic.git/+/master-soong https://android.googlesource.com/platform/build/soong/+/581341d%5E%21/ https://android.googlesource.com/platform/external/e2fsprogs/+/fedfb27%5E%21/ https://android.googlesource.com/platform/development/+/master/scripts/acov#23 http://androidxref.com/9.0.0_r3/xref/bionic/README.md#293

我不知道,如果谷歌的VTS框架可以在这里用来生成本地代码覆盖率。 https://codelabs.developers.google.com/codelabs/android-vts-8/#6

“gcnodir”产生,但不知道如何利用它。 /coverage/data/nativetest64/vehicle-unit-tests-coverage/unit-tests-coverage.gcnodir

android code-coverage android-source gcov android-soong
1个回答
2
投票

发布答案,我对这样其他用户的问题。

安装覆盖工具:

  1. sudo apt-get install lcov(这应该安装LCOV 1.12)
  2. sudo apt-get install gcc-4.6(锵生成.gcno近似等于与gcc 4.2不与gcov的-4.8兼容。安装GCC-4.6得到的gcov-4.6,并用 '--gcov工具/usr/bin/gcov-4.6' 调用LCOV)
  3. 下载LLVM 3.8 LLVM-CoV的工作:http://releases.llvm.org/download.html

所有本地单元测试用例即仪表二进制需要对目标执行。要建立并发出铿锵的基础仪器分析。例如:http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/automotive/vehicle/2.0/default/Android.bp#82(重命名为车辆的管理器单元测试用于较短的名称)

  • 出口NATIVE_COVERAGE = TRUE
  • 添加native_coverage: true测试模块中Android.bp
  • 转到:模块名/测试
  • 使用毫米或make命令来构建本地二进制
  • 实施例:对于硬件/接口/汽车/车辆/ 2.0 /默认/测试/:MMA或使车辆的管理器单元测试-j32
  • 拷贝覆盖启用仪表二进制目标
  • adb push out/target/product/product_name/data/nativetest64/vendor/vehicle-manager-unit-test /data/nativetest64/vehicle-manager-unit-test adb shell chmod +x /data/nativetest64/vehicle-manager-unit-test
  • 运行测试用例并生成.gcda文件 adb shell \ GCOV_PREFIX=/data/local/tmp \ GCOV_PREFIX_STRIP=echo $ANDROID_BUILD_TOP | grep -o / | wc -l \ /data/nativetest64/vehicle-manager-unit-test
  • adb shell find -iname *.gcda
  • adb pull /data/local/tmp/proc/self/cwd/out/soong/.intermediates/hardware/interfaces/automotive/vehicle/2.0/default/vehicle-manager-unit-test/android_x86_64_silvermont_vendor_cov/obj/hardware/interfaces/automotive/vehicle/2.0/default/tests/ .(Destination folder)
  • 从GCNODIR提取GCNO文件,以便与GCDA文件相同的文件夹(在出/超龄/数据/ nativetest64 /供应商/车辆的管理器单元测试生成的存档文件)
  • llvm-cov gcov -f -b *.gcdahttps://llvm.org/docs/CommandGuide/llvm-cov.html
  • lcov --directory . --base-directory . --gcov-tool /usr/bin/gcov-4.6 --capture -o cov.infohttp://ltp.sourceforge.net/coverage/lcov.php
  • genhtml cov.info -o output

sample coverage report for vhal 2.0这里是它封装所有的命令脚本:https://gist.github.com/pankajgangwar/f070b8b54e83543f8e3638dcd2cae1b8


0
投票

qazxsw POI阐述了如何生成覆盖报告,这确实需要qazxsw POI:

这些here启用测试覆盖率的产生:GTest

那么就必须使用flags-fprofile-arcs -ftest-coverage

这是输出,那么可以到gcov(用于gcov main_test.cpp)进行传递:

lcov

从中可以产生reference格式的$ lcov --coverage --directory . --output-file main_coverage.info 覆盖报告:

lcov

HTML这些$ genhtml main_coverage.info --output-directory out 文件.gcda数据文件。 .gcnodir还具有输出选项gcov,想要消耗与web服务的覆盖数据时可能出现得心应手。


从您提供的链接gcov可被用来生成了整整项目:

收集代码覆盖率的结果:

--json-format

生成HTML文件:

one of the examples

其中,唯一不同的是,该包装脚本将需要进行调整,以调用$ lcov --directory . \ --base-directory . \ --gcov-tool gcov.sh \ --capture -o cov.info 。大概一个甚至可以忽略与选项$ genhtml cov.info -o output 通过包装,因为它应该被直接调用。


因为人们只能通过将编译器标志准备覆盖报告中,gcov--gcov-tool命令应该是设置为生成后的脚本中,这样他们就自动生成报告。

© www.soinside.com 2019 - 2024. All rights reserved.