【问题标题】:How can I execute a specific feature file before the execution of remaining feature files in goDog?如何在 goDog 中执行剩余功能文件之前执行特定功能文件?
【发布时间】:2020-01-29 23:29:39
【问题描述】:

在实施剩余的测试用例之前,我进行了一些数据设置。我已将执行测试用例之前需要执行的所有数据设置分组到一个功能文件中。

如何确保在执行 goDog 框架中的任何其他功能文件之前执行此数据设置功能文件?

【问题讨论】:

    标签: go bdd gherkin


    【解决方案1】:

    据我了解,您正在寻找一种在运行功能/场景之前运行一些设置说明的方法。问题是场景和功能在设计上是孤立的。确保在场景运行之前执行某些操作的方法是定义Background 部分。 AFAIK 你不能跨功能应用相同的背景。场景按功能分组,每个功能都可以指定在每个场景之前执行的Background。我只需将您的设置内容复制粘贴到您需要的任何地方:

    Background:
      Given I have the base data:
        | User | Status   | other fields |
        | Foo  | Active   | ...          |
        | Bar  | Disabled | ...          |
    

    如果您的设置涉及大量步骤,您可以定义一个步骤,您可以将其扩展为运行所有 “背景” 步骤,如下所示:

    Scenario: test something
    Given my test setup runs
    

    然后像这样实现my test setup runs

    s.Step(`^my test setup runs$`, func() godog.Steps {
        return godog.Steps{
                       "user test data is loaded", 
                       "other things are set up",
                       "additional data is updated",
                       "update existing records",
                       "setup was successful",
                }
    })
    

    应该可以的。

    当然,为了避免每个场景都必须以 Given my test setup runs 开头,您可以只使用以下代码开始每个功能文件:

    Background:
       Given my test setup runs
    

    这将确保在每个场景之前执行设置。结果将是:在每个功能文件的开头添加 2 行,然后您就可以开始了。

    【讨论】:

    • 您在这里提到的案例使用了背景,我已经阅读了我们应该尽量保持它尽可能小。我有一个功能文件,在执行任何测试用例之前要执行许多步骤。我的要求是我需要在执行任何其他功能文件之前从该文件加载数据。我查看了答案,发现 cucumber 按字母顺序执行文件,因此我可以命名该文件,以便它始终首先执行。但是使用这种方法,我不确定是否继续。有没有其他办法?
    • @Shubham 它按字母顺序执行,但它不维护场景之间的状态,因此您每次都必须设置所需的状态。这正是背景存在的原因。如果您设置的状态过多,那么恐怕问题更多与您要测试的内容有关。 Cucumber 擅长集成测试,但要测试更彻底的端到端场景,可能会有更好的工具,或者您可能希望使用后台仅加载数据库以获取基本状态
    • 感谢您澄清我对文件命名的疑虑。我将只使用背景来实现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2020-09-16
    • 2014-05-03
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多