1

在 Behat 3 中关于 stackoverflow参数的问题之后, 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 或类似的东西,我可以用不同的配置再次运行我的整个场景?

谢谢 !

4

1 回答 1

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 个国家/地区重新运行相同的测试将花费数小时,并且不会增加任何显着价值。

于 2014-10-10T14:13:03.230 回答