需要进行VTS测试时,可以自已编译出VTS测试组件,方法如下:
1、source build/envsetup.sh
2、lunch选择自己需要的工程
3、make vts
编译完成后,在out/host/linux-x86/vts目录下能看到测试组件
[100% 42332/42332] build out/host/linux-x86/vts/android-vts.zip
VTS的测试代码路径在:android\test\vts-testcase
这里以avb的测试代码为例,看看里面都有哪些内容
├── Android.bp
├── AndroidTest.xml
├── VtsSecurityAvbTest.cpp
└── vts_security_avb_test.xml
其中AndroidTest.xml,表示当前vts_security_avb_test测试的配置
<configuration description="Config for VTS AVB test cases">
<option name="config-descriptor:metadata" key="plan" value="vts-security" />
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
<option name="abort-on-push-failure" value="false" />
<option name="push-group" value="HalHidlTargetTest.push"/>
<option name="push" value="DATA/avb/q-gsi.avbpubkey->/data/local/tmp/q-gsi.avbpubkey" />
<option name="push" value="DATA/avb/r-gsi.avbpubkey->/data/local/tmp/r-gsi.avbpubkey" />
<option name="push" value="DATA/avb/s-gsi.avbpubkey->/data/local/tmp/s-gsi.avbpubkey" />
</target_preparer>
<test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
<option name="test-module-name" value="VtsSecurityAvb" />
<option name="binary-test-source" value="_32bit::DATA/nativetest/VtsSecurityAvbTest/VtsSecurityAvbTest" />
<option name="binary-test-source" value="_64bit::DATA/nativetest64/VtsSecurityAvbTest/VtsSecurityAvbTest" />
<option name="binary-test-type" value="gtest" />
<option name="precondition-first-api-level" value="29" />
<option name="test-timeout" value="3m" />
</test>
</configuration>
vts_security_avb_test.xml内容
<?xml version="1.0" encoding="utf-8"?>
<configuration description="Config for vts_security_avb_test">
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push" value="vts_security_avb_test->/data/local/tmp/vts_security_avb_test" />
<option name="push" value="q-gsi.avbpubkey->/data/local/tmp/q-gsi.avbpubkey" />
<option name="push" value="r-gsi.avbpubkey->/data/local/tmp/r-gsi.avbpubkey" />
<option name="push" value="s-gsi.avbpubkey->/data/local/tmp/s-gsi.avbpubkey" />
</target_preparer>
<test class="com.android.tradefed.testtype.GTest" >
<option name="native-test-device-path" value="/data/local/tmp" />
<option name="module-name" value="vts_security_avb_test" />
</test>
<object type="module_controller" class="com.android.tradefed.testtype.suite.module.MinApiLevelModuleController" >
<option name="api-level-prop" value="ro.product.first_api_level"/>
<option name="min-api-level" value="29"/>
</object>
</configuration>
Android.bp内容
cc_defaults {
name: "vts_security_avb_defaults",
srcs: ["VtsSecurityAvbTest.cpp"],
shared_libs: [
"libbase",
"liblog",
],
static_libs: [
"libavb",
"libcrypto_static",
"libfs_avb",
"libfs_mgr",
],
}
cc_test {
name: "vts_security_avb_test",
defaults: ["vts_security_avb_defaults"],
test_config: "vts_security_avb_test.xml",
test_suites: [
"device-tests",
"vts",
],
data: [
":q-gsi_avbpubkey",
":r-gsi_avbpubkey",
":s-gsi_avbpubkey",
],
}
cc_test {
name: "VtsSecurityAvbTest",
defaults: ["vts_security_avb_defaults"],
}
vts_config {
name: "VtsSecurityAvb",
}
我们看一下编译出来的VTS测试avb内容,进入android\out\host\linux-x86\vts\android-vts\testcases\vts_security_avb_test\arm
android/out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm$ tree
.
├── q-gsi.avbpubkey
├── r-gsi.avbpubkey
├── s-gsi.avbpubkey
└── vts_security_avb_test
vts_security_avb_test这个应该就是测试bin了,另外几个表示avb的公钥,看上面的配置,在测试时会被push到data/local/tmp/目录下。
再看一下编译出来的tools目录内容:
/android/out/host/linux-x86/vts/android-vts/tools$ tree
.
├── README
├── compatibility-common-util-tests.jar
├── compatibility-host-util-tests.jar
├── compatibility-host-util.jar
├── compatibility-tradefed-tests.jar
├── hosttestlib.jar
├── loganalysis.jar
├── tradefed-test-framework.jar
├── tradefed.jar
├── version.txt
├── vts-tradefed
├── vts-tradefed-tests.jar
└── vts-tradefed.jar
0 directories, 13 files
其中vts-tradefed就是我们跑vts case前要执行的命令,这个会准备好运行的环境。
另外,编译出来的android-vts.zip.list清单中有详细的所有测试case
android/out/host/linux-x86/vts$ tree -L 1
.
├── android-vts
├── android-vts.zip
└── android-vts.zip.list
比如我这里是要测试avb,打开android-vts.zip.list文件后,和avb相关的测试case有如下配置。
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm/q-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm/r-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm/s-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm/vts_security_avb_test
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm64
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm64/q-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm64/r-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm64/s-gsi.avbpubkey
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/arm64/vts_security_avb_test
out/host/linux-x86/vts/android-vts/testcases/vts_security_avb_test/vts_security_avb_test.config