You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:04