IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    golang testing包测试用例和性能测试

    mckee发表于 2016-01-10 17:13:02
    love 0

    如何保证代码的质量和可靠性?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工具生产性能报告.



沪ICP备19023445号-2号
友情链接