基于 Neptune100的XTS子系统之应用兼容性测试指导 原创

润和软件HiHope
发布于 2022-4-22 15:49
浏览
0收藏

XTS(X Test Suite)子系统是OpenHarmony生态认证测试套件的集合,当前包括:
acts(application compatibility test suite )应用兼容性测试套件,看护北向HAP兼容、OpenHarmony开发API兼容。 hats(Hardware Abstraction Test Suite )硬件抽象兼容性测试套,看护HDI层接口。 dcts(Distributed Compatibility Test Suite )分布式兼容性测试套,看护分布式兼容性。
本文基于 Neptune100移植XTS子系统,分析轻量系统的ACTS应用兼容性测试套件移植案例。轻量系统因系统能力限制,兼容性测试在系统初始化阶段进行;并且各设备烧录工具存在差异,导致自动化工具(xDevice工具)无法实现真正的自动适配,因此认证执行方式不对合作伙伴进行限制。流程如下:
步骤1 编译适配:XTS子系统加入到编译组件中,随版本一起编译;
步骤2 本地执行:完成兼容性测试;
编译适配
产品解决方案适配

需要在产品解决方案配置文件中增加 xts_acts与 xts_tools组件定义(vendor\hihope\neptune_iotlink_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":[] }
    ]
  }

1.config_ohos_xts_acts_utils_lite_kv_store_data_path选项声明在 test\xts\acts\utils_lite\kv_store_hal\BUILD.gn。在移植适配 XTS子系统时,还必须要加上这一行 config_ohos_xts_acts_utils_lite_kv_store_data_path = “/data” ,如果不加的话,config_ohos_xts_acts_utils_lite_kv_store_data_path等于空字符串“”,没有起到提供默认值的作用。
2.enable_ohos_test_xts_acts_use_thirdparty_lwip 选项声明在 test\xts\acts\communication_lite\lwip_hal\BUILD.gn,默认为true。
编译链接
在文件 vendor\hihope\neptune_iotlink_demo\config.json中,Neptune100需要链接的ACTS部件测试库文件写在了bin_list里的force_link_libs里。

"bin_list": [
{
  "enable": "true",
  "force_link_libs": [
      "module_ActsParameterTest",
      "module_ActsBootstrapTest",
      "module_ActsDfxFuncTest",
      "module_ActsHieventLiteTest",
      "module_ActsSamgrTest",
      "module_ActsUtilsFileTest",
      "module_ActsKvStoreTest",
      "module_ActsWifiServiceTest"
  ]
}
],

然后在文件 device\soc\winnermicro\wm800\BUILD.gn里组装编译链接选项,需要通过链接选项指定需要链接的 ACTS的测试套库文件,会使用到–whole-archive和–no-whole-archive链接选项。–whole-archive可以把在其后面出现的静态库包含的函数和变量输出到动态库,–no-whole-archive则关掉这个特性。
XTS子系统会编译到 test\xts\tools\lite\hctest\src\hctest.c文件,启动XTS提供的初始化宏函数 CORE_INIT初始化 InitTestSuiteMgr函数实现的服务。由于没有显式调用init函数,所以要使用–whole-archive将它强制链接。
相关代码片段如下:

# config bin from vendor/<board_name>/<product_name>/config.json
foreach(bin_file, bin_list) {
  ......
​
  if (build_enable == "true") {
      # force link invisible function ,which ar to lib
      ldflags += [
        "-L" + "${out_product_path}/libs",
        "-Wl,--whole-archive",
      ]
      foreach(force_link_lib, bin_file.force_link_libs) {
        ldflags += [ "-l${force_link_lib}" ]
      }
      ......
      ldflags += [ "-Wl,--no-whole-archive" ]
​
      deps += [ "//test/xts/tools/lite:tools" ]
      deps += [ "//test/xts/acts/build_lite:acts" ]
  }
      ......
}

