【问题标题】:Specflow parallel execution AfterFeature alternatives?Specflow 并行执行 AfterFeature 的替代方案?
【发布时间】:2020-01-04 17:00:59
【问题描述】:

我的测试套件目前具有并行运行的功能,并且每个功能中的场景一个接一个地运行,而无需在场景之间重置 webdriver。这一切都很好,但我正在努力寻找一种在整个功能完成后进行拆卸的好方法,我不能使用 AfterFeature 因为它要求我的 webdriver 是静态的,这将阻止并行执行工作,如果我这样做在 afterScenario 中拆解然后我需要为每个场景重新启动我的 webdriver,这将不必要地占用更多时间。有什么方法可以使用 featurecontext 或其他东西来确定当前场景是否是功能中的最后一个场景?或其他类似的东西?我基本上需要一种方法来确定当前场景是否是功能的结束而不使用 Before/AfterFeature

【问题讨论】:

  • 我没有并行执行的经验,但你可能想硬编码你的场景的名称(w_last,w_finish...滥用它,我在需要时做了几次)和确保预期场景在一个功能的一组场景中最后执行(nUnit 场景按字母顺序执行)。然后使用FeatureContext.Current.FeatureInfo.Title 查询它是否包含硬编码的子字符串。查看链接:ontestautomation.com/running-your-tests-in-a-specific-order
  • 我已经考虑过这样做,如果绝对没有其他方法,这可能是我需要做的,但理想情况下,无论我运行多少场景,我都希望它能够工作在该功能中,如果我选择以任意组合运行 1-10 个场景中的任何位置,它应该可以工作。因此,我正在寻找一种方法来获取在此运行中为此功能运行的测试/场景的数量,或者以某种方式找出该功能何时将在它实际结束之前结束

标签: c# selenium nunit specflow


【解决方案1】:

默认情况下,Specflow 按字母顺序对场景进行排序,但您可以通过在开头使用数字命名场景来解决此问题,例如 01 - Login02 - Logout
然后使用 cmets 中建议的方法。
AfterScenario钩子上:

  1. 获取所有场景名称并对其进行排序
  2. 获取最后一个场景名称
  3. 如果它等于当前方案 - 重置 Web 驱动程序实例。

没有任何东西是硬编码的,并且适用于您的所有套件。但是你应该保持以索引开头的命名方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多