golang testing包测试用例和性能测试
发布时间: 2016-01-10 浏览次数:2802 分类: GO
如何保证代码的质量和可靠性?Golang自带了testing包可用来实现测试用例和性能测试.
如下为例,新建gotest项目目录,编写两个文件bubblesort.go和bubblesort_test.go
bubblesort.go
- package gotest
-
- //from small to big
- func BubbleSort(num []int) {
- flag := false
- for i := 0; i < len(num)-1; i++ {
- flag = false
- for j := 0; j < len(num)-1-i; j++ {
- if num[j] > num[j+1] {
- num[j], num[j+1] = num[j+1], num[j]
- flag = true
- }
- }
- if !flag {
- break
- }
- }
- return
- }
bubblesort_test.go
- package gotest
-
- import (
- "testing"
- )
-
- func TestBubbleSort(t *testing.T) {
- values := []int{5, 4, 3, 2, 1}
- BubbleSort(values)
- if values[0] != 1 || values[1] != 2 || values[2] != 3 || values[3] != 4 ||
- values[4] !=5 {
- t.Error("BubbleSort() failed. Got", values, "Expected 1 2 3 4 5")
- }
- }
-
- func BenchmarkBubbleSort(b *testing.B) {
- for i := 0; i < b.N; i++ {
- values := []int{5, 4, 3, 2, 1}
- BubbleSort(values)
- }
- }
golang测试用例使用原则:
- 文件名必须是_test.go结尾的,这样在执行go test的时候才会执行到相应的代码
- 你必须import testing这个包
- 所有的测试用例函数必须是Test开头
- 测试用例会按照源代码中写的顺序依次执行
- 测试函数TestXxx()的参数是testing.T,我们可以使用该类型来记录错误或者是测试状态
- 测试格式:func TestXxx (t *testing.T),Xxx部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如Testintdiv是错误的函数名。
- 函数中通过调用testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,说明测试不通过,调用Log方法用来记录测试的信息。
golang压力测试使用原则:
- 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母
- go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench="test_name_regex",例如go test -test.bench=".*"表示测试全部的压力测试函数
- 在压力测试用例中,请记得在循环体内使用testing.B.N,以使测试可以正常的运行
- 文件名也必须以_test.go结尾
如何运行测试用例?在项目目录下运行:go test
- PASS
- ok test/gotest 0.002s
显示详细测试通过和log信息:go test -v
- === RUN TestBubbleSort
- --- PASS: TestBubbleSort (0.00s)
- PASS
- ok test/gotest 0.002s
查看测试覆盖率:go test -cover
- $ go test -cover
- PASS
- coverage: 90.0% of statements
- ok test/gotest 0.001s
如果运行压力测试?执行: go test -test.bench=".*"
- $ go test -test.bench=".*"
- PASS
- BenchmarkBubbleSort-4 30000000 45.8 ns/op
- ok test/gotest 1.424s
还可以利用go tool pprof工具生产性能报告.
转载请注明地址: http://www.phpddt.com/go/go-testing.html 尊重他人劳动成果就是尊重自己!