Go语言-测试与性能分析

在接触的几门计算机编程语言中,都会有与之对应的单元测试与性能分析方法或者工具。Go语言当然也不例外,本文将记录Go语言中测试与性能分析的内容,其目的是为了掌握Go语言中测试和性能分析和提出一些容易出现的问题。
1. 测试
Go语言里有几种方法可用于单元测试:
- 基础测试 - 一组参数和结果测试代码
- 表组测试 - 多组参数和结果测试代码
1.1 单元测试
Go语言中要想进行单元测试,就必须使用testing 包,它提供自动化测试工具。通过go test命令能够自动执行以下形式的函数:
func TestXXX(*testing.T){
...
}
1.1.1 第一个单元测试
在使用单元测试之前,先写一个用于被测试的方法,这里写一个打乱slice得函数。
func RandSlice(originSlice []interface{
}) {
rand.Seed(time.Now().UnixNano())
for len(originSlice) > 0 {
last := len(originSlice)
randIndex := rand.Intn(last)
originSlice[last - 1], originSlice[randIndex] = originSlice[randIndex], originSlice[last - 1]
originSlice = originSlice[:last-1]
}
}
创建一个test_test.go文件
package testFunc
import (
"testing"
)
//*testing.T
// The other reporting methods, such as the variations of Log and Error,
// may be called simultaneously from multiple goroutines.
func TestRandSlice(t *testing.T){
slice := []interface{
}{
1, 2, 3, 4, 5, 6, 7, 8}
RandSlice(slice)
t.Errorf("预期不足 %v", slice)
}
1.2 表组测试
所谓表组测试,就是用for循环去做测试,当一次测试结果失败的时候,应该继续还是退出,前面用的是t.Errorf测试失败不会退出,会在最后的时候输出。
总结几个方法的含义:
| 方法 | 含义 |
|---|---|
| Fail | 记录失败信息,然后继续执行后续用例 |
| FailNow | 记录失败信息,所有测试终止 |
| SkipNow | 不会记录失败的用例信息,然后中止测试 |
| Skip | 记录失败信息,中断后续测试 |
| Skipf | 比前面多一个格式化输出 |
| Log | 输出错误日志,默认不输出成功的用例,不会中断 |
| Logf | 不会中断 |
| Error | Log + Fail ,不会中断 |
| Errorf | 同上 |
| Fatal | Log + FailNow, 中断 |
| Fatalf | 相当于Logf + FailNow |
1.3 test main
上面的测试用例都是基于函数,方法等无需 stepup/teardown 机制。下面介绍另一种测试方法
func TestMain(t *testing.M){
// step up 初始化工作
code := m.Run()
//tearDown
os.Exit(code)
}
1.3 覆盖测试
Go提供分析单元测试覆盖率(触发运行的被测试diamante的代码行数占所有代码行数的比例,成为测试覆盖率)的工具,使用如下。
到达有_test结尾的目录下:
//执行
go test -v -coverprofile=c.out
### 输出:
###=== RUN TestRandSlice
###--- PASS: TestRandSlice (0.00s)
###PASS
###coverage: 75.0% of statements

本文介绍了Go语言中的测试方法,包括单元测试、表组测试、基准测试和覆盖测试。讲解了如何进行单元测试,如编写测试用例、使用test_main和覆盖测试,并探讨了基准测试的重要性及如何进行性能分析,如pprof的使用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



