• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.htm124
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/calculator150
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.cpp163
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    >![](public_sys-resources/icon-note.gif) **说明:**
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        >![](public_sys-resources/icon-note.gif) **说明:**
206        >\*样例参考:
207        >仅支持串口设备形态编译示例:developertest/examples/lite/cxx\_demo/test/unittest/common/calc\_subtraction\_test.cpp208        >支持hdc连接的设备形态编译示例:developertest/examples/calculator/test/unittest/common/calculator\_add\_test.cpp209        >注意点如下:
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        >![](public_sys-resources/icon-note.gif) **说明:**
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.xml257
258        >![](public_sys-resources/icon-note.gif) **说明:**
259        >如上资源文件功能:将resource目录下的test.txt文件通过hdc push命令推送到被测设备的/data/test/resource目录下。
260
261    6.  ohos\_test.xml文件标签说明如下:
262
263        >![](public_sys-resources/icon-note.gif) **说明:**
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/xdevice281    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.xml299
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        >![](public_sys-resources/icon-note.gif) **说明:**
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        >![](public_sys-resources/icon-note.gif) **说明:**
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.xml370
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.xml413
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