摘要:本文通过实例分析下ACTS应用兼容性测试套件移植案例,以及移植过程中特定的操作的原理。

本文分享自华为云社区《移植案例与原理 - XTS子系统之应用兼容性测试套件》,作者:zhushy。

XTS(X Test Suite)子系统是OpenHarmony生态认证测试套件的集合,当前包括:

  • acts(application compatibility test suite)应用兼容性测试套件,看护北向HAP兼容、OpenHarmony开发API兼容。
  • hats(Hardware Abstraction Test Suite )硬件抽象测试套,看护HDI层接口。
  • dcts(Distributed Compatibility Test Suite )分布式兼容性测试套,看护分布式兼容(待上线)

本文主要通过实例分析下ACTS应用兼容性测试套件移植案例,以及移植过程中特定的操作的原理。主要讲述的是轻量系统兼容性测试。轻量系统因系统能力限制,兼容性测试在系统初始化阶段进行;并且各设备烧录工具存在差异,导致自动化工具(xDevice工具)无法实现真正的自动适配,因此认证执行方式不对合作伙伴进行限制。流程如下:

  • 步骤1 编译适配:XTS子系统加入到编译组件中,随版本一起编译;
  • 步骤2 本地执行:完成兼容性测试;

1、编译适配XTS子系统

1.1 产品解决方案适配

需要在产品解决方案配置文件中增加增加xts_acts与xts_tools组件定义。下面看几个示例,文件vendor\bestechnic\xts_demo\config.json中的配置片段:

 {
"subsystem": "xts",
"components": [
{ "component": "xts_acts", "features":
[
"config_ohos_xts_acts_utils_lite_kv_store_data_path = \"/data\"",
"enable_ohos_test_xts_acts_use_thirdparty_lwip = true"
]
},
{ "component": "xts_tools", "features":[] }
]
}

文件vendor\goodix\gr5515_sk_xts_demo\config.json中的配置片段:

 {
"subsystem": "xts",
"components": [
{ "component": "xts_acts", "features":
[
"config_ohos_xts_acts_utils_lite_kv_store_data_path = \"/data\""
]
},
{ "component": "xts_tools", "features":[] }
]
},

1.2 编译链接

需要通过链接选项指定需要链接的ACTS的部件编译库文件,会使用到 --whole-archive 和 --no-whole-archive这2个ld链接选项。–whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,–no-whole-archive 则关掉这个特性。在文件vendor\goodix\gr5515_sk_xts_demo\BUILD.gn中,对ACTS的编译文件进行链接。其中⑴到⑵处的链接选项为编译出的属于ACTS的组件测试库文件。

 executable("${fw_img_name}.elf") {
deps = [
"tests:drivers",
"tests:fs_test",
"tests:ohosdemo",
"tests:shell_test",
"//build/lite:ohos",
] ldflags = [
"-Wl,--whole-archive",
# "-lfs_test",
# "-ldrivers_test",
# "-lapp_hello",
"-lshell_test",
⑴ "-lhctest",
"-lmodule_ActsBootstrapTest",
"-lmodule_ActsWifiIotTest",
"-lmodule_ActsUtilsFileTest",
"-lmodule_ActsKvStoreTest",
"-lmodule_ActsParameterTest",
"-lmodule_ActsSamgrTest",
"-lhuks_test_common",
"-lmodule_ActsHuksHalFunctionTest",
"-lmodule_ActsDfxFuncTest",
"-lmodule_ActsUpdaterFuncTest",
⑵ "-lmodule_ActsHieventLiteTest",
"-Wl,--no-whole-archive",
]
}

在文件vendor\bestechnic\xts_demo\config.json中,需要链接的ACTS部件测试库文件写在了bin_list里的force_link_libs里。

 "bin_list": [
{
"elf_name": "wifiiot",
"bsp_target_name": "best2600w_liteos",
"signature": "false",
"burn_name": "rtos_main",
"enable": "true",
"force_link_libs": [
"bootstrap",
"abilityms",
"bundlems",
"broadcast",
"hctest",
⑴ "module_ActsParameterTest",
"module_ActsBootstrapTest",
"module_ActsDfxFuncTest",
"module_ActsHieventLiteTest",
"module_ActsSamgrTest",
⑵ "module_ActsKvStoreTest"
]
},
.......
],

