如何正确使用go test参数执行测试函数与基准测试函数
go test 测试范围控制参数规则与解决方案
核心参数作用说明
-run <正则表达式>:仅对Test开头的普通测试函数做过滤,只会运行名称匹配正则的普通测试,不影响基准测试、示例测试的执行逻辑-bench <正则表达式>:仅对Benchmark开头的基准测试函数做过滤,只要配置了该参数就会执行名称匹配正则的基准测试- 若要完全跳过所有普通测试,可将
-run参数设置为匹配不到任何普通测试的正则^$(匹配空字符串,所有Test前缀的函数都不会命中)
问题解决方案
问题1:执行基准测试时被普通测试报错中断
你之前执行的go test -v -bench=.没有设置普通测试过滤规则,所以默认会运行所有普通测试,只要其中有报错就会中断流程。
正确命令(运行所有基准测试,跳过全部普通测试):
go test -v -bench=. -run=^$
问题2:无法指定运行单个基准测试
你之前的命令go test -v -bench=. -run=BenchmarkFamilyListByFamilyId错误将基准测试名写到了-run参数中,-run不负责基准测试的过滤,-bench=.还是匹配到了所有基准测试,所以会全部运行。
正确命令(仅运行BenchmarkFamilyListByFamilyId单个基准测试,跳过所有普通测试和其他基准测试):
go test -v -bench=^BenchmarkFamilyListByFamilyId$ -run=^$
其中^BenchmarkFamilyListByFamilyId$是精确匹配指定基准测试名的正则,避免匹配到其他名称相似的基准测试。
常用测试范围配置示例
- 仅运行指定普通测试(不跑任何基准测试):
# 只运行TestSaveSettings单个测试 go test -v -run=^TestSaveSettings$ - 运行名称带指定关键词的所有普通测试:
# 运行所有名称带FamilyLimit的普通测试 go test -v -run=FamilyLimit - 运行名称带指定关键词的所有基准测试(跳过普通测试):
# 运行所有名称带Save的基准测试 go test -v -bench=Save -run=^$
内容的提问来源于stack exchange,提问作者Linuxea
相关产品推荐
相关产品推荐

