GO Test 单元测试&压力测试

背景

本文主要介绍golang的一个工具go test
Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例

go test 单元测试介绍

规则

  • 文件名必须是_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方法用来记录测试的信息。

编译方式

  • go test . 编译当前文件夹所有test测试用例
  • go test -p 编译这个包测试
  • go test -v 打印测试信息(默认不打印测试通过信息)

例子

package test

import "testing"

func TestCount(t *testing.T) {
    count := 0
    if count != 0 {
        t.Error("Test No Accept")
    } else {
        t.Log("Test Accept")
    }
}

func TestCount1(t *testing.T) {
    t.Error("Test Error")
}

go test .
![测试结果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/3.png)
go test -v .
![测试结果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/2.png)

go test 压力介绍

规则

  • 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母 func BenchmarkXXX(b *testing.B) { … }
  • 在压力测试用例中,请记得在循环体内使用testing.B.N,他默认设置轮询次数,保证程序正常退出
  • 其他约束跟单员测试相同

编译方式

  • go test不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-bench,例如go test -bench=”.*” 表示测试全部的压力测试函数
  • go test -count 测试例子执行测试
  • go test -run=name 要测试的文件名字

例子

package test

import "testing"

func Add(a int, b int) int {
    return a + b
}
func Benchmark_Addd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(i, i*10)
    }
}

![测试结果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/4.png)
![测试结果](/Users/yidwang/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/1520990951/QQ/Temp.db/6.png)

go test 测试函数介绍中文链接:https://studygolang.com/articles/5494

参考链接:http://studygolang.com/wr?u=http%3a%2f%2fwww.cnblogs.com%2fdiegodu%2fp%2f5464802.html

你可能感兴趣的:(走在go的路上)