然后在文件device\soc\bestechnic\bes2600\BUILD.gn里组装编译链接选项,相关代码片段如下:

 # config bin from vendor/bestechnic/<product_name>/config.json
foreach(bin_file, bin_list) {
...... if (build_enable == "true") {
...... # force link invisible function ,which ar to lib
ldflags += [ "-Wl,--whole-archive" ]
foreach(force_link_lib, bin_file.force_link_libs) {
ldflags += [ "-l${force_link_lib}" ]
}
ldflags += [ "-lbsp${bsp_target_name}" ]
ldflags += [ "-Wl,--no-whole-archive" ]
......
}
}

在文件vendor_asrmicro\xts_demo\config.json中,存在这样的配置片段。

  "xts_list": [
{
"enable": "true",
"xts_modules": [
"ActsKvStoreTest",
"ActsDfxFuncTest",
"ActsHieventLiteTest",
"ActsSamgrTest",
"ActsParameterTest",
"ActsWifiServiceTest",
"ActsWifiIotTest",
"ActsBootstrapTest"
]
}
]

然后,在文件device_soc_asrmicro\asr582x\liteos_m\sdk\BUILD.gn文件中组装编译链接选项。

 foreach(xts_item, xts_list) {
xts_enable = xts_item.enable
if(xts_enable == "true")
{
defines = [ "CFG_HARMONY_SUPPORT" ]
ldflags += [
"-Llibs",
"-Wl,--whole-archive",
"-lhctest",
"-lbootstrap",
"-lbroadcast",
]
foreach(xts_module, xts_item.xts_modules) {
ldflags += [ "-lmodule_${xts_module}" ]
}
ldflags += [ "-Wl,--no-whole-archive" ]
}
}

在产品解决方案配置文件中增加的bin_list、xts_list这些配置选项都不是config.json中的默认的标准选项。各个方案实现的风格差异比较大,建议使用第一种,写在文件vendor\goodix\gr5515_sk_xts_demo\BUILD.gn中会比较好。另外,需要使用hb命令触发debug版本(非debug版本不会触发测试编译)。

2、XTS子系统编译流程

2.1 hb编译构建工具读取config.json

编译构建工具hb会读取产品解决方案配置文,获取参与编译的子系统以及部件信息。XTS测试支持对各个子系统、部件的接口进行测试,产品解决方案配置了哪些子系统才会对这些配置的子系统进行测试。后文会继续解释。

2.2 XTS编译配置文件

在文件中test\xts\acts\build_lite\BUILD.gn中,定义了ACTS的测试套件。⑴处的ohos_xts_test_args表示,如果指定了具体的xts的测试套件,则只编译xts测试编译选项中指定的测试套件,后文会分析怎么在编译构建时指定测试套件。如果没有在编译构建时指定测试套件,则默认编译全部的测试套件。对于不同的内核类型,测试套件是有差异的,如⑵所示。对于轻量系统,支持的测试套件主要包含communication_lite、startup_lite、iot_hardware_lite、security_lite、hiviewdfx_lite、distributed_schedule_lite、update_lite、utils_lite等子系统及其部件。

all_features = []
features = []
⑴ if (ohos_xts_test_args != "") {
args = [
"--method_name",
"get_target_modules",
"--arguments",
"all_features=${ohos_xts_test_args}",
]
all_features +=
exec_script(rebase_path("//test/xts/tools/lite/build/utils.py"),
args,
"list lines")
} else {
⑵ if (ohos_kernel_type == "liteos_m") {
all_features += [
"//test/xts/acts/communication_lite/lwip_hal:ActsLwipTest",
"//test/xts/acts/communication_lite/wifiservice_hal:ActsWifiServiceTest",
"//test/xts/acts/utils_lite/file_hal:ActsUtilsFileTest",
"//test/xts/acts/startup_lite/syspara_hal:ActsParameterTest",
"//test/xts/acts/iot_hardware_lite/iot_controller_hal:ActsWifiIotTest",
"//test/xts/acts/utils_lite/kv_store_hal:ActsKvStoreTest",
"//test/xts/acts/security_lite/huks/liteos_m_adapter:ActsHuksHalFunctionTest",
"//test/xts/acts/hiviewdfx_lite/hilog_hal:ActsDfxFuncTest",
"//test/xts/acts/hiviewdfx_lite/hievent_hal:ActsHieventLiteTest",
"//test/xts/acts/distributed_schedule_lite/system_ability_manager_hal:ActsSamgrTest",
"//test/xts/acts/update_lite/dupdate_hal:ActsUpdaterFuncTest",
"//test/xts/acts/startup_lite/bootstrap_hal:ActsBootstrapTest",
]
} else if (ohos_kernel_type == "liteos_a") {
all_features += [
......
]
} else if (ohos_kernel_type == "linux") {
all_features += [
......
]
}
}

