• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 测试子系统
2OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根据测试需求开发相关测试用例,开发阶段提前发现缺陷,大幅提高代码质量。
3
4本文从基础环境构建,用例开发,编译以及执行等方面介绍OpenHarmony测试框架如何运行和使用。
5## 基础环境构建
6测试框架依赖于python运行环境,在使用测试框架之前可参阅以下方式进行配置。
7 - [环境配置](../device-dev/subsystems/subsys-testguide-envbuild.md)
8 - [源码获取](../device-dev/get-code/sourcecode-acquire.md)
9
10
11## 测试框架目录简介
12以下是测试框架的目录层级架构,在使用测试框架过程中可在相应目录查找对应组件。
13```
14test  # 测试子系统
15├── developertest             # 开发者测试组件
16│   ├── aw                    # 测试框架的静态库
17│   ├── config                # 测试框架配置
18│   │   │ ...
19│   │   └── user_config.xml   # 用户使用配置
20│   ├── examples              # 测试用例示例
21│   ├── src                   # 测试框架源码
22│   ├── third_party           # 测试框架依赖第三方组件适配
23│   ├── reports               # 测试结果报告
24│   ├── BUILD.gn              # 测试框架编译入口
25│   ├── start.bat             # 开发者测试入口(Windows)
26│   └── start.sh              # 开发者测试入口(Linux)
27└── xdevice                   # 测试框架依赖组件
28```
29## 测试用例编写
30###  测试用例目录规划
31使用测试框架过程中,可根据以下层级关系规划测试用例目录。
32```
33subsystem                                  # 子系统
34├── partA                                  # 部件A
35│   ├── moduleA                            # 模块A
36│   │   ├── include
37│   │   ├── src                            # 业务代码
38│   │   └── test                           # 测试目录
39│   │       ├── unittest                   # 单元测试
40│   │       │   ├── common                 # 公共用例
41│   │       │   │   ├── BUILD.gn           # 测试用例编译配置
42│   │       │   │   └── testA_test.cpp     # 单元测试用例源码
43│   │       │   ├── phone                  # 手机形态用例
44│   │       │   ├── ivi                    # 车机形态用例
45│   │       │   └── liteos-a               # ipcamera使用liteos内核的用例
46│   │       ├── moduletest                 # 模块测试
47│   │       ...
48│   │
49│   ├── moduleB                      # 模块B
50│   ├── test
51│   │   └── resource                 # 依赖资源
52│   │       ├── moduleA              # 模块A
53│   │       │   ├── ohos_test.xml    # 资源配置文件
54│   │       ... └── 1.txt            # 资源
55│   │
56│   ├── ohos_build                   # 编译入口配置
57│   ...
5859...
60```
61> **注意:** 测试用例根据不同设备形态差异分为通用用例和非通用用例,建议将通用用例存放在common目录下,非通用用例存放在相应设备形态目录下。
62
63###  测试用例编写
64本测试框架支持多种语言用例编写,针对不同语言提供了不同的模板以供编写参考。
65
66#### C++参考示例
67
68- 用例源文件命名规范
69
70    测试用例源文件名称和测试套内容保持一致,文件命名采用全小写+下划线方式命名,以test结尾,具体格式为:[功能]_[子功能]_test,子功能支持向下细分。
71示例:
72    ```
73    calculator_sub_test.cpp
74    ```
75
76- 用例示例
77    ```
78
79    #include "calculator.h"
80    #include <gtest/gtest.h>
81
82    using namespace testing::ext;
83
84    class CalculatorSubTest : public testing::Test {
85    public:
86        static void SetUpTestCase(void);
87        static void TearDownTestCase(void);
88        void SetUp();
89        void TearDown();
90    };
91
92    void CalculatorSubTest::SetUpTestCase(void)
93    {
94        // input testsuit setup step,setup invoked before all testcases
95    }
96
97    void CalculatorSubTest::TearDownTestCase(void)
98    {
99        // input testsuit teardown step,teardown invoked after all testcases
100    }
101
102    void CalculatorSubTest::SetUp(void)
103    {
104        // input testcase setup step,setup invoked before each testcases
105    }
106
107    void CalculatorSubTest::TearDown(void)
108    {
109        // input testcase teardown step,teardown invoked after each testcases
110    }
111
112    /**
113     * @tc.name: integer_sub_001
114     * @tc.desc: Verify the sub function.
115     * @tc.type: FUNC
116     * @tc.require: Issue Number
117     */
118    HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
119    {
120        // step 1:调用函数获取结果
121        int actual = Sub(4,0);
122
123        // Step 2:使用断言比较预期与实际结果
124        EXPECT_EQ(4, actual);
125    }
126    ```
127    详细内容介绍:
128    1. 添加测试用例文件头注释信息
129
130        按照标准头注释信息格式填写,请查阅[编写规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81.md)131
132    2. 引用测试框架头文件和命名空间
133	    ```
134    	#include <gtest/gtest.h>
135
136    	using namespace testing::ext;
137    	```
138    3. 添加被测试类的头文件
139	    ```
140    	#include "calculator.h"
141    	```
142    4. 定义测试套(测试类)
143	    ```
144    	class CalculatorSubTest : public testing::Test {
145    	public:
146    	    static void SetUpTestCase(void);
147    	    static void TearDownTestCase(void);
148    	    void SetUp();
149    	    void TearDown();
150    	};
151
152    	void CalculatorSubTest::SetUpTestCase(void)
153    	{
154    	    // input testsuit setup step,setup invoked before all testcases
155    	}
156
157    	void CalculatorSubTest::TearDownTestCase(void)
158    	{
159    	    // input testsuit teardown step,teardown invoked after all testcases
160    	}
161
162    	void CalculatorSubTest::SetUp(void)
163    	{
164    	    // input testcase setup step,setup invoked before each testcases
165    	}
166
167    	void CalculatorSubTest::TearDown(void)
168    	{
169    	    // input testcase teardown step,teardown invoked after each testcases
170    	}
171    	```
172	    > **注意:** 在定义测试套时,测试套名称应与编译目标保持一致,采用大驼峰风格。
173
174    5. 测试用例实现,包含用例注释和逻辑实现
175	    ```
176    	/**
177    	 * @tc.name: integer_sub_001
178    	 * @tc.desc: Verify the sub function.
179    	 * @tc.type: FUNC
180    	 * @tc.require: Issue Number
181    	 */
182    	HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
183    	{
184    	    //step 1:调用函数获取结果
185    	    int actual = Sub(4,0);
186
187    	    //Step 2:使用断言比较预期与实际结果
188    	    EXPECT_EQ(4, actual);
189    	}
190    	```
191	    在编写用例时,我们提供了三种用例模板供您选择。
192
193	    |      类型 |    描述 |
194    	| ------------| ------------|
195    	| HWTEST(A,B,C)| 用例执行不依赖Setup&Teardown时,可选取|
196    	| HWTEST_F(A,B,C)| 用例执行(不含参数)依赖于Setup&Teardown时,可选取|
197    	| HWTEST_P(A,B,C)| 用例执行(含参数)依赖于Set&Teardown时,可选取|
198
199	    其中,参数A,B,C的含义如下:
200	- 参数A为测试套名。
201	- 参数B为测试用例名,其命名必须遵循[功能点]_[编号]的格式,编号为3位数字,从001开始。
202	- 参数C为测试用例等级,具体分为门禁level0 以及非门禁level1-level4共五个等级,其中非门禁level1-level4等级的具体选取规则为:测试用例功能越重要,level等级越低。
203
204	    **注意:**
205	- 测试用例的预期结果必须有对应的断言。
206	- 测试用例必须填写用例等级。
207	- 测试体建议按照模板分步实现。
208	- 用例描述信息按照标准格式@tc.xxx value书写,注释信息必须包含用例名称,用例类型,需求编号四项。其中用例测试类型@tc.type参数的选取,可参考下表。
209
210	    | 测试类型名称|类型编码|
211    	| ------------|------------|
212    	|功能测试      |FUNC|
213        |性能测试      |PERF|
214        |可靠性测试    |RELI|
215        |安全测试      |SECU|
216        |模糊测试      |FUZZ|
217
218
219#### JavaScript参考示例
220
221- 用例源文件命名规范
222
223    测试用例原文件名称采用大驼峰风格,以TEST结尾,具体格式为:[功能][子功能]TEST,子功能支持向下细分。
224示例:
225    ```
226    AppInfoTest.js
227    ```
228
229- 用例示例
230    ```
231    import app from '@system.app'
232
233    import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
234
235    describe("AppInfoTest", function () {
236        beforeAll(function() {
237            // input testsuit setup step,setup invoked before all testcases
238             console.info('beforeAll called')
239        })
240
241        afterAll(function() {
242             // input testsuit teardown step,teardown invoked after all testcases
243             console.info('afterAll called')
244        })
245
246        beforeEach(function() {
247            // input testcase setup step,setup invoked before each testcases
248             console.info('beforeEach called')
249        })
250
251        afterEach(function() {
252            // input testcase teardown step,teardown invoked after each testcases
253             console.info('afterEach called')
254        })
255
256        /*
257         * @tc.name:appInfoTest001
258         * @tc.desc:verify app info is not null
259         * @tc.type: FUNC
260         * @tc.require: Issue Number
261         */
262        it("appInfoTest001", 0, function () {
263            //step 1:调用函数获取结果
264            var info = app.getInfo()
265
266            //Step 2:使用断言比较预期与实际结果
267            expect(info != null).assertEqual(true)
268        })
269    })
270    ```
271    详细内容介绍:
272    1. 添加测试用例文件头注释信息
273
274        按照标准头注释信息格式填写,请查阅[编写规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81.md)275
276    2. 导入被测api和jsunit测试库
277	    ```
278    	import app from '@system.app'
279
280    	import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
281    	```
282    3. 定义测试套(测试类)
283	    ```
284    	describe("AppInfoTest", function () {
285    	    beforeAll(function() {
286    	        // input testsuit setup step,setup invoked before all testcases
287    	         console.info('beforeAll called')
288    	    })
289
290    	    afterAll(function() {
291    	         // input testsuit teardown step,teardown invoked after all testcases
292    	         console.info('afterAll called')
293    	    })
294
295    	    beforeEach(function() {
296    	        // input testcase setup step,setup invoked before each testcases
297    	         console.info('beforeEach called')
298    	    })
299
300    	    afterEach(function() {
301    	        // input testcase teardown step,teardown invoked after each testcases
302    	         console.info('afterEach called')
303    	    })
304    	```
305    4. 测试用例实现
306	    ```
307    	/*
308    	 * @tc.name:appInfoTest001
309    	 * @tc.desc:verify app info is not null
310    	 * @tc.type: FUNC
311    	 * @tc.require: Issue Number
312    	 */
313    	 it("appInfoTest001", 0, function () {
314    	    //step 1:调用函数获取结果
315            var info = app.getInfo()
316
317            //Step 2:使用断言比较预期与实际结果
318            expect(info != null).assertEqual(true)
319    	 })
320    	```
321
322### 测试用例编译文件编写
323根据测试用例目录规划,当执行某一用例时,测试框架会根据编译文件逐层查找,最终找到所需用例进行编译。下面通过不同示例来讲解gn文件如何编写。
324
325#### 测试用例编译配置文件
326针对不同语言,下面提供不同的编译模板以供参考。
327
328- **C++用例编译配置示例**
329    ```
330
331    import("//build/test.gni")
332
333    module_output_path = "subsystem_examples/calculator"
334
335    config("module_private_config") {
336      visibility = [ ":*" ]
337
338      include_dirs = [ "../../../include" ]
339    }
340
341    ohos_unittest("CalculatorSubTest") {
342      module_out_path = module_output_path
343
344      sources = [
345        "../../../include/calculator.h",
346        "../../../src/calculator.cpp",
347      ]
348
349      sources += [ "calculator_sub_test.cpp" ]
350
351      configs = [ ":module_private_config" ]
352
353      deps = [ "//third_party/googletest:gtest_main" ]
354    }
355
356    group("unittest") {
357      testonly = true
358      deps = [":CalculatorSubTest"]
359    }
360    ```
361    详细内容如下:
362
363    1. 添加文件头注释信息
364
365        按照标准头注释信息格式填写,请查阅[编写规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81.md)366
367    2. 导入编译模板文件
368	    ```
369    	import("//build/test.gni")
370    	```
371    3. 指定文件输出路径
372    	```
373    	module_output_path = "subsystem_examples/calculator"
374    	```
375    	> **说明:** 此处输出路径为部件/模块名。
376
377    4. 配置依赖包含目录
378
379    	```
380    	config("module_private_config") {
381    	  visibility = [ ":*" ]
382
383    	  include_dirs = [ "../../../include" ]
384    	}
385    	```
386    	> **说明:** 一般在此处对相关配置进行设置,在测试用例编译脚本中可直接引用。
387
388    5. 指定测试用例编译目标输出的文件名称
389
390    	```
391    	ohos_unittest("CalculatorSubTest") {
392    	}
393    	```
394    6. 编写具体的测试用例编译脚本(添加需要参与编译的源文件、配置和依赖)
395    	```
396    	ohos_unittest("CalculatorSubTest") {
397    	  module_out_path = module_output_path
398    	  sources = [
399    	    "../../../include/calculator.h",
400    	    "../../../src/calculator.cpp",
401    	    "../../../test/calculator_sub_test.cpp"
402    	  ]
403    	  sources += [ "calculator_sub_test.cpp" ]
404    	  configs = [ ":module_private_config" ]
405    	  deps = [ "//third_party/googletest:gtest_main" ]
406    	}
407    	```
408
409	    > **说明:根据测试类型的不同,在具体编写过程中可选择不同的测试类型:**
410    	 >
411    	 > - ohos_unittest:单元测试
412    	 > - ohos_moduletest:模块测试
413    	 > - ohos_systemtest:系统测试
414    	 > - ohos_performancetest:性能测试
415    	 > - ohos_securitytest:安全测试
416    	 > - ohos_reliabilitytest:可靠性测试
417 > - ohos_distributedtest:分布式测试
418
419    7. 对目标测试用例文件进行条件分组
420
421    	```
422    	group("unittest") {
423    	  testonly = true
424    	  deps = [":CalculatorSubTest"]
425    	}
426    	```
427    	> **说明:** 进行条件分组的目的在于执行用例时可以选择性的执行某一种特定类型的用例。
428
429- **JavaScript用例编译配置示例**
430
431    ```
432
433    import("//build/test.gni")
434
435    module_output_path = "subsystem_examples/app_info"
436
437    ohos_js_unittest("GetAppInfoJsTest") {
438      module_out_path = module_output_path
439
440      hap_profile = "./config.json"
441      certificate_profile = "//test/developertest/signature/openharmony_sx.p7b"
442    }
443
444    group("unittest") {
445      testonly = true
446      deps = [ ":GetAppInfoJsTest" ]
447    }
448    ```
449
450    详细内容如下:
451
452    1. 添加文件头注释信息
453
454        按照标准头注释信息格式填写,请查阅[编写规范](https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81.md)455
456    2. 导入编译模板文件
457
458    	```
459    	import("//build/test.gni")
460    	```
461    3. 指定文件输出路径
462
463    	```
464    	module_output_path = "subsystem_examples/app_info"
465    	```
466    	> **说明:** 此处输出路径为部件/模块名。
467
468    4. 指定测试用例编译目标输出的文件名称
469
470    	```
471    	ohos_js_unittest("GetAppInfoJsTest") {
472    	}
473    	```
474    	> **说明:**
475    	>- 使用模板ohos_js_unittest定义js测试套,注意与C++用例区分。
476    	>- js测试套编译输出文件为hap类型,hap名为此处定义的测试套名,测试套名称必须以JsTest结尾。
477
478    5. 指定hap包配置文件config.json和签名文件,两个配置为必选项
479
480    	```
481    	ohos_js_unittest("GetAppInfoJsTest") {
482    	  module_out_path = module_output_path
483
484    	  hap_profile = "./config.json"
485    	  certificate_profile = "//test/developertest/signature/openharmony_sx.p7b"
486    	}
487    	```
488    	 config.json为hap编译所需配置文件,需要开发者根据被测sdk版本配置“target”项,其余项可默认,具体如下所示:
489
490    	```
491    	{
492    	  "app": {
493    	    "bundleName": "com.example.myapplication",
494    	    "vendor": "example",
495    	    "version": {
496    	      "code": 1,
497    	      "name": "1.0"
498    	    },
499    	    "apiVersion": {
500    	      "compatible": 4,
501    	      "target": 5     // 根据被测sdk版本进行修改,此例为sdk5
502    	    }
503    	  },
504    	  "deviceConfig": {},
505    	  "module": {
506    	    "package": "com.example.myapplication",
507    	    "name": ".MyApplication",
508    	    "deviceType": [
509    	      "phone"
510    	    ],
511    	    "distro": {
512    	      "deliveryWithInstall": true,
513    	      "moduleName": "entry",
514    	      "moduleType": "entry"
515    	    },
516    	    "abilities": [
517    	      {
518    	      "skills": [
519    	          {
520    	            "entities": [
521    	              "entity.system.home"
522    	            ],
523    	            "actions": [
524    	              "action.system.home"
525    	            ]
526    	          }
527    	        ],
528    	        "name": "com.example.myapplication.MainAbility",
529    	        "icon": "$media:icon",
530    	        "description": "$string:mainability_description",
531    	        "label": "MyApplication",
532    	        "type": "page",
533    	        "launchType": "multiton"
534    	      }
535    	    ],
536    	    "js": [
537    	      {
538    	        "pages": [
539    	          "pages/index/index"
540    	        ],
541    	        "name": "default",
542    	          "window": {
543    	             "designWidth": 720,
544    	             "autoDesignWidth": false
545    	          }
546    	        }
547    	      ]
548    	    }
549    	  }
550    	```
551    6. 对目标测试用例文件进行条件分组
552    	```
553    	group("unittest") {
554    	  testonly = true
555    	  deps = [ ":GetAppInfoJsTest" ]
556    	}
557    	```
558    	> **说明:** 进行条件分组的目的在于执行用例时可以选择性的执行某一种特定类型的用例。
559
560#### 编译入口配置文件ohos.build
561
562当完成用例编译配置文件编写后,需要进一步编写部件编译配置文件,以关联到具体的测试用例。
563```
564"partA": {
565    "module_list": [
566
567    ],
568    "inner_list": [
569
570    ],
571    "system_kits": [
572
573    ],
574    "test_list": [
575      "//system/subsystem/partA/calculator/test:unittest"  //配置模块calculator下的test
576    ]
577 }
578```
579> **说明:** test_list中配置的是对应模块的测试用例。
580
581### 测试用例资源配置
582测试依赖资源主要包括测试用例在执行过程中需要的图片文件,视频文件、第三方库等对外的文件资源。
583
584依赖资源文件配置步骤如下:
5851. 在部件的test目录下创建resource目录,在resource目录下创建对应的模块,在模块目录中存放该模块所需要的资源文件
586
5872. 在resource目录下对应的模块目录中创建一个ohos_test.xml文件,文件内容格式如下:
588	```
589	<?xml version="1.0" encoding="UTF-8"?>
590	<configuration ver="2.0">
591	    <target name="CalculatorSubTest">
592	        <preparer>
593	            <option name="push" value="test.jpg -> /data/test/resource" src="res"/>
594	            <option name="push" value="libc++.z.so -> /data/test/resource" src="out"/>
595	        </preparer>
596	    </target>
597	</configuration>
598	```
5993. 在测试用例的编译配置文件中定义resource_config_file进行指引,用来指定对应的资源文件ohos_test.xml
600	```
601	ohos_unittest("CalculatorSubTest") {
602	  resource_config_file = "//system/subsystem/partA/test/resource/calculator/ohos_test.xml"
603	}
604	```
605	>**说明:**
606	>- target_name: 测试套的名称,定义在测试目录的BUILD.gn中。preparer: 表示该测试套执行前执行的动作。
607	>- src="res": 表示测试资源位于test目录下的resource目录下,src="out":表示位于out/release/$(部件)目录下。
608
609## 测试用例执行
610在执行测试用例之前,针对用例使用设备的不同,需要对相应配置进行修改,修改完成即可执行测试用例。
611
612### user_config.xml配置
613```
614<user_config>
615  <build>
616    <!-- 是否编译demo用例, 默认为false,如果需要编译demo可修改为true -->
617    <example>false</example>
618    <!-- 是否编译版本, 默认为false -->
619    <version>false</version>
620    <!-- 是否编译测试用例, 默认为true,若已完成编译,再执行用例之前可修改为false,防止重新编译 -->
621    <testcase>true</testcase>
622  </build>
623  <environment>
624    <!-- 配置远程映射机器的IP及端口,以支持HDC连接的设备 -->
625    <device type="usb-hdc">
626      <ip></ip>
627      <port></port>
628      <sn></sn>
629    </device>
630    <!-- 配置设备的串口信息,以支持串口连接的设备 -->
631    <device type="com" label="ipcamera">
632      <serial>
633        <com></com>
634        <type>cmd</type>
635        <baud_rate>115200</baud_rate>
636        <data_bits>8</data_bits>
637        <stop_bits>1</stop_bits>
638        <timeout>1</timeout>
639      </serial>
640    </device>
641  </environment>
642  <!-- 配置测试用例路径,若测试用例未编译,即<testcase>标签属性为true时,此处默认不填写;若编译已完成,需在此处指定测试用例的实际路径 -->
643  <test_cases>
644    <dir></dir>
645  </test_cases>
646  <!-- 配置覆盖率编译路径 -->
647  <coverage>
648    <outpath></outpath>
649  </coverage>
650  <!-- NFS挂载信息配置,被测设备仅支持串口连接时配置,指定NFS的映射路径,host_dir为PC侧的NFS目录,board_dir为板侧创建的目录 -->
651  <NFS>
652    <host_dir></host_dir>
653    <mnt_cmd></mnt_cmd>
654    <board_dir></board_dir>
655  </NFS>
656</user_config>
657```
658>**说明:** 在执行测试用例之前,若使用HDC连接设备,用例仅需配置设备IP和端口号即可,其余信息均默认不修改。
659
660### Windows环境执行
661#### 测试用例编译
662
663由于Windows环境下无法实现用例编译,因此执行用例前需要在Linux环境下进行用例编译,用例编译命令:
664```
665./build.sh --product-name hispark_taurus_standard --build-target make_test
666```
667编译完成后,测试用例将自动保存在out/hispark_taurus/packages/phone/images/tests目录下。
668
669>说明: hispark_taurus_standard为当前版本所支持的产品,make_test表示全部用例。根据不同需求,编译选项可进行不同选择:
670> -  --product-name   # 编译产品名称(必选)
671> - --build-target   # 指定编译目标(可选)
672
673#### 搭建执行环境
6741. 在Windows环境创建测试框架目录Test,并在此目录下创建testcase目录
675
6762. 从Linux环境拷贝测试框架developertest和xdevice到创建的Test目录下,拷贝编译好的测试用例到testcase目录下
677
678>**说明:** 将测试框架及测试用例从Linux环境移植到Windows环境,以便后续执行。
679
6803. 修改user_config.xml
681	```
682	<build>
683	  <!-- 由于测试用例已编译完成,此标签属性需改为false -->
684	  <testcase>false</testcase>
685	</build>
686	<test_cases>
687	  <!-- 由于已将测试用例拷贝到Windows环境下,测试用例输出路径发生改变,需要修改为拷贝后所存放的路径 -->
688	  <dir>D:\Test\testcase\tests</dir>
689	</test_cases>
690	```
691	>**说明:** `<testcase>`标签表示是否需要编译用例;`<dir>`标签表示测试用例查找路径。
692
693#### 执行用例
6941. 启动测试框架
695	```
696	start.bat
697	```
6982. 选择产品形态
699
700    进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
701
7023. 执行测试用例
703
704    当选择完产品形态,可参考如下指令执行测试用例。
705	```
706	run -t UT -ts CalculatorSubTest -tc interger_sub_00l
707	```
708	执行命令参数说明:
709	```
710	-t [TESTTYPE]: 指定测试用例类型,有UT,MST,ST,PERF等。(必选参数)
711	-tp [TESTPART]: 指定部件,可独立使用。
712	-tm [TESTMODULE]: 指定模块,不可独立使用,需结合-tp指定上级部件使用。
713	-ts [TESTSUITE]: 指定测试套,可独立使用。
714	-tc [TESTCASE]: 指定测试用例,不可独立使用,需结合-ts指定上级测试套使用。
715	-h : 帮助命令。
716	```
717### Linux环境执行
718#### 远程端口映射
719为了在Linux远程服务器以及Linux虚拟机两种环境下执行测试用例,需要对端口进行远程映射,以实现与设备的数据通路连接。具体操作如下:
7201. HDC Server指令:
721	```
722	hdc_std kill
723	hdc_std -m -s 0.0.0.0:8710
724	```
725	>**说明:** IP和端口号为默认值。
726
7272. HDC Client指令:
728	```
729	hdc_std -s xx.xx.xx.xx:8710 list targets
730	```
731	>**说明:** 此处IP填写设备侧IP地址。
732
733#### 执行用例
7341. 启动测试框架
735	```
736	./start.sh
737	```
7382. 选择产品形态
739
740    进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
741
7423. 执行测试用例
743
744    测试框架在执行用例时会根据指令找到所需用例,自动实现用例编译,执行过程,完成自动化测试。
745	```
746	run -t UT -ts CalculatorSubTest -tc interger_sub_00l
747	```
748	执行命令参数说明:
749	```
750	-t [TESTTYPE]: 指定测试用例类型,有UT,MST,ST,PERF等。(必选参数)
751	-tp [TESTPART]: 指定部件,可独立使用。
752	-tm [TESTMODULE]: 指定模块,不可独立使用,需结合-tp指定上级部件使用。
753	-ts [TESTSUITE]: 指定测试套,可独立使用。
754	-tc [TESTCASE]: 指定测试用例,不可独立使用,需结合-ts指定上级测试套使用。
755	-h : 帮助命令。
756	```
757
758## 测试报告日志
759当执行完测试指令,控制台会自动生成测试结果,若需要详细测试报告您可在相应的数据文档中进行查找。
760
761### 测试结果
762测试结果输出根路径如下:
763```
764test/developertest/reports/xxxx_xx_xx_xx_xx_xx
765```
766>**说明:** 测试报告文件目录将自动生成。
767
768该目录中包含以下几类结果:
769| 类型 | 描述|
770| ------------ | ------------ |
771| result/ |测试用例格式化结果|
772| log/plan_log_xxxx_xx_xx_xx_xx_xx.log | 测试用例日志 |
773| summary_report.html | 测试报告汇总 |
774| details_report.html | 测试报告详情 |
775
776### 测试框架日志
777```
778reports/platform_log_xxxx_xx_xx_xx_xx_xx.log
779```
780
781### 最新测试报告
782```
783reports/latest
784```
785
786## 相关仓
787
788[test\_xdevice](https://gitee.com/openharmony/test_xdevice/blob/master/README_zh.md)
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816