Go语言-测试与性能分析

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go语言-测试与性能分析


hello 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值