摘要:本文通过实例分析下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. docker本地仓库-registry

    Docker本地私有仓库实战: docker仓库主要用于存放docker镜像,docker仓库分为公有仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下: 节省网络带宽, ...

  2. Kafka 在分布式系统中的 7 大应用场景

    Kafka 介绍 Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性.Kafka 的核心组件包括生产者(Producer),消费者(Cons ...

  3. dfs 序 O(nlogn)-O(1) 求 LCA

    学点分树,发现不会询问复杂度 \(O(1)\) 的 LCA.于是被迫递归式学习. 我们设 \(dfn_i\) 表示点 \(i\) 在 dfs 过程中第几个被访问到,把点按访问到的顺序排序得到的序列叫 ...

  4. Molecule 在构建工具中的选择

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:修能 朝闻道,夕死可矣 何为 Molecule? 轻量级的 ...

  5. Qt 迭代器

    目录 (一) java风格迭代器 1. QListIterator类 1. 初始化 2. findNext() 3. findPrevious() 4. hasNext() 5. hasPreviou ...

  6. git如何使用?初始化仓库 提交代码

    首先 国内一般使用码云 注册码云 在ui界面创建仓库 一般只有一个readme 方法一: 第一步  git clone https://gitee.com/用户个性地址/HelloGitee.git ...

  7. Mysql数据库查询之模糊查询

    一.什么是模糊查询模糊查询是根据一定的模式匹配规则,查找与指定条件相似或相符的数据.二.模糊查询实操通配符查询1.% 表示任意0个或多个字符形式一: select 查询字段 from 表名 where ...

  8. jmeter-逻辑处理器while

    测试工具:jmeter 业务逻辑:A接口上传文件,B接口查询文件上传状态,如果状态不为4,需要再次查询(上传文件后,需要有短暂时间的识别,压测时并发大导致识别时间不可控)当为4时,跳出循环, 思路:增 ...

  9. [ABC261C] NewFolder(1)

    Problem Statement For two strings $A$ and $B$, let $A+B$ denote the concatenation of $A$ and $B$ in ...

  10. SpringBoot整合SpringSecurity实现前后端分离认证授权

    1.什么是SpringSecurity? Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.它实际上是保护基于spring的应用程序的标准. Spring Securi ...