测试子系统

简介

开发过程采用测试驱动开发模式,开发者基于系统新增特性可以通过开发者自己开发用例保证,对于系统已有特性的修改,也可通过修改项目中原有自测试用例保证,开发者自测试旨在帮助开发者在开发阶段就能开发出高质量代码

目录

表 1 开发者自测试工具源代码目录结构

名称 描述
developertest 开发自测试框架
developertest/src 测试框架源码
developertest/src/core 测试执行器
developertest/src/core/build 自测试用例编译
developertest/src/core/command 对用户输入的命令行处理
developertest/src/core/config 测试框架配置管理
developertest/src/core/driver 测试框架驱动执行器
developertest/src/core/resource 测试框架配置文件
developertest/src/core/testcase 测试用例管理
developertest/src/core/common.py 测试框架公共操作
developertest/src/core/constants.py 测试框架全局常量
developertest/src/core/exception.py 测试框架异常定义
developertest/src/core/utils.py 测试框架工具方法
developertest/src/main 测试框架平台
developertest/src/main/main.py 测试框架内部入口
developertest/example 测试框架demo用例
developertest/third_party 测试框架依赖第三方组件适配
developertest/BUILD.gn 测试子系统编译配置
developertest/start.bat 开发者自测试入口(Windows)
developertest/start.sh 开发者自测试入口(Linux)

约束

测试工具环境依赖

  1. python版本>=3.7.5
  2. NFS版本>=V4
  3. 运行操作系统:Windows版本>=Win10,Linux为Ubuntu18.04

安装

依赖python环境:

需要本地的python安装串口插件pyserial,在shell界面执行安装命令pip intall pyserial,安装成功如下图

测试子系统 - 图1

编写测试用例

  • 自测试用例规范

  • 命名规范

    测试用例源文件名称和测试套内容保持一致,测试套与用例之间关系1:N,测试套与测试源文件之间关系1:1,每个源文件全局唯一,格式:[特性]_[功能]_[子功能1]_[子功能1.1],子功能支持向下细分。

    文件命名采用大驼峰方式命名,以Test结尾,如demo用例:developertest/example/cxx_demo - 用例编码规范

    开发者自测试用例原则上与特性代码编码规范保持一致,另外需要添加必要的用例描述信息,详见•自测试用例模板 - 测试用例编译配置规范

    用例采用GN方式编译,配置遵循本开源项目的编译指导使用

  • 自测试用例模板

详见测试demo用例developertest/example/cxx_demo/test/unittest/common/calc_subtraction_test.cpp

测试子系统 - 图2 说明: Feature: 被测特性的描述 Function: 被测特性功能 SubFunction:被测特性子功能 FunctionPoints:被测的功能点 EnvConditions:被测特性的环境与被测条件 CaseDescription:测试用例描述 step:测试复杂逻辑时注明用例执行的步骤 - 自测试用例目录规划

```

  1. subsystem(子系统,系统组件)
  2. ├── module(模块)
  3. │ └── test(模块测试目录)
  4. │ └── unittest(单元测试)
  5. │ ├── common(公共用例)
  6. │ ├── liteos(仅liteos核用例)
  7. │ └── linux(仅Linux核用例)
  8. │ └── moduletest(模块测试)
  9. │ ├── common
  10. │ ├── liteos
  11. │ └── linux
  12. └── test(子系统测试目录)
  13. └── unittest(单元测试)
  14. ├── common
  15. ├── liteos
  16. ├── linux
  17. └── moduletest(模块测试)
  18. ├── common
  19. ├── liteos
  20. ├── linux ```

测试子系统 - 图3 说明: 其中liteos和Linux仅不同设备形态举例,对于同一特性在不同开发板上,如果用例没有差异,则用例放置common目录下,如果同一特性,用例区分不同设备形态,可能包含内核差异,芯片平台差异,则用例以目录区分 - 编写自测试用例步骤

  1. 添加用例文件头注释说明
  2. 引用gtest头文件和ext命名空间
  3. 添加被测试类头文件
  4. 定义测试套(测试类)
  5. 实现该测试套具体的测试用例,包括用例注释和用例逻辑实现
  6. 编写用例编译配置

    测试子系统 - 图4 说明: *样例参考:developertest/example/cxx_demo/test/unittest/common/calc_subtraction_test.cpp 注意点如下: a、SetUp & TearDown是针对该测试套下每条用例执行前和执行后的处理逻辑 b、SetUpTestCase & TearDownTestCase是针对该测试套下所有用例执行前和执行后的处理逻辑 c、HWTEST的使用:特点:只适合做简单测试(执行不依赖Setup & Teardown)缺点:多个测试场景需要相同数据配置的情况不适用,测试用例之间可能相互影响,不具备独立性 d、使用printf函数打印日志

  • 编写用例编译文件

  • 定义用例编译构建目标

    1. 添加用例编译文件头注释信息
    2. 导入用例编译模板文件
    3. 指定用例文件输出路径
    4. 配置用例编译依赖包含目录
    5. 指定用例编译目标输出的用例执行文件名称
    6. 编写具体的用例编译脚本(添加需要参与编译的源文件、配置和依赖 )
    7. 对目标用例文件进行条件分组(分组名称固定为:unittest/moduletest) - 如果存在多个测试套,定义公共编译配置 - 将测试用例添加到构建系统中

    测试子系统 - 图5 说明: *样例参考:developertest/example/cxx_demo/test/unittest/common/BUILD.gn

  • 测试用例级别定义

  • 基本(Level1):<1s
  • 重要(Level2):<10s
  • 一般(Level3):<5min
  • 生僻(Level4):>5min