在该文件中,还有如下代码片段。可以看出,只要构建类型为debug并且没有指定notest测试编译选项时才会编译ACTS测试套。测试编译选项的指定如下所示:hb build -t notest。

 if (ohos_build_type == "debug" && ohos_test_args != "notest") {
_all_features = ""
_product_json = rebase_path("${product_path}/config.json")
foreach(one_feature, all_features) {
_all_features = _all_features + one_feature + ","
}
_args = [
"--method_name",
"filter_by_subsystem",
"--arguments",
"testsuites=${_all_features}#product_json=${_product_json}",
]
features += exec_script(rebase_path("//test/xts/tools/lite/build/utils.py"),
_args,
"list lines")
}

接下来看下,如何在编译时指定特定的XTS测试套件进行编译。上文提到的ohos_xts_test_args在文件build\lite\hb_internal\build\build_process.py中,代码如下。可以看出测试套件相关的编译选项有xts和notest两种。⑵处当指定xts测试编译选项时,紧接着指定的测试套件会保存进变量ohos_xts_test_args。支持指定的测试套件,应该需要来自上文中的全部的测试套件。具体的使用示例为:hb build -t xts //test/xts/acts/communication_lite/lwip_hal:ActsLwipTest。不过这样的用法应该比较罕见,使用全量编译测试套件的就好。

  @test.setter
def test(self, test_args):
⑴ cmd_list = ['xts', 'notest']
if test_args[0] in cmd_list:
if test_args[0] == 'notest':
self.register_args('ohos_test_args', 'notest')
else:
⑵ self._test = test_args[1]
if len(test_args) > 1:
self.register_args('ohos_xts_test_args', self._test)
else:
raise OHOSException('Error: wrong input of test')

2.3 生成的测试套的库文件

成功编译后,在编译构建输出目录,如out/v200zr/xts_demo/libs,生成测试套和测试框架的库文件,XTS子系统测试套.a归档格式为:libmodule_{测试套件模块名称}.a,测试框架归档格式:libhctest.a。这些生成的文件和上文中的链接选项可以对应起来。

-rw-r--r-- 1 zhushangyuan zhushangyuan    28842 Feb 10 16:49 libhctest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 53024 Feb 10 16:49 libhuks_test_common.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 22562 Feb 10 16:49 libmodule_ActsBootstrapTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 7560 Feb 10 16:49 libmodule_ActsDfxFuncTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 6096 Feb 10 16:49 libmodule_ActsHieventLiteTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 96278 Feb 10 16:49 libmodule_ActsHuksHalFunctionTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 31346 Feb 10 16:49 libmodule_ActsKvStoreTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 69010 Feb 10 16:49 libmodule_ActsParameterTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 197120 Feb 10 16:49 libmodule_ActsSamgrTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 8256 Feb 10 16:49 libmodule_ActsUpdaterFuncTest.a
-rw-r--r-- 1 zhushangyuan zhushangyuan 20968 Feb 10 16:49 libmodule_ActsWifiServiceTest.a

3、 移植适配XTS定制选项

在移植案例时,产品配置文件中适配XTS子系统时,有时候指定了定制选项如config_ohos_xts_acts_utils_lite_kv_store_data_path、enable_ohos_test_xts_acts_use_thirdparty_lwip等等。本小节专门看下这些定制选项。

3.1 ohos_xts_test_args

