golang测试用例规范

2022-06-30 10:17:43 浏览数 (1)

1. 背景

1.1 推荐框架

用途

业内常用框架

测试框架

testing、testify, goconvery

mock框架

gomock、gomonkey

1.2 测试类型定义

从多个维度将测试用例分成了A0~A3共3个层级, 详见下表:

测试层级

A0

A1

A2

A3

验证范围

方法、类

服务内部模块间集成

单服务接口

多服务多接口串联场景

单用例执行耗时上限

<=1S

<=3S

<=10S

=1S 建议控制在10分钟以内

稳定性

测试用例与被测对象

同进程/同机器

同进程/同机器

跨进程/同或不同机器

不同机器跨进程

网络依赖

不依赖

建议依赖本地网络

依赖

依赖

服务依赖

不依赖

建议依赖本地测试替身

建议依赖非替身

依赖非替身

数据库依赖

不依赖

建议依赖本地数据库

访问网络数据库

访问网络数据库

执行网络

DEV

DEV

IDC

IDC

需要部署启动被测对象

不需要

不需要

需要

需要

测试类型

白盒测试/单元测试

白盒测试/单元测试

黑盒测试/接口测试

黑盒测试/集成测试(e2e测试)

image.pngimage.png

2. 测试用例规范

2.1 A0、A1用例

类别

规范说明

存放位置

【必须】测试代码 与 被测源码 放在相同目录

测试文件命名规范

【必须】测试文件名以_test.go为后缀,如 login_pwd_test.go

测试用例命名规范

【必须】用例名以Test开头,如TestLoginPwdNoName 【推荐】为了增强用例名的可读性,用例名提倡TestXxx_Yyy, 如TestLoginPwd_NoName

用例作者注释

【可选】可以添加文件级别作者注释, // Author: username 【可选】可以在函数或方法上添加作者注释, // Author: username 函数或方法级别优先级 > 文件级别

代码结构示例

代码语言:txt复制
├── go.mod
├── go.sum
├── logic
│   ├── login_pwd.go
│   ├── login_pwd_test.go
│   ├── handler
│   │   ├── heartbeat_handler.go
│   │   └── heartbeat_handler_test.go
│   └── init.go
├── main.go
├── readme.md

示例代码

代码语言:txt复制
// Author: guirongguo   函数注释。函数注释优先级大于文件注释。不添加则默认取git最后提交
func TestHeartBeat(t *testing.T) {
    req := pb.HeartBeat{}    // 构造请求参数
    req.Msg =  "ping"
    rsp := pb.HelloReply{}
    rsp.Msg =  "pong"
    err := commonService.HeartBeat(context.Background(), req, rsp)
    assert.Nil(t, err)
    assert.Equal(t, req.Msg, rsp.Msg)
}

2.2 A2用例

类别

规范说明

存放位置(大仓模式)

【必须】存放在对应子服务模块目录下的test/apitest目录,如 ./application/greeter/test/apitest./application/openapi/test/apitest

存放位置(小仓模式)

【必须】放到根目录/test/apitest 目录下,如 ./test/apitest/

测试文件命名规范

代码模式【必须】代码模式的测试文件名以_test.go为后缀,如heartbeat_test.go json模式【推荐】json模式的用例文件名命名规范 提倡xxx_testcase.json ,如heartbeat_testcase.json

测试用例命名规范

【必须】用例名以Test开头,如TestHeartBeatEmpty

用例作者注释

代码模式【可选】可以添加文件级别作者注释, // Author: username 【可选】可以在函数或方法上添加作者注释, // Author: username 函数或方法级别优先级 > 文件级别 json模式【必须】以json串中AuthorInfo字段为准

代码结构示例--大仓模式

代码语言:txt复制
├── application
│   ├── greeter                 (服务1)
│   │   ├── logic/..             (服务实现逻辑)
│   │   ├── main.go            (服务1入口)
│   │   ├── test
│   │   │   └── apitest     (服务greeter的 接口用例目录)
│   │   │       ├── heartbeat_test.go
│   │   │       └── heartbeat_testcase.json
│   └── openapi                  (服务2)
│       ├── logic/..                 (服务实现逻辑)
│       ├── main.go                (服务2入口)
│       ├── test
│       │   └── apitest          (服务openapi 的 接口用例目录)
│       │       ├── querymsg_test.go
│       │       └── querymsg_testcase.json
├── go.mod
├── go.sum
├── readme.md

代码结构示例--小仓模式

代码语言:txt复制
.
├── go.mod
├── go.sum
├── main.go
├── readme.md
├── test
│   ├── apitest
│   │   ├── init.go
│   │   ├── heartbeat_test.go
│   │   └── heartbeat_testcase.json

2.3 A3用例

2.3.1 存放位置

类别

存放位置说明

大仓模式

【必须】放到根目录/test/e2e 目录下 (可以根据需要再定义子目录,如 ./test/e2e/e2e-pay

小仓模式(方案一)

【必须】单独建立一个仓库 【推荐】仓库名建议为test开头: test-xxx 【推荐】仓库根目录/test/e2e目录下( 可以根据实际需要再分类,建立子目录,如:根目录/test/e2e/e2e-pay)

小仓模式(方案二)

【必须】放到团队协议仓库里 【推荐】仓库根目录/test/e2e目录下 (可以根据实际需要再分类,建立子目录,如:根目录/test/e2e/e2e-pay)

小仓模式(方案三)

【推荐】放在API网关所在仓库 【推荐】根目录/test/e2e目录下(可以根据实际需要再分类,建立子目录,如:根目录/test/e2e/e2e-pay)

代码结构示例

代码语言:txt复制
.
├── application
│   ├── greeter                  (服务1)
│   │   ├── logic/..          (业务逻辑代码)
│   │   ├── main.go
│   │   ├── test/..             (服务1接口测试代码)
│   └── openapi                 (服务2)
│       ├── logic/..            (业务逻辑代码)
│       ├── main.go
│       ├── test/..               (服务2接口测试代码)
├── go.mod
├── go.sum
├── readme.md
└── test
│    └── e2e
│    │  ├── e2e_test.go          (e2e测试用例入口)
│    │  └── net/..                     (e2e依赖其他服务逻辑)
2.3.2 命名规范以及作者

类别

规范说明

测试文件命名规范

【必须】代码模式的测试文件名以_test.go 为后, 如heartbeat_test.go

测试用例命名规范

【必须】 用例名以Test开头, 如TestE2EHeartBeatEmpty 增加e2e用例辨识 【可选】为了增强用例名的可读性,用例名提倡TestE2E开头, 如TestE2EHeartBeat_Empty

用例作者注释

代码模式【可选】可以添加文件级别作者注释, // Author: username 【可选】可以在函数或方法上添加作者注释, // Author: username 函数或方法级别优先级 > 文件级别

0 人点赞