同步操作将从 OpenHarmony/docs 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
测试子系统提供基于python开发的一键式的开发者自测试平台,支持跨平台使用以及三方测试框架拓展,主要包括测试用例编译、测试用例管理、测试用例调度分发、测试用例执行、测试结果收集、测试报告生成、测试用例模板、测试环境管理等模块。
在测试子系统开发前,开发者应先了解以下概念:
测试用例编译
支持将测试用例源代码编译成可在被测设备侧执行的二进制文件。
测试用例调度分发
支持将测试用例通过网口通道或者串口通道分发到不同的被测设备上,并且为每一个测试用例分配特定的测试用例执行器。
测试用例执行器
负责测试用例的预处理,用例执行,结果记录等执行逻辑。
测试用例模板
定义了测试用例以及用例编译配置GN文件的统一格式。
测试平台kit
测试平台运行过程中公共方法,如提供测试用例目录向被测设备挂载文件系统,测试用例推送到被测设备,或者从被测设备获取测试结果等操作。
测试报告生成
定义开发者自测试报告模板,生成web测试报告。
测试环境管理
支持通过USB、串口等方式管理被测设备,功能包括设备发现,设备状态查询等。
测试平台通过shell脚本启动,以命令行方式支持一系列的测试指令执行,通过命令行输出测试结果。
表 1 环境要求
|
|
|
|
如测试环境为Linux,需要安装系统组件readline,命令如下:
sudo apt-get install libreadline-dev
安装成功提示如下:
Reading package lists... Done
Building dependency tree
Reading state information... Done
libreadline-dev is already the newest version (7.0-3).
0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.
安装Python扩展组件setuptools、(rsa、paramiko、以及pyserial,设备仅支持串口时安装),命令如下:
1、安装setuptools,安装命令如下:
pip install setuptools
安装成功提示如下:
Requirement already satisfied: setuptools in d:\programs\python37\lib\site-packages (41.2.0)
2、安装rsa,安装命令如下:
pip install rsa
安装成功提示如下:
Installing collected packages: pyasn1, rsa
Successfully installed pyasn1-0.4.8 rsa-4.7
3、安装Paramiko,安装命令如下:
pip install paramiko
安装成功提示如下:
Installing collected packages: pycparser, cffi, pynacl, bcrypt, cryptography, paramiko
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
4、安装pyserial(被测设备仅支持串口时安装),安装命令如下:
pip install pyserial
安装成功提示如下:
Requirement already satisfied: pyserial in d:\programs\python37\lib\site-packages\pyserial-3.4-py3.7.egg (3.4)
安装NFS server(被测设备仅支持串口时安装)。
Windows环境安装
下载并安装haneWIN NFS Server1.2.50,地址:https://www.hanewin.net/nfs-e.htm
Linux环境下安装
sudo apt install nfs-kernel-server
所有环境配置安装完成,即可在IDE中进行测试平台代码开发调试,推荐的IDE为 DevEco Studio。
表 2 检验环境
针对对开发的业务代码进行白盒测试验证。
测试框架集成了开源的单元测试框架,并对测试用例的宏定义做了扩展,具体框架说明详见开源官方文档。
表 3 测试框架扩展宏定义说明
按照开发者测试用例目录规划定义测试套文件,需要继承testing::Test类,命名以被测特性+Test命名,示例代码路径:test/developertest/examples/lite/cxx_demo/test/unittest/common/calc_subtraction_test.cpp
/*
* Copyright (c) 2020 OpenHarmony.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
using namespace std;
using namespace testing::ext;
class CalcSubtractionTest : public testing::Test {
public:
static void SetUpTestCase(void);
static void TearDownTestCase(void);
void SetUp();
void TearDown();
};
说明: 测试用例规范
- 命名规范 测试用例源文件名称和测试套内容保持一致,测试套与用例之间关系1:N,测试套与测试源文件之间关系1:1,每个源文件全局唯一,格式:[特性]_[功能]_[子功能1]_[子功能1.1],子功能支持向下细分。 文件命名采用全小写+下划线方式命名,以test结尾,如demo用例:developertest/examples/lite/cxx_demo
- 测试用例编码规范 开发者测试用例原则上与特性代码编码规范保持一致,另外需要添加必要的用例描述信息,详见•自测试用例模板。
- 测试用例编译配置规范 测试用例采用GN方式编译,配置遵循本开源项目的编译指导。
- 测试用例模板 详见测试demo用例:developertest/examples/lite/cxx_demo/test/unittest/common/calc_subtraction_test.cpp
实现测试套执行过程需要的预处理操作和后处理操作,即实现SetUp和TearDown方法。
void CalcSubtractionTest::SetUpTestCase(void)
{
// step 1: input testsuite setup step
}
void CalcSubtractionTest::TearDownTestCase(void)
{
// step 2: input testsuite teardown step
}
void CalcSubtractionTest::SetUp(void)
{
// step 3: input testcase setup step
}
void CalcSubtractionTest::TearDown(void)
{
// step 4: input testcase teardown step
}
针对被测对象的特性编写测试用例,以使用HWTEST_F为例说明。
/**
* @tc.name: integer_sub_001
* @tc.desc: Test Calculator
* @tc.type: FUNC
* @tc.require: AR00000000 SR00000000
*/
HWTEST_F(CalcSubtractionTest, integer_sub_001, TestSize.Level1)
{
EXPECT_EQ(0, Subtraction(1, 0));
}
说明:
- @tc.name:用例名称,对测试目的简要描述。
- @tc.desc:描述用例详细描述,包括测试目的、测试步骤、期望结果等。
- @tc.type:测试属性分类(FUNC、PERF、SECU、RELI)。
- @tc.require:需求编号或者issue编号,用来将修改与用例关联。
编写用例编译GN文件,其中包括定义用例编译目标,添加编译配置依赖,源文件等,举例说明:
示例文件路径:test/developertest/examples/lite/cxx_demo/test/unittest/common/BUILD.gn)。
import("//build/lite/config/test.gni")
unittest("CalcSubTest") {
output_extension = "bin"
sources = [
"calc_subtraction_test.cpp"
]
include_dirs = []
deps = []
}
将用例编译目标添加到子系统编译配置中,保证用例随版本一起编译,举例说明:
支持hdc连接的设备,编译配置示例路径:test/developertest/examples/ohos.build。
{
"subsystem": "subsystem_examples",
"parts": {
"subsystem_examples": {
"module_list": [
"//test/developertest/examples/detector:detector",
... ...
],
"test_list": [
"//test/developertest/examples/detector/test:unittest",
... ...
]
},
... ...
}
仅支持串口的设备,编译配置示例路径:test/developertest/examples/lite/BUILD.gn。
import("//build/lite/config/test.gni")
subsystem_test("test") {
test_components = []
if(ohos_kernel_type == "liteos_riscv") {
features += [
]
}else if(ohos_kernel_type == "liteos_a") {
test_components += [
"//test/developertest/examples/lite/cxx_demo/test/unittest/common:CalcSubTest"
]
}
}
编写测试用例资源配置,当测试用例需要使用静态测试资源文件时使用该配置。
在部件或者模块的test目录下创建resource目录。
在resource目录下创建形态目录,如phone。
在设备形态目录下创建一个以模块名命名的文件夹,如testmodule。
在模块目录下创建一个ohos_test.xml文件,文件内容格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration ver="2.0">
<target name="DetectorFileTest">
<preparer>
<option name="push" value="test.txt -> /data/test/resource" src="res"/>
</preparer>
</target>
</configuration>
在测试用例的编译配置文件中定义resource_config_file,用来指定对应的资源文件ohos_test.xml。
说明: 如上资源文件功能:将resource目录下的test.txt文件通过hdc push命令推送到被测设备的/data/test/resource目录下。
以上步骤完成即完成测试用例编写,即可执行测试用例。
说明:
- 支持hdc连接的设备,测试用例支持单独编译。
- 仅支持串口连接的设备,在代码根路径下执行编译debug版本的命令,即可编译测试用例。 测试用例用例的执行详见测试平台使用。
测试子系统代码仓提供了完整demo用例,demo用例路径:test/developertest/examples/。以一个减法运算方法编写测试用例举例说明:
被测代码如下:
static int Subtraction(int a, int b)
{
return a - b;
}
测试用例代码如下:
/**
* @tc.name: integer_sub_002
* @tc.desc: Verify the Subtraction function.
* @tc.type: FUNC
* @tc.require: AR00000000 SR00000000
*/
HWTEST_F(CalcSubtractionTest, integer_sub_002, TestSize.Level1)
{
EXPECT_EQ(1, Subtraction(2, 1));
}
(可选)安装xdevice组件。安装xdevice后,xdevice组件可以作为python的扩展包使用。
打开xdevice安装目录:test/xdevice,执行如下命令:
python setup.py install
安装成功提示如下:
... ...
Installed d:\programs\python37\lib\site-packages\xdevice-0.0.0-py3.7.egg
Processing dependencies for xdevice==0.0.0
Searching for pyserial==3.4
Best match: pyserial 3.4
Processing pyserial-3.4-py3.7.egg
pyserial 3.4 is already the active version in easy-install.pth
Installing miniterm.py script to D:\Programs\Python37\Scripts
Using d:\programs\python37\lib\site-packages\pyserial-3.4-py3.7.egg
Finished processing dependencies for xdevice==0.0.0
修改developertest/config/user_config.xml 文件配置developertest组件。
支持hdc连接的被测设备。
[device] # 配置标签为usb-hdc的环境信息,测试设备的IP地址和hdc映射的端口号,例如:
<device type="usb-hdc">
<ip>192.168.1.1</ip>
<port>9111</port>
<sn></sn>
</device>
仅支持串口的被测设备。
[device] # 配置标签为ipcamera的串口信息,COM口和波特率,例如:
<device type="com" label="ipcamera">
<serial>
<com>COM1</com>
<type>cmd</type>
<baud_rate>115200</baud_rate>
<data_bits>8</data_bits>
<stop_bits>1</stop_bits>
<timeout>1</timeout>
</serial>
</device>
(可选)修改developertest组件配置。如果测试用例已完成编译,可以直接指定测试用例的编译输出路径,测试平台执行用例时即不会重新编译测试用例。
配置文件:config/user_config.xml
[test_cases] # 指定测试用例的输出路径,编译输出目录,例如:
<test_cases>
<dir>/home/opencode/out/release/tests</dir>
</test_cases>
[NFS] # 被测设备仅支持串口时配置,指定NFS的映射路径,host_dir为PC侧的NFS目录,board_dir为板侧创建的目录,例如:
<NFS>
<host_dir>D:\nfs</host_dir>
<board_dir>user</board_dir>
</NFS>
(可选)测试环境准备。当被测设备仅支持串口时,需要检查。
(必选)启动测试平台,执行测试用例。
启动测试框架,打开test/developertest目录,执行启动脚本。
Windows环境启动测试框架,执行如下脚本:
start.bat
Linux环境启动测试框架。
./strat.sh
设备形态选择。
根据实际的开发板选择,设备形态配置:developertest/config/framework_config.xml。
执行测试指令。
查询测试用例支持的子系统,模块,产品形态以及测试类型,使用show命令,示例如下:
usage:
show productlist Querying Supported Product Forms
show typelist Querying the Supported Test Type
show subsystemlist Querying Supported Subsystems
show modulelist Querying Supported Modules
执行测试指令,其中-t为必选,-ss和-tm为可选字段,示例如下:
run -t ut -ss subsystem_examples -tm calculator
参数说明:指定参数可以执行特定特性、模块对应的测试套。
usage: run [-h] [-p PRODUCTFORM] [-t [TESTTYPE [TESTTYPE ...]]]
[-ss SUBSYSTEM] [-tm TESTMODULE] [-ts TESTSUIT]
[-tc TESTCASE] [-tl TESTLEVEL]
optional arguments:
-h, --help show this help message and exit
-p PRODUCTFORM, --productform PRODUCTFORM Specified product form
-t [TESTTYPE [TESTTYPE ...]], --testtype [TESTTYPE [TESTTYPE ...]]
Specify test type(UT,MST,ST,PERF,ALL)
-ss SUBSYSTEM, --subsystem SUBSYSTEM Specify test subsystem
-tm TESTMODULE, --testmodule TESTMODULE Specified test module
-ts TESTSUIT, --testsuite TESTSUIT Specify test suite
-tc TESTCASE, --testcase TESTCASE Specify test case
-tl TESTLEVEL, --testlevel TESTLEVEL Specify test level
测试框架帮助。
帮助指令,用于查询测试平台支持哪些测试指令,如下:
help
退出自测试平台。
退出自测试平台,使用如下命令退出测试平台,如下:
quit
(必选)查看测试结果与日志,通过在测试平台中执行测试指令,即可在developertest/reports目录下生成测试日志和测试报告。
测试用例的结果会直接显示在控制台上,执行一次的测试结果根路径如下:
reports/xxxx-xx-xx-xx-xx-xx
测试用例格式化结果目录如下:
result/
测试用例日志目录如下:
log/plan_log_xxxx-xx-xx-xx-xx-xx.log
测试报告汇总:
summary_report.html
测试报告详情:
details_report.html
测试平台日志目录如下:
reports/platform_log_xxxx-xx-xx-xx-xx-xx.log
开发者测试平台xdevice组件包结构说明,代码目录test/xdevice,详见下表所示:
表 4 xdevice组件包结构说明
开发者测试平台developertest组件包结构说明,代码目录test/developertest,详见下表所示:
表 5 developertest组件包结构说明
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。