该选项声明在文件test\xts\tools\lite\build\suite_lite.gni中。前文已经了解到,编译构建命令行可以指定要编译的xts测试套件。理论上,也可以在产品解决方案配置文件中指定。注意不能同时在编译构建命令行参数中指定,会覆盖。无用的知识点又增加了。

declare_args() {
ohos_xts_test_args = ""
}

3.2 enable_ohos_test_xts_acts_use_thirdparty_lwip

该选项enable_ohos_test_xts_acts_use_thirdparty_lwip声明在文件test\xts\acts\communication_lite\lwip_hal\BUILD.gn,默认为true。在移植适配时,继续指定该选项为true,可以说是不必要的。

declare_args() {
enable_ohos_test_xts_acts_use_thirdparty_lwip = true
}

该选项的作用是什么呢?在文件test\xts\acts\communication_lite\lwip_hal\BUILD.gn中,⑴处表明,会依赖Liteos_m内核编译。从选项的名字和实际的作用,让人摸不着头脑。

hctest_suite("ActsLwipTest") {
suite_name = "acts" sources = [ "src/lwip_func_test.c" ] if (enable_ohos_test_xts_acts_use_thirdparty_lwip) {
⑴ deps = [ "//kernel/liteos_m:kernel" ]
}
cflags = [ "-Wno-error" ]
}

3.3 config_ohos_xts_acts_utils_lite_kv_store_data_path

该选项config_ohos_xts_acts_utils_lite_kv_store_data_path声明在文件test\xts\acts\utils_lite\kv_store_hal\BUILD.gn,如下⑴处所示。注意下⑵处把这个配置define为了DATA_PATH。

declare_args() {
⑴ config_ohos_xts_acts_utils_lite_kv_store_data_path = ""
} hctest_suite("ActsKvStoreTest") {
suite_name = "acts"
sources = [ "src/kvstore_func_test.c" ] include_dirs = [
"src",
"//utils/native/lite/include",
"//base/iot_hardware/peripheral/interfaces/kits",
]
cflags = [ "-Wno-error" ]
defines =
⑵ [ "DATA_PATH=\"${config_ohos_xts_acts_utils_lite_kv_store_data_path}\"" ]
}

在文件test\xts\acts\utils_lite\kv_store_hal\src\kvstore_func_test.c中,有如下代码。在移植适配XTS子系统时,还必须要加上这一行 “config_ohos_xts_acts_utils_lite_kv_store_data_path = “/data””。如果不加的话,config_ohos_xts_acts_utils_lite_kv_store_data_path等于空字符串“”,DATA_PATH被定义了空字符串“”,没有起到提供默认值的作用。

#ifndef DATA_PATH
#define DATA_PATH "/data"
#endif

参考站点

参考了下述站点,或者推荐读者阅读下述站点了解更多信息。

点击关注,第一时间了解华为云新鲜技术~

