前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang测试用例规范

golang测试用例规范

原创
作者头像
Johns
修改2022-06-30 10:17:43
1.1K0
修改2022-06-30 10:17:43
举报
文章被收录于专栏:代码工具代码工具

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.png
image.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 函数或方法级别优先级 > 文件级别

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
    • 1.1 推荐框架
      • 1.2 测试类型定义
      • 2. 测试用例规范
        • 2.1 A0、A1用例
          • 2.2 A2用例
            • 2.3 A3用例
              • 2.3.1 存放位置
              • 2.3.2 命名规范以及作者
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档