使用测试框架

  • 安装xdevice基础框架
  1. 以Windows环境为例,打开xdevice安装目录:test\xdevice
  2. 打开控制台窗口,执行如下命令

    ```

    1. python setup.py install ```
    2. 安装成功如下图

    测试子系统 - 图6

  • 修改xdevice基础框架配置

文件:xdevice/config/user_config.xml

  1. [device] # 配置标签为ipcamera的串口信息,COM口和波特率,例如

    ```

    1. COM1
    2. cmd
    3. 115200
    4. 8
    5. 1
    6. 1
    7. ```
  • 修改developertest组件配置

文件:resource/config/user_config.xml

  1. [test_cases] # 指定测试用例的输出路径,编译输出目录,例如

    ```

    1. S:\out\ipcamera_hi3518ev300_liteos_a\test
    2. ```
    3. [NFS] # 指定NFS的映射路径,host_dir为PC侧的NFS目录,board_dir为板侧创建的目录,例如

    ```

    1. D:\nfs
    2. user
    3. ```
  • 执行自测试用例前的环境检查

  • 系统镜像与文件系统已烧录进开发板,开发板上系统正常运行,在系统模式下,如shell登录时设备提示符OHOS#

  • 开发主机和开发板串口连接正常,网口连接正常
  • 开发主机IP与开发板IP处在同一小网网段,相互可以ping通
  • 开发主机侧创建空目录用于开发板通过NFS挂载测试用例,并且NFS服务启动正常
  • 运行测试套

  • 启动测试框架

    1. Windows环境启动测试框架

    ```

    1. start.bat ```
    2. Linux环境启动测试框架

    ```

    1. ./strat.sh ```

1. -   设备形态选择

3. 根据实际的开发板选择,设备形态配置:developertest/src/core/resource/config/framework\_config.xml

5. -   执行测试指令
6. 1.  执行测试指令示例,其中-t ut为必选,-ss和-tm为可选字段

8. ```
9. run -t ut -ss test -tm example
10. ```

12. 2.  参数说明:指定参数可以执行特定特性、模块对应的测试套

14. ```
15. usage: __main__.py [-h] [-p PRODUCTFORM] [-t [TESTTYPE [TESTTYPE ...]]]
16. [-ss SUBSYSTEM] [-tm TESTMODULE] [-ts TESTSUIT]
17. [-tc TESTCASE] [-tl TESTLEVEL] [-os TARGET_OS_NAME]
18. [-bv BUILD_VARIANT] [-b [BUILD [BUILD ...]]]
19. [-cov COVERAGE] [-tf TESTFILE] [-res RESOURCE]
20. [-sn DEVICE_SN] [-c CONFIG] [-rp REPORTPATH] [-e EXECTYPE]
21. [-td TEST_DRIVER]
22. action Specify test para.positional arguments:
23. action                Specify action

25. optional arguments:
26. -h, --help            show this help message and exit
27. -p PRODUCTFORM, --productform PRODUCTFORM    Specified product form
28. -t [TESTTYPE [TESTTYPE ...]], --testtype [TESTTYPE [TESTTYPE ...]]
29. Specify test type(UT,MST,ST,PERF,ALL)
30. -ss SUBSYSTEM, --subsystem SUBSYSTEM    Specify test subsystem
31. -tm TESTMODULE, --testmodule TESTMODULE    Specified test module
32. -ts TESTSUIT, --testsuit TESTSUIT    Specify test suit
33. -tc TESTCASE, --testcase TESTCASE    Specify test case
34. -tl TESTLEVEL, --testlevel TESTLEVEL    Specify test level
35. -bv BUILD_VARIANT, --build_variant BUILD_VARIANT    Specify build variant(release,debug)
36. -b [BUILD [BUILD ...]], --build [BUILD [BUILD ...]]
37. Specify build values(version,testcase)
38. -tf TESTFILE, --testfile TESTFILE    Specify test suites list file
39. -res RESOURCE, --resource RESOURCE    Specify test resource
40. -sn DEVICE_SN, --device_sn DEVICE_SN    Specify device serial number
41. -c CONFIG, --config CONFIG    Specify test config file
42. -rp REPORTPATH, --reportpath REPORTPATH    Specify test report path
43. -e EXECTYPE, --exectype EXECTYPE    Specify test execute type
44. -td TEST_DRIVER, --testdriver TEST_DRIVER    Specify test driver id
45. ```

  • 测试框架帮助

  • 帮助指令,用于查询测试平台支持哪些测试指令

    ```

    1. help ```

测试结果与日志

  • 通过在测试框架中执行测试指令,即可以生成测试日志和测试报告
  • 测试结果

  • 测试用例的结果会直接显示在控制台上,执行一次的测试结果根路径如下:

    ```

    1. reports/xxxx-xx-xx-xx-xx-xx ``` - 测试用例格式化结果

    ```

    1. result/ ``` - 测试用例日志

    ```

    1. log/plan_log_xxxx-xx-xx-xx-xx-xx.log ``` - 测试报告概率

    ```

    1. summary_report.html ``` - 测试报告详情

    ```

    1. details_report.html ```
  • 测试框架日志

```

  1. reports/platform_log_xxxx-xx-xx-xx-xx-xx.log ``` - 最近一次测试报告

```

  1. reports/latest ```

涉及仓

test_developertest

test_xdevice