Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
c0d63f46
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c0d63f46
编写于
9月 18, 2021
作者:
S
stivn
提交者:
Gitee
9月 18, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update zh-cn/device-dev/subsystems/subsys-testguide-test.md.
Signed-off-by:
N
stivn
<
sunteng10@huawei.com
>
上级
a4163ef2
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
529 addition
and
516 deletion
+529
-516
zh-cn/device-dev/subsystems/subsys-testguide-test.md
zh-cn/device-dev/subsystems/subsys-testguide-test.md
+529
-516
未找到文件。
zh-cn/device-dev/subsystems/subsys-testguide-test.md
浏览文件 @
c0d63f46
...
...
@@ -41,8 +41,8 @@ subsystem # 子系统
│ │ │ │ ├── BUILD.gn # 测试用例编译配置
│ │ │ │ ├── testA_test.cpp # 单元测试用例源码
│ │ │ ├── phone # 手机形态用例
│ │ │ ├── ivi # 车机形态
│ │ │ └── liteos-a # ipcamera使用liteos内核
时
的用例
│ │ │ ├── ivi # 车机形态
用例
│ │ │ └── liteos-a # ipcamera使用liteos内核的用例
│ │ └── resource # 依赖资源
│ │ └── ohos_test.xml
│ ├── moduleB # 模块B
...
...
@@ -60,19 +60,20 @@ subsystem # 子系统
### 测试用例编写
本测试框架支持多种语言用例编写,针对不同语言提供了不同的模板以供编写参考。
-
**C++参考示例**
1.
用例源文件命名规范
**C++参考示例**
测试用例源文件名称和测试套内容保持一致,文件命名采用全小写+下划线方式命名,以test结尾,具体格式为:[功能]_[子功能]_test,子功能支持向下细分。
-
用例源文件命名规范
测试用例源文件名称和测试套内容保持一致,文件命名采用全小写+下划线方式命名,以test结尾,具体格式为:[功能]_[子功能]_test,子功能支持向下细分。
示例:
```
calculator_sub_test.cpp
```
```
calculator_sub_test.cpp
```
2.
用例示例
```
/*
-
用例示例
```
/*
* Copyright (c) 2021 XXXX Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -87,55 +88,56 @@ calculator_sub_test.cpp
* limitations under the License.
*/
#include "calculator.h"
#include <gtest/gtest.h>
#include "calculator.h"
#include <gtest/gtest.h>
using namespace testing::ext;
using namespace testing::ext;
class CalculatorSubTest : public testing::Test {
public:
class CalculatorSubTest : public testing::Test {
public:
static void SetUpTestCase(void);
static void TearDownTestCase(void);
void SetUp();
void TearDown();
};
};
void CalculatorSubTest::SetUpTestCase(void)
{
void CalculatorSubTest::SetUpTestCase(void)
{
// input testsuit setup step,setup invoked before all testcases
}
}
void CalculatorSubTest::TearDownTestCase(void)
{
void CalculatorSubTest::TearDownTestCase(void)
{
// input testsuit teardown step,teardown invoked after all testcases
}
}
void CalculatorSubTest::SetUp(void)
{
void CalculatorSubTest::SetUp(void)
{
// input testcase setup step,setup invoked before each testcases
}
}
void CalculatorSubTest::TearDown(void)
{
void CalculatorSubTest::TearDown(void)
{
// input testcase teardown step,teardown invoked after each testcases
}
}
/**
/**
* @tc.name: integer_sub_001
* @tc.desc: Verify the sub function.
* @tc.type: FUNC
* @tc.require: Issue Number
*/
HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
{
// step 1:调用函数计算
结果
HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
{
// step 1:调用函数获取
结果
int actual = Sub(4,0);
// Step 2:使用断言比较预期与计算结果
// Step 2:使用断言比较预期与实际结果
EXPECT_EQ(4, actual);
}
```
详细内容介绍:
1.
添加测试用例文件头注释信息
}
```
详细内容介绍:
1.
添加测试用例文件头注释信息
```
/*
* Copyright (c) 2021 XXXX Device Co., Ltd.
...
...
@@ -152,17 +154,17 @@ HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
* limitations under the License.
*/
```
2.
引用测试框架头文件和命名空间
2. 引用测试框架头文件和命名空间
```
#include
<gtest
/
gtest.h
>
using namespace testing::ext;
```
3.
添加被测试类的头文件
3. 添加被测试类的头文件
```
#include "calculator.h"
```
4.
定义测试套(测试类)
4.
定义测试套(测试类)
```
class CalculatorSubTest : public testing::Test {
public:
...
...
@@ -194,7 +196,7 @@ HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
```
> **注意:** 在定义测试套时,测试套名称应与编译目标保持一致,采用大驼峰风格。
5.
测试用例实现,包含用例注释和逻辑实现
5. 测试用例实现,包含用例注释和逻辑实现
```
/
**
*
@tc.name: integer_sub_001
...
...
@@ -204,9 +206,10 @@ HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
*
/
HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
{
//step 1:调用函数计算
结果
//step 1:调用函数获取
结果
int actual = Sub(4,0);
//Step 2:使用断言比较预期与计算结果
//Step 2:使用断言比较预期与实际结果
EXPECT_EQ(4, actual);
}
```
...
...
@@ -214,14 +217,14 @@ HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
| 类型 | 描述 |
| ------------| ------------|
| HWTEST(A,B,C)| 用例执行不依赖Setup()
时,可选取|
| HWTEST(A,B,C)| 用例执行依赖于Setup()
时,可选取|
| HWTEST(A,B,C)| 需要做参数化测试
时,可选取|
| HWTEST(A,B,C)| 用例执行不依赖Setup&Teardown
时,可选取|
| HWTEST_F(A,B,C)| 用例执行(不含参数)依赖于Setup&Teardown
时,可选取|
| HWTEST_P(A,B,C)| 用例执行(含参数)依赖于Set&Teardown
时,可选取|
其中,参数A,B,C的含义如下:
- 参数A为测试套名。
- 参数B为测试用例名,其命名必须遵循[功能点]_[编号]的格式,编号为3位
数字,从001开始。
- 参数C为测试用例等级,具体分为门禁level0 以及非门禁level1-level4共五
个等级,其中非门禁level1-level4等级的具体选取规则为:测试用例功能越重要,level等级越低。
- 参数B为测试用例名,其命名必须遵循[功能点]_[编号]的格式,编号为3位数字,从001开始。
- 参数C为测试用例等级,具体分为门禁level0 以及非门禁level1-level4共五个等级,其中非门禁level1-level4等级的具体选取规则为:测试用例功能越重要,level等级越低。
**注意:**
- 测试用例的预期结果必须有对应的断言。
...
...
@@ -234,19 +237,19 @@ HWTEST_F(CalculatorSubTest, integer_sub_001, TestSize.Level1)
| 类型编码|FUNC|PERF|RELI|SECU|FUZZ|
-
**JavaScript参考示例**
**JavaScript参考示例**
1.
用例源文件命名规范
-
用例源文件命名规范
测试用例原文件名称采用大驼峰风格,以TEST结尾,具体格式为:
[
功能
][
子功能
]
TEST,子功能支持向下细分。
测试用例原文件名称采用大驼峰风格,以TEST结尾,具体格式为:[功能][子功能]TEST,子功能支持向下细分。
示例:
```
AppInfoTest.js
```
```
AppInfoTest.js
```
2.
用例示例
```
/*
-
用例示例
```
/*
* Copyright (C) 2021 XXXX Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -260,11 +263,11 @@ AppInfoTest.js
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import app from '@system.app'
import app from '@system.app'
import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
describe("AppInfoTest", function () {
describe("AppInfoTest", function () {
beforeAll(function() {
// input testsuit setup step,setup invoked before all testcases
console.info('beforeAll caled')
...
...
@@ -292,13 +295,16 @@ describe("AppInfoTest", function () {
* @tc.require: Issue Number
*/
it("appInfoTest001", 0, function () {
//step 1:调用函数获取结果
var info = app.getInfo()
//Step 2:使用断言比较预期与实际结果
expect(info != null).assertEqual(true)
})
})
```
详细内容介绍:
1.
添加测试用例文件头注释信息
})
```
详细内容介绍:
1.
添加测试用例文件头注释信息
```
/*
* Copyright (C) 2021 XXXX Device Co., Ltd.
...
...
@@ -315,13 +321,13 @@ describe("AppInfoTest", function () {
* limitations under the License.
*/
```
2.
导入被测api和jsunit测试库
2. 导入被测api和jsunit测试库
```
import app from '@system.app'
import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
```
3.
定义测试套
3. 定义测试套(测试类)
```
describe("AppInfoTest", function () {
beforeAll(function() {
...
...
@@ -344,7 +350,7 @@ describe("AppInfoTest", function () {
console.info('afterEach caled')
})
```
4.
测试用例实现
4.
测试用例实现
```
/*
* @tc.name:appInfoTest001
...
...
@@ -353,7 +359,10 @@ describe("AppInfoTest", function () {
* @tc.require: Issue Number
*/
it("appInfoTest001", 0, function () {
//step 1:调用函数获取结果
var info = app.getInfo()
//Step 2:使用断言比较预期与实际结果
expect(info != null).assertEqual(true)
})
```
...
...
@@ -365,20 +374,20 @@ describe("AppInfoTest", function () {
针对不同语言,下面提供不同的编译模板以供参考。
- **C++用例编译配置示例**
```
# Copyright (c) 2021 XXXX Device Co., Ltd.
```
# Copyright (c) 2021 XXXX Device Co., Ltd.
import("//build/test.gni")
import("//build/test.gni")
module_output_path = "subsystem_examples/calculator"
module_output_path = "subsystem_examples/calculator"
config("module_private_config") {
config("module_private_config") {
visibility = [ ":*" ]
include_dirs = [ "../../../include" ]
}
}
ohos_unittest("CalculatorSubTest") {
ohos_unittest("CalculatorSubTest") {
module_out_path = module_output_path
sources = [
...
...
@@ -391,30 +400,30 @@ ohos_unittest("CalculatorSubTest") {
configs = [ ":module_private_config" ]
deps = [ "//third_party/googletest:gtest_main" ]
}
}
group("unittest") {
group("unittest") {
testonly = true
deps = [":CalculatorSubTest"]
}
```
详细内容如下:
}
```
详细内容如下:
1.
添加文件头注释信息
1. 添加文件头注释信息
```
# Copyright (c) 2021 XXXX Device Co., Ltd.
```
2.
导入编译模板文件
2. 导入编译模板文件
```
import("//build/test.gni")
```
3.
指定文件输出路径
3.
指定文件输出路径
```
module_output_path = "subsystem_examples/calculator"
```
> **说明:** 此处输出路径为部件/模块名。
4.
配置依赖包含目录
4.
配置依赖包含目录
```
config("module_private_config") {
...
...
@@ -425,13 +434,13 @@ group("unittest") {
```
> **说明:** 一般在此处对相关配置进行设置,在测试用例编译脚本中可直接引用。
5.
指定测试用例编译目标输出的文件名称
5.
指定测试用例编译目标输出的文件名称
```
ohos_unittest("CalculatorSubTest") {
}
```
6.
编写具体的测试用例编译脚本(添加需要参与编译的源文件、配置和依赖)
6.
编写具体的测试用例编译脚本(添加需要参与编译的源文件、配置和依赖)
```
ohos_unittest("CalculatorSubTest") {
module_out_path = module_output_path
...
...
@@ -455,7 +464,7 @@ group("unittest") {
> - ohos_reliabilitytest:可靠性测试
> - ohos_distributedtest:分布式测试
7.
对目标测试用例文件进行条件分组
7. 对目标测试用例文件进行条件分组
```
group("unittest") {
...
...
@@ -467,46 +476,46 @@ group("unittest") {
-
**JavaScript用例编译配置示例**
```
# Copyright (C) 2021 XXXX Device Co., Ltd.
```
# Copyright (C) 2021 XXXX Device Co., Ltd.
import("//build/test.gni")
import("//build/test.gni")
module_output_path = "subsystem_examples/app_info"
module_output_path = "subsystem_examples/app_info"
ohos_js_unittest("GetAppInfoJsTest") {
ohos_js_unittest("GetAppInfoJsTest") {
module_out_path = module_output_path
hap_profile = "./config.json"
certificate_profile = "//test/developertest/signature/openharmony_sx.p7b"
}
}
group("unittest") {
group("unittest") {
testonly = true
deps = [ ":GetAppInfoJsTest" ]
}
```
}
```
详细内容如下:
详细内容如下:
1.
添加文件头注释信息
1. 添加文件头注释信息
```
# Copyright (C) 2021 XXXX Device Co., Ltd.
```
2.
导入编译模板文件
2. 导入编译模板文件
```
import("//build/test.gni")
```
3.
指定文件输出路径
3. 指定文件输出路径
```
module_output_path = "subsystem_examples/app_info"
```
> **说明:** 此处输出路径为部件/模块名。
4.
指定测试用例编译目标输出的文件名称
4. 指定测试用例编译目标输出的文件名称
```
ohos_js_unittest("GetAppInfoJsTest") {
...
...
@@ -516,7 +525,7 @@ group("unittest") {
>- 使用模板ohos_js_unittest定义js测试套,注意与C++用例区分。
>- js测试套编译输出文件为hap类型,hap名为此处定义的测试套名,测试套名称必须以JsTest结尾。
5.
指定hap包配置文件config.json和签名文件,两个配置为必选项
5. 指定hap包配置文件config.json和签名文件,两个配置为必选项
```
ohos_js_unittest("GetAppInfoJsTest") {
...
...
@@ -539,7 +548,7 @@ group("unittest") {
},
"apiVersion": {
"compatible": 4,
"target": 5 #
根据被测sdk版本进行修改,此例为sdk5
"target": 5 //
根据被测sdk版本进行修改,此例为sdk5
}
},
"deviceConfig": {},
...
...
@@ -589,7 +598,7 @@ group("unittest") {
}
}
```
6.
对目标测试用例文件进行条件分组
6. 对目标测试用例文件进行条件分组
```
group("unittest") {
testonly = true
...
...
@@ -625,7 +634,7 @@ group("unittest") {
依赖资源文件配置步骤如下:
1.
在部件或者模块的test目录下创建resource目录,存放需要的资源文件
2.
在resource目录下创建一个ohos_test.xml文件,文件内容格式如下
2.
在resource目录下创建一个ohos_test.xml文件,文件内容格式如下
:
```
<?xml version="1.0" encoding="UTF-8"?>
<configuration ver="2.0">
...
...
@@ -736,10 +745,12 @@ group("unittest") {
start.bat
```
2.
选择产品形态
进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
3.
执行测试用例
当选择完产品形态,可参考如下指令执行测试用例。
当选择完产品形态,可参考如下指令执行测试用例。
```
run -t UT -ts CalculatorSubTest -tc interger_sub_00l
```
...
...
@@ -774,10 +785,12 @@ group("unittest") {
./start.sh
```
2.
选择产品形态
进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
进入测试框架,系统会自动提示您选择产品形态,请根据实际的开发板进行选择。例如:Hi3516DV300。
3.
执行测试用例
测试框架在执行用例时会根据指令找到所需用例,自动实现用例编译,执行过程,完成自动化测试。
测试框架在执行用例时会根据指令找到所需用例,自动实现用例编译,执行过程,完成自动化测试。
```
run -t UT -ts CalculatorSubTest -tc interger_sub_00l
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录