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

Godog生成Cucumber报告时Scenario Outline步骤行值异常咨询

Scenario Outline生成Cucumber报告时步骤line属性异常问题

问题详情

  • 目前cucumber/godog/fmt_cucumber.go中的代码仅针对Scenario Outline场景,覆盖了Cucumber报告中步骤的line属性值(普通Scenario场景的报告显示正常)
  • 这导致步骤的line属性指向Examples部分的行号,而非feature文件中步骤定义的实际位置
  • 依赖line属性对步骤进行排序的外部工具,会出现步骤顺序混乱的问题
  • 其他官方支持的Cucumber实现(Java、JS、Python等)均能正确生成Scenario Outline的报告,line属性会对应步骤在文件中的实际位置

相关代码片段

func (f *Cuke) buildCukeStep(pickle *messages.Pickle, stepResult models.PickleStepResult) (cukeStep cukeStep) {

    ...

    line := step.Location.Line
    if len(pickle.AstNodeIds) == 2 {
        _, row := feature.FindExample(pickle.AstNodeIds[1])
        line = row.Location.Line
    }

    ...

    cukeStep.Line = int(line)

    ...
}

解决方案建议

直接移除针对Scenario Outline的line属性覆盖逻辑,保留步骤本身的原始行号即可,修改后的代码如下:

func (f *Cuke) buildCukeStep(pickle *messages.Pickle, stepResult models.PickleStepResult) (cukeStep cukeStep) {

    ...

    line := step.Location.Line
    // 移除覆盖line属性的逻辑,保留步骤原始行号
    // if len(pickle.AstNodeIds) == 2 {
    //     _, row := feature.FindExample(pickle.AstNodeIds[1])
    //     line = row.Location.Line
    // }

    ...

    cukeStep.Line = int(line)

    ...
}

如果需要保留Examples行号的相关信息,可以考虑将其存储到自定义字段中,而非覆盖原始的步骤行号,这样既不影响外部工具的排序逻辑,又能保留示例数据的位置信息。

内容的提问来源于stack exchange,提问作者Katya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:21:22