OpenHarmony移植:XTS子系统之应用兼容性测试套件的更多相关文章

  1. 【OpenHarmony移植案例与原理】XTS子系统之应用兼容性测试用例开发

    摘要:本文主要介绍ACTS应用兼容性测试用例开发编译. 本文分享自华为云社区<移植案例与原理 - XTS子系统之应用兼容性测试用例开发>,作者: zhushy . XTS(X Test S ...

  2. 【转】兼容性测试套件(CTS)框架用户手册

    原文网址:http://blog.sina.com.cn/s/blog_416166e90102v6bi.html 兼容性测试套件(CTS)框架用户手册 1.为什么需要兼容性测试(以下称CTS)? 2 ...

  3. 安卓CTS官方文档之兼容性测试套件简介-attach

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite  兼容性测试套件 H ...

  4. 安卓CTS官方文档之兼容性测试套件简介

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 Ho ...

  5. OpenHarmony移植案例与原理:startup子系统之syspara_lite系统属性部件

    摘要:本文介绍下移植开发板时如何适配系统属性部件syspara_lite,并介绍下相关的运行机制原理. 本文分享自华为云社区<openharmony移植案例与原理 - startup子系统之sy ...

  6. OpenHarmony移植:如何适配utils子系统之KV存储部件

    摘要:本文介绍移植开发板时如何适配utils子系统之KV存储部件,并介绍相关的运行机制原理. 本文分享自华为云社区<OpenHarmony移植案例与原理 - utils子系统之KV存储部件> ...

  7. 关于网页pc端以及移动端的兼容性——测试

    对于经常做网页设计的人员来说,网页的兼容性测试是不可缺少的,记得刚来单位的新手,都是要安装一款浏览器测试软件的,看自己制作的网页是否在各大浏览器中正常显示,有没有变形,或者网页效果不兼容等. 不仅仅是 ...

  8. android 兼容性测试 CTS 测试过程(实践测试验证通过)

    source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...

  9. 利用selenium Server实现IE firefox 和 chrome兼容性测试

    本文的主题是基于Selenium Server,使用 Java 语言编写网页交互流程, 实现多浏览器(IE Firefox Chrome)兼容性测试,为使用纪要. Selenium Selenium是 ...

  10. selenium如何做兼容性测试呢

    selenium如何做兼容性测试呢. 现在selenium做自动化测试基本是web driver操作浏览器做操作,code中assert关键值,做判断. 具体执行2种 1.使用htmluint 来执行 ...

随机推荐

  1. OpenTiny Vue 支持 Vue2.7 啦!

    你好,我是 Kagol. 前言 上个月发布了一篇 Vue2 升级 Vue3 的文章. 少年,该升级 Vue3 了! 里面提到使用了 ElementUI 的 Vue2 项目,可以通过 TinyVue 和 ...

  2. 怎么用Python写一个浏览器集群框架

    这是做什么用的 框架用途 在采集大量新闻网站时,不可避免的遇到动态加载的网站,这给配模版的人增加了很大难度.本来配静态网站只需要两个技能点:xpath和正则,如果是动态网站的还得抓包,遇到加密的还得j ...

  3. Windows 下修改MySQL的密码

    修改密码的两种简单方法 今天需要修改MySQL的密码,记录一下. 第一种​用SET PASSWORD命令 1.打开cmd进入MySQL的bin目录:(如我的路径是C:\Program Files\My ...

  4. 将.View.dll文件反编译出来的*Views*.cs文件转换成.cshtml

    先使用反编译工具将.View.dll文件反编译放入文件夹,然后将文件夹整体复制进\src\viewcs2cshtml\viewcs2cshtml\bin\Debug\net6.0\viewcs 复制完 ...

  5. Python 用户输入和字符串格式化指南

    Python 允许用户输入数据.这意味着我们可以向用户询问输入.在 Python 3.6 中,使用 input() 方法来获取用户输入.在 Python 2.7 中,使用 raw_input() 方法 ...

  6. git 忽略已提交(commit)的文件/文件夹

    git 忽略已提交的文件或文件夹 最好是在工程一开始就编辑好 .gitignore 文件, 在第一次提交的时候仔细检查避免添加那些无用的文件 因为 .gitignore 只能对未提交过的文件起效, 也 ...

  7. L2-028 秀恩爱分得快

    90行,调了俩小时,大约有以下坑点. 1.每个数字都可能正负出现,比如-0 0,-1 1,一开始以为一个数的正负只会出现一个. 2.当俩人都不出现在照片中,那么输出俩人就行 3.当其中一个人不在照片里 ...

  8. Codeforces Round #702 (Div. 3) 题解

    写在前边 链接:Codeforces Round #702 (Div. 3) 比较简单,但是总是感觉脑子有点转不过弯来. A. Dense Array 链接:A题链接 题目大意: 在数组中插入若干个数 ...

  9. 2020年第十一届蓝桥杯第二场C/C++ B组省赛题解

    2020年第十一届蓝桥杯C/C++ B组省赛题解 试题A:门牌制作 [问题描述] 小蓝要为一条街的住户制作门牌号. 这条街一共有 \(2020\) 位住户,门牌号从 \(1\) 到 \(2020\) ...

  10. H.264 和 H.265对比

    前言 H.264标准正式发布于2003年3月,距今已经20多年了,但它仍然是当下最流行的视频编解码标准. H.265正式发布于2013年4月.虽然H.265标准是围绕着H.264进行制定的,也保留了原 ...