1. 背景
1.1 推荐框架
用途 | 业内常用框架 |
|---|---|
测试框架 | testing、testify, goconvery |
mock框架 | gomock、gomonkey |
1.2 测试类型定义
从多个维度将测试用例分成了A0~A3共3个层级, 详见下表:
测试层级 | A0 | A1 | A2 | A3 |
|---|---|---|---|---|
验证范围 | 方法、类 | 服务内部模块间集成 | 单服务接口 | 多服务多接口串联场景 |
单用例执行耗时上限 | <=1S | <=3S | <=10S |
|
稳定性 | 高 | 高 | 中 | 中 |
测试用例与被测对象 | 同进程/同机器 | 同进程/同机器 | 跨进程/同或不同机器 | 不同机器跨进程 |
网络依赖 | 不依赖 | 建议依赖本地网络 | 依赖 | 依赖 |
服务依赖 | 不依赖 | 建议依赖本地测试替身 | 建议依赖非替身 | 依赖非替身 |
数据库依赖 | 不依赖 | 建议依赖本地数据库 | 访问网络数据库 | 访问网络数据库 |
执行网络 | DEV | DEV | IDC | IDC |
需要部署启动被测对象 | 不需要 | 不需要 | 需要 | 需要 |
测试类型 | 白盒测试/单元测试 | 白盒测试/单元测试 | 黑盒测试/接口测试 | 黑盒测试/集成测试(e2e测试) |
2. 测试用例规范
2.1 A0、A1用例
_test.gologin_pwd_test.goTestTestLoginPwdNoNameTestXxx_YyyTestLoginPwd_NoName// Author: username// Author: username代码结构示例
├── 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示例代码
// 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用例
./application/greeter/test/apitest./application/openapi/test/apitest./test/apitest/_test.goheartbeat_test.goxxx_testcase.jsonheartbeat_testcase.jsonTestTestHeartBeatEmpty// Author: username// Author: username代码结构示例--大仓模式
├── 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代码结构示例--小仓模式
.
├── go.mod
├── go.sum
├── main.go
├── readme.md
├── test
│ ├── apitest
│ │ ├── init.go
│ │ ├── heartbeat_test.go
│ │ └── heartbeat_testcase.json2.3 A3用例
2.3.1 存放位置
根目录/test/e2e./test/e2e/e2e-pay代码结构示例
.
├── 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.goheartbeat_test.goTestTestE2EHeartBeatEmptyTestE2ETestE2EHeartBeat_Empty// Author: username// Author: username