【Golang 接口自动化00】为什么要用Golang做自动化?

本文分享了作者从Python转向Golang进行自动化测试的经验,详细介绍了使用Golang重构自动化测试代码的过程,包括HTTP请求处理、接口返回结果解析及自动化用例的设计与管理。

为什么使用Golang做自动化

顺应公司的趋势学习了Golang之后,因为没有开发那么多的时间和项目来实践,怕步此前学习Java缺少练习遗忘殆尽的后尘,决定利用工作之余的时间把此前用Python的写的自动化的代码使用golang进行重构。
1172048-20180901233324208-1178870653.png

我一直都有总结的习惯,也喜欢用代码解决一些问题,此前这一块都是用Python来完成的,后续会逐渐转移到Golang。我相信通过挖掘一些项目内部能做的事情做练习,以后肯定能成为一个合格的gopher。

最终想实现的效果

终极目标:与开发的代码放在一起CI,作为CI成功与否的一个判断条件,做到真正的提前发现问题

怎么做?

其实在写这篇博客的时候,我已经完成了Golang接口自动化主要架构的选型,demo也已经完成,大概会分为以下几个方面来记录:

  • 发送http请求(标准库)
  • 接口返回结果解析(json、xml等)
  • 如何编写自动化用例
  • 如何管理自动化用例(数据、脚本分离)
  • 其他功能(操作数据库完成数据初始化、邮件发送结果、CI集成、镜像部署等)

写在后面

我会写一个系列来记录整个过程,此篇为这个系列的第一篇。

转载于:https://www.cnblogs.com/Detector/p/9572113.html

<think>根据用户的问题,用户想了解如何使用Golang进行自动化测试。结合引用内容,特别是引用[4]中提到了编写测试函数、使用testing包和断言等关键点,我们可以为用户提供详细的指导。 首先,Golang内置了testing包,支持单元测试、性能测试和示例测试。自动化测试主要包括以下步骤: 1. 创建测试文件:在同一个包内创建`_test.go`结尾的文件。 2. 编写测试函数:函数名以`Test`开头,参数为`t *testing.T`。 3. 编写测试逻辑:在函数中使用断言判断结果是否符合预期。 此外,引用[3]提到了性能基准测试(Benchmark),其函数名以`Benchmark`开头,参数为`b *testing.B`。 下面将分步骤详细说明,并给出代码示例。</think>### Golang 自动化测试使用方法 在 Golang 中进行自动化测试主要依靠内置的 `testing` 包和 `go test` 工具链,以下是详细使用指南: #### 一、基础单元测试 1. **创建测试文件** 在待测试文件同目录创建 `_test.go` 后缀文件(如 `calculator.go` 对应 `calculator_test.go`) 2. **编写测试函数** ```go package main import "testing" // 被测函数 (通常放在同包其他文件) func Add(a, b int) int { return a + b } // 测试函数 (Test+驼峰命名) func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("预期 %d, 实际得到 %d", expected, result) // 错误报告 } } ``` 3. **运行测试** ```bash go test -v ./... # -v 显示详细结果,./... 递归测试所有包 ``` #### 二、表格驱动测试(推荐) ```go func TestMultiply(t *testing.T) { testCases := []struct { a, b, expected int }{ {2, 3, 6}, {0, 5, 0}, {-1, 4, -4}, } for _, tc := range testCases { t.Run(fmt.Sprintf("%d*%d", tc.a, tc.b), func(t *testing.T) { result := Multiply(tc.a, tc.b) if result != tc.expected { t.Fatalf("预期 %d, 得到 %d", tc.expected, result) } }) } } ``` #### 三、集成测试(HTTP API 示例) ```go func TestUserAPI(t *testing.T) { // 1. 启动测试服务器 srv := httptest.NewServer(SetupRouter()) defer srv.Close() // 2. 发送测试请求 resp, err := http.Get(srv.URL + "/api/user/123") if err != nil { t.Fatal("请求失败:", err) } // 3. 验证响应 if resp.StatusCode != http.StatusOK { t.Errorf("预期状态码 200, 得到 %d", resp.StatusCode) } // 4. 解析响应体 var user User if err := json.NewDecoder(resp.Body).Decode(&user); err != nil { t.Fatal("JSON解析失败:", err) } if user.ID != 123 { t.Errorf("预期用户ID 123, 得到 %d", user.ID) } } ``` #### 四、性能基准测试(引用[3]) ```go func BenchmarkFibonacci(b *testing.B) { for i := 0; i < b.N; i++ { Fibonacci(20) // 被测函数 } } ``` 运行基准测试: ```bash go test -bench=. -benchmem # -benchmem 显示内存分配 ``` #### 五、测试覆盖率 ```bash go test -coverprofile=coverage.out go tool cover -html=coverage.out # 生成可视化报告 ``` #### 六、常用断言库(增强可读性) ```go import "github.com/stretchr/testify/assert" func TestDivision(t *testing.T) { result, err := Divide(10, 2) assert.Nil(t, err) // 验证无错误 assert.Equal(t, 5, result) // 验证结果相等 } ``` ### 最佳实践建议 1. **测试分层**: - 单元测试:覆盖核心逻辑(70%+覆盖率) - 集成测试:验证模块交互 - E2E测试:模拟用户完整流程 2. **测试隔离**: ```go func TestWithDB(t *testing.T) { db := setupTestDB() // 每个测试独立数据库 defer db.Cleanup() // 测试逻辑... } ``` 3. **CI/CD集成**(引用[2]): ```yaml # .github/workflows/test.yml name: Go Tests on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run tests run: go test -race -covermode=atomic ./... ``` > 关键优势:Golang 内置测试框架无需额外依赖,编译型语言执行速度快(百万次测试/秒级完成),适合高频自动化测试场景[^1][^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值