【问题标题】:Dynamic scenario dispatcher for Python BehavePython Behave 的动态场景调度程序
【发布时间】:2016-07-14 02:30:40
【问题描述】:

我正在运行多个场景,并希望合并某种动态场景调度程序,这将允许我在根据执行的场景完成测试后执行特定的步骤。当我使用 PHPUnit 时,我曾经能够继承 TestCase 类并添加我自己的 setup 和 teardown 方法。对于表现,我一直在做的是在场景结束时添加一个额外的“然后”步骤,一旦场景完成清理所有内容,就会执行该步骤 - 清理场景所做的配置更改等。但是由于每个场景是不同的,我需要进行的配置更改特定于一个场景,所以我不能使用我在 environment.py 文件中的 after_scenario 钩子。关于如何实现类似的任何想法?

【问题讨论】:

    标签: python bdd scenarios python-behave


    【解决方案1】:

    after_scenario 将两个场景都传递给函数。然后,您可以在场景名称或其任何标签上进行调度。例如,使用标签,您可以将场景定义为

    @clean_up
    Scenario: Something
        ...
    

    而你的后听众为

    def after_scenario(context, scenario):
        if 'clean_up' in scenario.tags:
            ...
        elif 'clean_down' in scenario.tags:
            ...
    

    【讨论】:

    • 这就是我最初的想法,但是我有太多的拆解方法的变化。如何使其更具可扩展性?
    • 如果你试图拆除上下文中的内容,你可以检查它是否存在于上下文中,然后在那里进行任何你需要的清理。例如,检查hasattr(context, 'thing_you_want_cleaned_up')
    • 嗯,我在想的是我想在不同的场景中执行特定的拆解方法。基本上,与您在问题中发布的代码相同,但我希望它可以扩展(例如,对于我想要的 30 种不同的拆卸方法,这将需要 30 个不同的标签,这意味着 after_scenario 函数将至少为 30 行? )
    【解决方案2】:

    我一直在做的事情可能会给你一个想法:

    在 before_all 中指定上下文中的列表(例如 context.teardown_items =[])。

    然后在各种场景的各个步骤中添加到该列表(帐户、订单或其他)

    然后在 after_all 中,我以超级用户身份登录并清理我在该列表中指定的所有内容。

    这样的东西对你有用吗?

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多