【问题标题】:Behat run again a scenario programmaticallyBehat 以编程方式再次运行一个场景
【发布时间】:2014-10-10 13:17:31
【问题描述】:

在 stackoverflow 上的一个问题Parameters in Behat 3 Ian 找到了传递给 behat 参数的解决方案。

对于环境来说还可以,但是对于国家参数我有点困惑。我有这样的功能:

Scenario Outline: Test if first link works
    Given I am on website "<country>"
    Then I visit the url "my-url"
    Then I click on first link

Examples:
    | country |
    | US      |
    | IT      |

这就是我所拥有的,现在我想运行类似的东西:

env="stg" country="US,IT" php53 bin/behat --suite=mySuite

但有了情景大纲,整个情景就会针对每个国家/地区运行。我想做同样的事情,但传入参数的国家列表。

也许使用 AfterScenario 或类似的钩子,我可以使用不同的配置再次运行我的整个场景?

谢谢!

【问题讨论】:

    标签: php behat mink scenarios


    【解决方案1】:

    不幸的是,使用标准工具无法做到这一点,至少在没有头疼和重新发明轮子的情况下是不可能的。一个有趣的问题!

    您可以通过在behat.yml 中配置套件来实现此功能。您应该有一个带有基本配置的默认套件,以及每种语言的套件:

    default:
        extensions:
            Behat\MinkExtension
    
        suites:
            default:
                paths: […]
                contexts: […]
    
            US:
                paths: […]
                contexts: […]
    
            IT:
                paths: […]
                contexts: […]
    

    并使用@beforeSuite 钩子:

    /**
     * @beforeSuite
     *
     * @param BeforeSuiteScope $scope
     */
    public static function setUpSuite(BeforeSuiteScope $scope)
    {
        $suiteName = $scope->getSpecificationIterator()->getSuite()->getName();
    
        // If the suite denotes one of the languages, then set it as the main language.
    }
    

    这个解决方案有几个缺点:

    1. 您不能将套件用于除语言之外的任何其他内容。
    2. 大量配置重复。
    3. 从钩子中设置语言会很痛苦。您可能需要将其存储为静态属性,并在发送每个 Mink 请求之前将其传递到标头中,以便您的服务器知道要使用哪种语言。你需要另一个钩子——无论如何,这是另一个痛苦的故事。

    想到的另一个解决方案是只使用另一个 PHP / Bash 脚本,该脚本将使用国家参数顺序运行 Behat。它也有一些缺点:

    1. 如果您每次使用不同的 Behat 参数,您可能需要添加传递它们的逻辑。
    2. 在运行每个子任务时正确显示 Behat 结果可能会出现问题。
    3. 您仍然需要以某种方式将该语言传递给您的应用,但上述建议应该可行。

    如您所见,这不是一项简单的任务。就我个人而言,我更相信第二种解决方案,虽然它可能更及时,但它也为大量定制提供了空间。另一方面,除非您对每个国家/地区都有完全不同的内容/逻辑,否则您可能不需要走极端。进行一些有针对性的检查以确保语言可以更改并且按预期更改就足够了。为 40 个国家/地区重新运行相同的测试需要几个小时,而且不会增加任何显着价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多