1# 测试子系统<a name="ZH-CN_TOPIC_0000001082440445"></a> 2 3- [简介](#section7375710115617) 4- [目录](#section102031353175317) 5- [约束](#section87444710110) 6- [安装](#section1347156474) 7- [编写测试用例](#section125411936102918) 8- [使用测试框架](#section75882026185016) 9- [测试结果与日志](#section414715805819) 10- [涉及仓](#section6299103515474) 11 12## 简介<a name="section7375710115617"></a> 13 14开发过程采用测试驱动开发模式,开发者基于系统新增特性可以通过开发者自己开发用例保证,对于系统已有特性的修改,也可通过修改项目中原有的测试用例保证,开发者测试旨在帮助开发者在开发阶段就能开发出高质量代码。 15 16## 目录<a name="section102031353175317"></a> 17 18``` 19test/ 20├── developertest # 开发者测试框架 21│ ├── aw # 测试框架的静态库 22│ ├── config # 测试框架配置 23│ ├── examples # 测试用例示例 24│ ├── src # 测试框架源码 25│ ├── third_party # 测试框架依赖第三方组件适配 26│ ├── start.bat # 开发者测试入口(Windows) 27│ ├── start.sh # 开发者测试入口(Linux) 28│ └── BUILD.gn # 测试框架编译入口 29├── xdevice # 测试框架基础组件 30│ ├── config # 框架配置文件 31│ ├── extension # 基础组件扩展仓 32│ ├── resource # 基础组件测试资源 33│ └── src # 基础组件源码 34└── xts # XTS认证套件 35``` 36 37## 约束<a name="section87444710110"></a> 38 39测试工具环境依赖 40 411. python版本\>=3.7.5 422. paramiko版本\>=2.7.1 433. setuptools版本\>=40.8.0 444. rsa版本\>=4.0 455. NFS版本\>=V4,设备不支持hdc连接,支持串口时使用 466. pyserial版本\>=3.3,设备不支持hdc连接,支持串口时使用 477. 运行操作系统:Windows版本\>=Win10,Linux为Ubuntu18.04 48 49## 安装<a name="section1347156474"></a> 50 51依赖python环境: 52 531. 安装Linux扩展组件readline, 54 55 执行如下命令如下: 56 57 ``` 58 sudo apt-get install libreadline-dev 59 ``` 60 61 安装成功提示 62 63 ``` 64 Reading package lists... Done 65 Building dependency tree 66 Reading state information... Done 67 libreadline-dev is already the newest version (7.0-3). 68 0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. 69 ``` 70 712. 安装setuptools插件,安装命令如下: 72 73 ``` 74 pip3 install setuptools 75 ``` 76 77 安装成功提示如下: 78 79 ``` 80 Requirement already satisfied: setuptools in d:\programs\python37\lib\site-packages (41.2.0) 81 ``` 82 833. 安装paramiko插件,安装命令如下: 84 85 ``` 86 pip3 install paramiko 87 ``` 88 89 安装成功提示如下: 90 91 ``` 92 Installing collected packages: pycparser, cffi, pynacl, bcrypt, cryptography, paramiko 93 Successfully installed bcrypt-3.2.0 cffi-1.14.4 cryptography-3.3.1 paramiko-2.7.2 pycparser-2.20 pynacl-1.4.0 94 ``` 95 964. 安装python的rsa插件,安装命令如下: 97 98 ``` 99 pip3 install rsa 100 ``` 101 102 安装成功截图如下: 103 104 ``` 105 Installing collected packages: pyasn1, rsa 106 Successfully installed pyasn1-0.4.8 rsa-4.7 107 ``` 108 1095. 需要本地的python安装串口插件pyserial,安装命令如下: 110 111 ``` 112 pip3 install pyserial 113 ``` 114 115 安装成功提示如下: 116 117 ``` 118 Requirement already satisfied: pyserial in d:\programs\python37\lib\site-packages\pyserial-3.4-py3.7.egg (3.4) 119 ``` 120 1216. 如果设备仅支持串口输出测试结果,则需要安装NFS Server 122 123 windows环境下安装,例如安装haneWIN NFS Server1.2.50,下载地址:https://www.hanewin.net/nfs-e.htm 。 124 125 Linux环境下安装,安装命令如下: 126 127 ``` 128 sudo apt install nfs-kernel-server 129 ``` 130 131 安装成功提示如下: 132 133 ``` 134 Reading package lists... Done 135 Building dependency tree 136 Reading state information... Done 137 nfs-kernel-server is already the newest version (1:1.3.4-2.1ubuntu5.3). 138 0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. 139 ``` 140 141 142## 编写测试用例<a name="section125411936102918"></a> 143 144- 测试用例规范 145 - 命名规范 146 147 测试用例源文件名称和测试套内容保持一致,测试套与用例之间关系1:N,测试套与测试源文件之间关系1:1,每个源文件全局唯一,格式:\[特性\]\_\[功能\]\_\[子功能1\]\_\[子功能1.1\],子功能支持向下细分。 148 149 文件命名采用全小写+下划线方式命名,以test结尾,如demo用例:developertest/examples/calculator。 150 151 - 测试用例编码规范 152 153 开发者测试用例原则上与特性代码编码规范保持一致,另外需要添加必要的用例描述信息,详见[•自测试用例模板](#li2069415903917)。 154 155 - 测试用例编译配置规范 156 157 测试用例采用GN方式编译,配置遵循本开源项目的编译指导[使用](编译构建子系统.md)。 158 159 160- <a name="li2069415903917"></a>测试用例模板 161 162 详见测试demo用例:developertest/examples/calculator/test/unittest/common/calculator\_add\_test.cpp。 163 164- 测试用例目录规划 165 166 ``` 167 subsystem # 子系统,系统组件 168 ├── parts # 部件 169 │ └── test # 模块测试目录 170 │ └── unittest # 单元测试 171 │ ├── common # 公共用例 172 │ ├── phone # 手机形态用例 173 │ └── ivi # 车机形态 174 │ └── liteos-a # ipcamera使用liteos内核时的用例 175 │ └── moduletest # 模块测试 176 │ ├── common 177 │ ├── phone 178 │ └── ivi 179 │ └── liteos-a 180 └── test # 子系统测试目录 181 └── resource # 测试资源 182 ├── module 183 ├── common 184 ├── phone 185 ├── ivi 186 ├── liteos-a 187 └── systemtest # 系统测试 188 ├── common 189 ├── phone 190 ├── ivi 191 ├── liteos-a 192 ``` 193 194 > **说明:** 195 >其中phone,ivi,liteos-a仅不同设备形态举例,如区分手机,车机,IPCamera等不同形态设备,对于同一特性在不同开发板上,如果用例没有差异,则用例放置common目录下,如果同一特性,用例区分不同设备形态,可能包含内核差异,芯片平台差异,则用例以目录区分。 196 197- 编写测试用例步骤 198 1. 添加测试用例文件头注释信息。 199 2. 引用gtest头文件和ext命名空间。 200 3. 添加被测试类的头文件。 201 4. 定义测试套(测试类)。 202 5. 实现该测试套具体的测试用例,包括用例注释和用例逻辑实现。 203 6. 编写测试用例编译配置。 204 205 > **说明:** 206 >\*样例参考: 207 >仅支持串口设备形态编译示例:developertest/examples/lite/cxx\_demo/test/unittest/common/calc\_subtraction\_test.cpp。 208 >支持hdc连接的设备形态编译示例:developertest/examples/calculator/test/unittest/common/calculator\_add\_test.cpp。 209 >注意点如下: 210 >a、SetUp & TearDown是针对该测试套下每条用例执行前和执行后的处理逻辑 211 >b、SetUpTestCase & TearDownTestCase是针对该测试套下所有用例执行前和执行后的处理逻辑 212 >c、HWTEST的使用:特点:只适合做简单测试(执行不依赖Setup & Teardown)缺点:多个测试场景需要相同数据配置的情况不适用,测试用例之间可能相互影响,不具备独立性 213 >d、使用printf函数打印日志 214 215 216- 编写测试用例编译文件 217 - 定义测试用例编译构建目标。 218 1. 添加测试用例编译文件头注释信息。 219 2. 导入测试用例编译模板文件。 220 3. 指定测试用例文件的输出路径。 221 4. 配置测试用例编译依赖包含目录。 222 5. 指定测试用例编译目标输出的文件名称。 223 6. 编写具体的测试用例编译脚本(添加需要参与编译的源文件、配置和依赖 )。 224 7. 对目标测试用例文件进行条件分组(分组名称固定为:unittest/moduletest\)。 225 226 - 如果存在多个测试套,定义公共编译配置。 227 - 将测试用例添加到构建系统中。 228 229 > **说明:** 230 >\*样例参考: 231 >1、仅支持串口设备形态编译示例: 232 >用例编译配置:developertest/examples/lite/cxx\_demo/test/unittest/common/BUILD.gn 233 >编译入口配置:developertest/examples/lite/BUILD.gn 234 >2、支持hdc连接的设备形态编译示例: 235 >用例编译配置:developertest/examples/calculator/test/unittest/common/BUILD.gn 236 >编译入口配置:developertest/examples/ohos.build 237 238 239- 编写测试用例资源 240 1. 在部件或者模块的test目录下创建resource目录。 241 2. 在resource目录下创建形态目录,如phone。 242 3. 在设备形态目录下创建一个以模块名命名的文件夹,如testmodule。 243 4. 在模块目录下创建一个ohos\_test.xml文件,文件内容格式如下 244 245 ``` 246 <?xml version="1.0" encoding="UTF-8"?> 247 <configuration ver="2.0"> 248 <target name="DetectorFileTest"> 249 <preparer> 250 <option name="push" value="test.txt -> /data/test/resource" src="res"/> 251 </preparer> 252 </target> 253 </configuration> 254 ``` 255 256 5. 在测试用例的编译配置文件中定义resource\_config\_file,用来指定对应的资源文件ohos\_test.xml。 257 258 > **说明:** 259 >如上资源文件功能:将resource目录下的test.txt文件通过hdc push命令推送到被测设备的/data/test/resource目录下。 260 261 6. ohos\_test.xml文件标签说明如下: 262 263 > **说明:** 264 >target\_name:测试单元的名字,通常定义在测试目录的BUILD.gn中。 265 >preparer:表示该测试单元执行前执行的动作。 266 >cleaner:表示测试单元执行结束后的动作。 267 >特别的,src=”res” 表示测试资源位于子系统根目录的resource目录, src=“out“ 表示out/release/$\(子系统名\)目录。 268 269 270- 测试用例级别定义 271 - 基本(Level1) 272 - 重要(Level2) 273 - 一般(Level3) 274 - 生僻(Level4) 275 276 277## 使用测试框架<a name="section75882026185016"></a> 278 279- 可选,安装xdevice组件。 280 1. 以Windows环境为例,打开xdevice安装目录:test/xdevice。 281 2. 打开控制台窗口,执行如下命令: 282 283 ``` 284 python setup.py install 285 ``` 286 287 安装成功如下图: 288 289 ``` 290 Installed d:\programs\python37\lib\site-packages\xdevice-0.0.0-py3.7.egg 291 Processing dependencies for xdevice==0.0.0 292 Finished processing dependencies for xdevice==0.0.0 293 ``` 294 295 296- 必选,developertest组件配置。 297 298 文件:developertest/config/user\_config.xml。 299 300 1. 测试框架通用配置。 301 302 \[build\] \# 配置测试用例的编译参数,例如: 303 304 ``` 305 <build> 306 <example>false</example> 307 <version>false</version> 308 <testcase>true</testcase> 309 ... ... 310 </build> 311 ``` 312 313 > **说明:** 314 >测试用例的编译参数说明如下: 315 >example:是否编译测试用例示例,默认false。 316 >version:是否编译测试版本,默认false。 317 >testcase:是否编译测试用例,默认true。 318 319 2. 支持hdc连接的被测设备。 320 321 \[device\] \# 配置标签为usb-hdc的环境信息,测试设备的IP地址和hdc映射的端口号,例如: 322 323 ``` 324 <device type="usb-hdc"> 325 <ip>192.168.1.1</ip> 326 <port>9111</port> 327 <sn></sn> 328 </device> 329 ``` 330 331 3. 仅支持串口的被测设备。 332 333 \[board\_info\] \# 开发板配置信息,例如: 334 335 ``` 336 <board_info> 337 <board_series>hispark</board_series> 338 <board_type>taurus</board_type> 339 <board_product>ipcamera</board_product> 340 <build_command>hb build</build_command> 341 </board_info> 342 ``` 343 344 > **说明:** 345 >开发板配置信息如下: 346 >board\_series:开发板系列,默认hispark。 347 >board\_type:开发板类型,默认taurus。 348 >board\_product:目标产品,默认ipcamera。 349 >build\_command:测试版本和用例的编译命令,默认hb build。 350 351 \[device\] \# 配置标签为ipcamera的串口信息,COM口和波特率,例如: 352 353 ``` 354 <device type="com" label="ipcamera"> 355 <serial> 356 <com>COM1</com> 357 <type>cmd</type> 358 <baud_rate>115200</baud_rate> 359 <data_bits>8</data_bits> 360 <stop_bits>1</stop_bits> 361 <timeout>1</timeout> 362 </serial> 363 </device> 364 ``` 365 366 367- 修改developertest组件配置。可选,如果测试用例已完成编译,可以直接指定测试用例的编译输出路径,测试平台执行测试用例时即不会重新编译测试用例。 368 369 文件:config/user\_config.xml。 370 371 1. \[test\_cases\] \# 指定测试用例的输出路径,编译输出目录,例如: 372 373 ``` 374 <test_cases> 375 <dir>/home/source_code/out/release/tests</dir> 376 </test_cases> 377 ``` 378 379 2. \[NFS\] \# 被测设备仅支持串口时配置,指定NFS的映射路径,host\_dir为PC侧的NFS目录,board\_dir为板侧创建的目录,例如: 380 381 ``` 382 <NFS> 383 <host_dir>D:\nfs</host_dir> 384 <board_dir>user</board_dir> 385 </NFS> 386 ``` 387 388 389- 测试环境准备(当被测设备仅支持串口时,需要检查)。 390 - 系统镜像与文件系统已烧录进开发板,开发板上系统正常运行,在系统模式下,如shell登录时设备提示符OHOS\#。 391 - 开发主机和开发板串口连接正常,网口连接正常。 392 - 开发主机IP与开发板IP处在同一小网网段,相互可以ping通。 393 - 开发主机侧创建空目录用于开发板通过NFS挂载测试用例,并且NFS服务启动正常。 394 395- 运行测试套。 396 - 启动测试框架,打开test/developertest目录。 397 1. Windows环境启动测试框架。 398 399 ``` 400 start.bat 401 ``` 402 403 2. Linux环境启动测试框架。 404 405 ``` 406 ./strat.sh 407 ``` 408 409 410 - 设备形态选择。 411 412 根据实际的开发板选择,设备形态配置:developertest/config/framework\_config.xml。 413 414 - 执行测试指令。 415 1. 查询测试用例支持的子系统,模块,产品形态以及测试类型,使用show命令。 416 417 ``` 418 usage: 419 show productlist Querying Supported Product Forms 420 show typelist Querying the Supported Test Type 421 show subsystemlist Querying Supported Subsystems 422 show modulelist Querying Supported Modules 423 ``` 424 425 2. 执行测试指令示例,其中-t为必选,-ss和-tm为可选字段。 426 427 ``` 428 run -t ut -ss test -tm example 429 ``` 430 431 3. 参数说明:指定参数可以执行特定特性、模块对应的测试套。 432 433 ``` 434 usage: run [-h] [-p PRODUCTFORM] [-t [TESTTYPE [TESTTYPE ...]]] 435 [-ss SUBSYSTEM] [-tm TESTMODULE] [-ts TESTSUIT] 436 [-tc TESTCASE] [-tl TESTLEVEL] 437 438 optional arguments: 439 -h, --help show this help message and exit 440 -p PRODUCTFORM, --productform PRODUCTFORM Specified product form 441 -t [TESTTYPE [TESTTYPE ...]], --testtype [TESTTYPE [TESTTYPE ...]] 442 Specify test type(UT,MST,ST,PERF,ALL) 443 -ss SUBSYSTEM, --subsystem SUBSYSTEM Specify test subsystem 444 -tm TESTMODULE, --testmodule TESTMODULE Specified test module 445 -ts TESTSUIT, --testsuite TESTSUIT Specify test suite 446 -tc TESTCASE, --testcase TESTCASE Specify test case 447 -tl TESTLEVEL, --testlevel TESTLEVEL Specify test level 448 ``` 449 450 451 452- 测试框架帮助。 453 454 帮助指令,用于查询测试平台支持哪些测试指令。 455 456 ``` 457 help 458 ``` 459 460 461- 退出自测试平台。 462 463 退出自测试平台,使用如下命令退出测试平台。 464 465 ``` 466 quit 467 ``` 468 469 470## 测试结果与日志<a name="section414715805819"></a> 471 472- 通过在测试框架中执行测试指令,即可以生成测试日志和测试报告。 473- 测试结果 474 - 测试用例的结果会直接显示在控制台上,执行一次的测试结果根路径如下: 475 476 ``` 477 reports/xxxx-xx-xx-xx-xx-xx 478 ``` 479 480 - 测试用例格式化结果 481 482 ``` 483 result/ 484 ``` 485 486 - 测试用例日志 487 488 ``` 489 log/plan_log_xxxx-xx-xx-xx-xx-xx.log 490 ``` 491 492 - 测试报告汇总 493 494 ``` 495 summary_report.html 496 ``` 497 498 - 测试报告详情 499 500 ``` 501 details_report.html 502 ``` 503 504 505- 测试框架日志 506 507 ``` 508 reports/platform_log_xxxx-xx-xx-xx-xx-xx.log 509 ``` 510 511- 最新测试报告 512 513 ``` 514 reports/latest 515 ``` 516 517 518## 涉及仓<a name="section6299103515474"></a> 519 520**测试子系统** 521 522test\_developertest 523 524test\_xdevice 525 526test\_xdevice\_extension 527 528