【OpenHarmony移植案例與原理】XTS子系統之應用兼容性測試用例開發

摘要:本文主要介紹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測試用例的。但是了解一下這些知識,在問題定位等會帶來極大的方便。本文主要介紹下ACTS應用兼容性測試用例開發編譯。使用的程式語言為C語言。

1、XTS測試套件目錄

XTS的ACTS應用兼容性測試套件目錄test\xts\acts,器目錄如下,包含各個子系統的測試用例源程式碼及測試工具程式碼。

/test/xts
├── acts                         # 測試程式碼存放目錄
│   └── aafwk                    #  標準系統的 元能力框架子系統 測試用例源碼存放目錄
│   └── aafwk_lite               # 輕量系統、小型系統的 元能力框架 子系統測試用例源碼存放目錄
│   └── communication            #  標準系統的 communication子系統 測試用例源碼存放目錄
│   └── communication_lite       # 輕量系統、小型系統的 communication 子系統測試用例源碼存放目錄
|   └── .......                  # 其他子系統的測試用例源碼存放目錄
│   └── BUILD.gn                 # 標準系統測試用例編譯配置
│   └── build_lite               # 輕量系統、小型系統測試用例編譯配置存放目錄
│       └── BUILD.gn             # 輕量系統、小型系統測試用例編譯配置
└── tools                        # 測試工具程式碼存放目錄

2、測試用例級別、粒度和類型

測試用例分為5個級別,分布為Level0、Level1、Level2、Level3、Level4,這幾個宏定義在文件test\xts\tools\lite\hctest\include\hctest_internal.h。對這幾個級別的解釋可以從文章尾部的參考站點上可以了解。

/**
  * test case level
  */
enum TestRank {
    Level0 = 1,
    Level1 = 2,
    Level2 = 3,
    Level3 = 4,
    Level4 = 5
};

用例粒度分為LargeTest、MediumTest和SmallTest,同樣在文件test\xts\tools\lite\hctest\include\hctest_internal.h中定義。

/**
 * test size
 */
enum TestSize {
    SmallTest = 1 << 4,
    MediumTest = 2 << 4,
    LargeTest = 3 << 4
};

測試類型分為Function、Performance、Power、Reliability、Security、Global、Compatibility、User、Standard、Safety和Resilience。宏定義如下,具體含義見參考站點中鏈接。

/**
 * test type
 */
enum TestType {
    Function = 1 << 8,
    Performance = 2 << 8,
    Power = 3 << 8,
    Reliability = 4 << 8,
    Security = 5 << 8,
    Global = 6 << 8,
    Compatibility = 7 << 8,
    User = 8 << 8,
    Standard = 9 << 8,
    Safety = 10 << 8,
    Resilience = 11 << 8
};

3、C語言用例開發編譯指導

根據測試系統選擇測試框架和對應測試用例語言。系統類型和測試框架、開發語言對應關係如下:

我們主要看下輕量系統產品用例開發。輕量系統測試使用的測試框架是hctest,hctest測試框架支援使用C語言編寫測試用例,是在開源測試框架unity的基礎上進行增強和適配。

3.1 用例目錄規範

我們上文已經看到了ACTS的目錄, 測試用例存儲到test/xts/acts倉中。假如我們在一個名為subsystem_lite的子系統中為module_hal部件開發用例,目錄如下:

├── acts
| └── ......
│ └── subsystem_lite
│ │ └── module_hal
│ │ │ └── BUILD.gn
│ │ │ └── src
│ └──build_lite
│ │ └── BUILD.gn

可以參考已經存在的用例的目錄,比如test\xts\acts\utils_lite\file_hal、test\xts\acts\utils_lite\kv_store_hal、test\xts\acts\startup_lite\bootstrap_hal等等。

3.2 編寫用例樣例

3.2.1 引用測試框架

hctest.h 文件位於./test/xts/tools/lite/hctest/include/目錄,定義了LITE_TEST_SUIT、LITE_TEST_CASE、RUN_TEST_SUITE等測試套件的宏。

#include "hctest.h"

3.2.2 定義子系統、模組、測試套件名稱

需要3個參數,分別為子系統名稱、子系統的部件名稱、測試套件名稱。

/**  
* @brief  register a test suit named "IntTestSuite"  
* @param  test subsystem name  
* @param  example module name  
* @param  IntTestSuite test suit name  
*/
LITE_TEST_SUIT(test, example, IntTestSuite);

