class="hide-preCode-box">

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

    "xts_list": [
      {
        "enable": "true",
        "xts_modules": [
          "ActsKvStoreTest",
          "ActsDfxFuncTest",
          "ActsHieventLiteTest",
          "ActsSamgrTest",
          "ActsParameterTest",
          "ActsWifiServiceTest",
          "ActsWifiIotTest",
          "ActsBootstrapTest"
        ]
      }
    ]
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

然后,在文件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" ]
      }
  }
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在产品解决方案配置文件中增加的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 += [
        ......
        ]
        }
    }
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在该文件中,还有如下代码片段。可以看出,只要构建类型为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")
  }
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

接下来看下,如何在编译时指定特定的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')
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

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
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

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 = ""
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

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
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

该选项的作用是什么呢?在文件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" ]
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

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}\"" ]
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

在文件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
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

小结

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

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/maniuT/article/details/139808754","extend1":"pc","ab":"new"}">> id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"> class="blog_extension blog_extension_type2" id="blog_extension"> class="extension_official" data-report-click="{"spm":"1001.2101.3001.6471"}" data-report-view="{"spm":"1001.2101.3001.6471"}"> class="blog_extension_card_left"> class="blog_extension_card_cont"> 鸿蒙开发学习资料领取!!! class="blog_extension_card_cont_r"> 微信名片
注:本文转载自blog.csdn.net的沧海一笑-dj的文章"https://blog.csdn.net/dengjin20104042056/article/details/97113108"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!