hunting/test/test_develop.md
2024-06-15 08:39:16 +08:00

3.9 KiB
Raw Permalink Blame History

1. 测试用例开发规范

  便于对测试用例进行管理,指定测试用例开发规范。

1.1. 命名规则

制定命名规则是为了规范测试用例行为为自动化测试提供管理遍历因为googletest支持根据测试用例名字通配符检索运行目标测试用例。

1.1.1. 基本概念

硬件仿真:对接口属性/数据进行模拟/检测的能力常见于芯片板级依赖的接口例如串口GPIO等还有芯片SDK依赖接口例如音视频编解码接口

单元测试单元测试指对单一功能接口的测试一般不需要或少量使用gtest的mock功能即可完成测试不需要实际链接外部接口对模块内部代码功能进行有效验证

用例所属模块:测试时锁定目标测试用例的作用;

集成测试集成测试指对复杂业务进行测试往往需要跨多层级多模块需要大量使用gtest的mock功能才能完成的复杂逻辑测试一般不针对代码本身而是针对产品定义的功能进行有效验证

测试用例

  1. EXAMPLE:对模块接口进行使用演示的测试用例;
  2. AUTO:自动化运行的测试用例;
  3. STRESS:压力测试用例,一般不在单次测试中执行;

1.1.2. 测试用例命名:

  1. 仿真硬件仿真使用hardware simulation的缩写HS硬件仿真只能运行在Ubuntu系统进行仿真测试真实硬件接口使用real hardware的缩写RH,真实硬件接口测试用例只能运行在开发板进行真机测试;
  2. 测试用例类型含单元测试UNIT和集成测试INTEGRATION
  3. 用例所属模块:大小驼峰;
  4. 测试用例属性EXAMPLE/AUTO/STRESS
  5. 测试用例小名;

示例:

该测试用例标识属于SharedData模块的单元测试作为example具有演示接口使用规范的作用测试用例名为Deme7。

TEST(SharedDataTest, UNIT_SharedData_EXAMPLE_Demo7)
{
    // TODO:
}

1.1.3. 测试源码文件命名:

  1. 每个测试可执行文件都有一个标准mian函数文件名统一为mainTest.cpp;
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <thread>
#include <unistd.h>
int main(int argc, char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();   // 此处执行所有的测试用例;
}
  1. 针对源码文件对应的测试代码文件名为源码文件名_Test.cpp;
例如cjson.c 对应的测试源码文件为cjson_Test.cpp
  1. 适配层源码文件的TEST文件命名区分Simulator版本和常规版本Simulator版本在ubuntu模拟仿真环境测试执行代码会调用芯片SDK接口常规版本必须运行在开发板
├── CMakeLists.txt
├── mainTest.cpp
├── src
│   └── BoardMain_Test.cpp             // 常规测试代码,可运行在开发板系统;
└── src_mock
    └── BoardMain_Simulator_Test.cpp   // 运行过程会调用芯片依赖的API,需要对这些API进行mock处理实现Linux x86平台的仿真测试

1.2. TestTool 测试工具

每个独立模块SDK内具有独立CMakeLists.txt的代码模块都有对应的TestTool模块主要用于对该模块的接口进行gmock处理且对外暴露接口具备复用属性。一般类命名模块名称+TestTool。

1.3. 目录结构

  所有测试代码位于< test >目录下,< test >下的目录结构保持和< SDK >一致表示对应sdk代码模块的测试代码

如果是芯片平台的test目录需要区分板载测试代码和x86 Linux系统的测试代码如下

└── hal
    ├── CMakeLists.txt
    ├── mainTest.cpp
    ├── src        // 芯片平台的测试代码;
    ├── src_mock   // Linux x86测试代码 需要对板载接口打桩进行测试;
    └── tool       // TestTool:该模块需要对外复用的测试代码;