注意: 需要使用hb命令触发debug版本(非debug版本不会触发测试编译)
Neptune100的XTS子系统编译流程
hb编译构建工具读取config.json
通过 hb工具读取系统配置文件(其中涉及文件:vendor\hihope\neptune_iotlink_demo\config.json)获取参与编译的子系统以及组件信息。XTS测试支持对各个子系统、部件的接口进行测试,产品解决方案配置了哪些子系统才会对这些配置的子系统进行测试。
XTS编译配置文件
通过gn工具读取 BUILD.gn文件并执行生成 .a文件(XTS子系统gn文件位置:test\xts\acts\build_lite\BUILD.gn)。
对于轻量系统,支持的测试套件主要包含communication_lite、startup_lite、iot_hardware_lite、security_lite、hiviewdfx_lite、distributed_schedule_lite、update_lite、utils_lite等子系统及其部件。
all_features会读取轻量系统全部acts测试套件:

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",
]

判断非debug版本,all_features置空(非debug版本XTS不参与编译):

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")
}

all_features 与 vendor\hihope\neptune_iotlink_demo\config.json子系统组件进行对比,存在的子系统组件才会参与最后编译。
在bin_list的 force_link_libs中可以看出,Neptune100链接了轻量系统XTS测试套件最小集API。 在满足轻量系统最小API的情况下,all_features 中用不到的子系统组件可以不添加。
轻量系统XTS测试套件最小集API参考 :(https://gitee.com/openharmony-sig/compatibility/blob/master/test_suite/PCS/OpenHarmony-3.1-Release/mini system/OpenHarmony设备兼容性规范3.0自检表_轻量系统.xlsx)
生成的测试套的库文件
成功编译后,在编译构建输出目录,如 out/neptune100/neptune_iotlink_demo/libs,生成测试套和测试框架的库文件,XTS子系统测试套.a归档格式为:libmodule_{测试套件模块名称}.a,测试框架归档格式:libhctest.a。这些生成的文件和上文中的链接选项可以对应起来。 举例:

libmodule_ActsParameterTest.a
libhctest.a

执行兼容性测试套件
手工执行兼容性测试套件,需要使用烧录工具以及串口工具,操作步骤如下:
1.获取编译镜像及烧录。
在如下目录获取版本镜像:out\neptune100\neptune_iotlink_demo\bin,并将版本镜像烧录进开发板,具体步骤请参考烧录打印(https://gitee.com/openharmony/device_soc_winnermicro#烧录打印)。
说明: 判断当前版本镜像是否集成acts测试套件方法:在map文件中查看对应.a是否被编译即可。
2.测试步骤:
(1)使用串口工具登录模组,并保存串口打印信息。 (2)重启模组,启动过程中兼容性测试自动化执行,等待执行完,查看串口日志。
3.测试结果分析指导。
(1)基于串口打印日志进行分析;
(2)测试框架启动串口log如下:

[HCtest Service] HCTest Framework inited.
******To Obtain Product Params Start******
The Product Type is [Development Board]
The manuFacture is [winnermicro]
The brand is [hihope]
The marketName is [****]
The productSeries is [****]
The softwareModel is [****]
The HardwareModel is [****]
The HardwareProfile is [****]
The serial is [85104150325039393211009A830C47011078]
The osName is [OpenHarmony-1.0.1.0(Beta)]
The OS Version is [OpenHarmony-master]
The bootloaderVersion is [bootloader]
The Security Patch is [2021-09-01]
The AbiList is [****]
The sdkApiLevel is [6]
The firstApiLevel is [1]
The incrementalVersion is [OpenHarmony 2.3 beta]
The productModel is [****]
The VersionID is [Development Board/winnermicro/hihope/****/OpenHarmony-1.0.1.0(Beta)/****/****/6/OpenHarmony 2.3 beta/debug]
The buildType is [debug]
The buildUser is [jenkins]
The buildHost is [linux]
The buildTime is [1650052583129]
The BuildRootHash is []
******To Obtain Product Params End ******
Start to rhiview init sun test suituccess.
测试套件执行完毕log如下:
-----------------------
11 Tests 0 Failures 0 Ignored 
OK
All the test suites finished!

(3)每个测试套件执行以“Start to run test suite”开始,以“xx Tests xx Failures xx Ignored”结束。
(4)测试结果归档。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
2
收藏
回复
举报
回复
    相关推荐