Go-知识测试-测试参数
- 1. -args
- 2. -json
- 3. -o
- 4. -bench
- 5. -benchtime
- 6. -cpu
- 7. -count
- 8. -failfast
- 9. -list
- 10. -parallel
- 11. -run
- 12. -timeout
- 13. -v
- 14 -benchmem
1. -args
指示go test 把-args 后面的参数带到测试中去。具体的测试函数会根据此参数来控制测试流程。
-args后面可以附带多个参数,所有参数都将以字符串形式传入,每个参数作为一个string,并存放到字符串切片中。
import (
"flag"
"testing"
)
func TestArgs(t *testing.T) {
if !flag.Parsed() {
flag.Parse()
}
args := flag.Args()
for _, arg := range args {
t.Logf("arg: %s", arg)
}
}
使用 go test -v xx_test.go -args test hello world
进行执行
2. -json
-json 参数用于指示go test将结果转换成json格式,便于在后续使用。
比如上面的例子go test -v xx_test.go -json -args test hello world
3. -o
-o 参数指定生成的二进制可执行程序,并执行测试,测试结束不会删除该程序。
没有此参数时,go test 生成的二进制可执行程序存放到临时目录中,执行结束便删除。
继续使用上述的例子
直接执行二进制程序
4. -bench
go test 默认不执行性能测试,使用-bench 参数才可以运行,而且只运行性能测试函数。
-bench 后面附加正则表达式,用于筛选需要执行的性能测试。如果要执行所有的性能测试,使用 .
作为正则。
这里的正则不是严格意义的正则,而是包含关系。
比如有如下三个性能测试:
func BenchmarkSlice(b *testing.B)
func BenchmarkSliceStr(b *testing.B)
func BenchmarkArray(b *testing.B)
如果使用go test -bench Slice
,那么会执行前两个,第三个不会被执行。
如果是子测试,那么是存在层级的:
func BenchmarkSub(b *testing.B){
b.Run("name=1", benchSub1)
b.Run("name=2", benchSub2)
b.Run("n=3", benchSub3)
}
测试函数命名规则中,子测试的名字需要以父测试名字作为前缀并以/
连接,上面的例子中实际上包含了4个测试:
Sub,Sub/name=1,Sub/name=2,Sub/n=3
如果想执行三个子测试,那么使用参数-bench Sub
,如果只是想执行第一个,那么-bench Sub/name=1
如果想执行前两个,那么-bench Sub/name=
5. -benchtime
-benchtime s 指定每个性能测试的执行时间,如果不指定,那么默认执行1s.
6. -cpu
-cpu 参数提供了一个CPU个数的列表,提供此列表后,测试将按照这个列表指定的CPU数设置GOMAXPROCS并分别测试.
比如 -cpu 1,2 ,那么每个测试即将执行两次,一次是用1个CPU执行,另一次是用两个CPU执行。
示例测试不适用
7. -count
-count n 指定每个测试执行的次数,默认执行一次。
如果使用-count指定执行测试的同时还使用-cpu指定了多种CPU,那么测试将在每种CPU下均执行-count的次数。
示例测试不适用
8. -failfast
默认情况下,go test会执行所有匹配到的测试,并最后打印测试结果,无论成功或失败。
-failfast 指定如果有测试出现失败,则立即停止测试。
9. -list
-list regexp 只是列出匹配成功的测试函数,并不真正执行。而且不会列出子函数。
10. -parallel
-parallel n 指定测试的最大并发数。
当测试使用t.Parallel()方法将测试转为并发时,将受到最大并发数的限制,默认情况下,最多有GOMAXPROCS个测试并发,其他的测试只能阻塞等待。
11. -run
-run regexp 的作用是根据正则表达式执行单元测试和示例测试。正则匹配规则与-bench类似。
12. -timeout
-timeout d 默认情况下,测试执行超过10分钟就会因超时而退出。
如果将超时时间设置为1s,那么大于1s的都是因为超时而退出:
-timeout xs
-timeout xm
-timeout xh
13. -v
默认情况下,测试结果只打印简单的测试结果,-v 参数可以打印详细的日志。
在性能测试下,总是打印日志,因为日志有时会影响性能。
14 -benchmem
默认情况下,性能测试结果只打印运行次数,每个操作耗时。使用-benchmem则可以打印每个操作分配的字节数,每个操作分配的对象数。