已經存在的示例,可以參考test\xts\acts\utils_lite\kv_store_hal\src\kvstore_func_test.c,為utils子系統的kvStore部件註冊KvStoreFuncTestSuite測試套件。

/**
 * @tc.desc      : register a test suite, this suite is used to test basic flow and interface dependency
 * @param        : subsystem name is utils
 * @param        : module name is kvStore
 * @param        : test suit name is KvStoreFuncTestSuite
 */
LITE_TEST_SUIT(utils, kvStore, KvStoreFuncTestSuite);

3.2.3 定義Setup與TearDown

命名方式:測試套件名稱+Setup,測試套件名稱+TearDown。Setup與TearDown必須存在,可以為空函數。示例可以參考test\xts\acts\utils_lite\kv_store_hal\src\kvstore_func_test.c,如下:

/**
 * @tc.setup     : setup for all testcases
 * @return       : setup result, TRUE is success, FALSE is fail
 */
static BOOL KvStoreFuncTestSuiteSetUp(void)
{
    UtilsSetEnv(DATA_PATH);
    return TRUE;
}

/**
 * @tc.teardown  : teardown for all testcases
 * @return       : teardown result, TRUE is success, FALSE is fail
 */
static BOOL KvStoreFuncTestSuiteTearDown(void)
{
    printf("+-------------------------------------------+\n");
    return TRUE;
}

3.2.4 使用宏定義LITE_TEST_CASE寫測試用例

LITE_TEST_CASE函數宏包括三個參數:測試套件名稱,測試用例名稱,用例屬性(測試類型、用例粒度、用例級別)。示例程式碼中創建測試用例,名稱為TestCase001,屬於測試套件IntTestSuite,測試用例屬性為功能測試、測試用例粒度為MediumTest,用例級別Level1。

LITE_TEST_CASE(IntTestSuite, TestCase001, Function | MediumTest | Level1) 
{  
  //do something 
};

示例可以參考test\xts\acts\utils_lite\kv_store_hal\src\kvstore_func_test.c,如下,測試套件KvStoreFuncTestSuite中創建測試用例testKvStoreSetValue001,測試kvstore部件的UtilsSetValue和UtilsDeleteValue介面。

/**
 * @tc.number    : SUB_UTILS_KV_STORE_0100
 * @tc.name      : UtilsSetValue parameter legal test
 * @tc.desc      : [C- SOFTWARE -0200]
 */
LITE_TEST_CASE(KvStoreFuncTestSuite, testKvStoreSetValue001, Function | MediumTest | Level1)
{
    char key[] = "rw.sys.version";
    char value[] = "Hello world !";
    int ret = UtilsSetValue(key, value);
    TEST_ASSERT_EQUAL_INT(0, ret);

    ret = UtilsDeleteValue(key);
    TEST_ASSERT_EQUAL_INT(0, ret);
};

3.2.5 使用宏定義 RUN_TEST_SUITE註冊測試套件

RUN_TEST_SUITE(IntTestSuite);

3.3 測試模組的構建配置文件

在每個測試模組目錄subsystem_lite/module_hal下新建BUILD.gn編譯文件,用於指定編譯後靜態庫的名稱、依賴的頭文件、依賴的庫等;具體寫法如下:

import("//test/xts/tools/lite/build/suite_lite.gni")
hctest_suite("ActsDemoTest") {
    suite_name = "acts"
    sources = [
        "src/test_demo.c",
    ]
    include_dirs = [ ]
    cflags = [ "-Wno-error" ]
}

3.4 acts下BUILD.gn增加編譯選項

需要將測試模組加入到acts目錄下的編譯腳本中,編譯腳本路徑:test/xts/acts/build_lite/BUILD.gn。

lite_component("acts") {  
    ...
    if(board_name == "liteos_m") {
        features += [    
            ...
            "//xts/acts/subsystem_lite/module_hal:ActsDemoTest"
        ]    
    }
}

3.5 編譯燒錄運行

隨版本編譯,debug版本編譯時會同步編譯acts測試套件。acts測試套件編譯中間件為靜態庫,最終鏈接到版本鏡像中 。將版本鏡像燒錄進開發板。重啟設備,查看串口日誌。每個測試套件執行以Start to run test suite開始,以xx Tests xx Failures xx Ignored結束。

參考站點

參考了下述站點,或者推薦讀者閱讀下述站點了解更多資訊。

 

點擊關注,第一時間了解華為雲新鮮技術~