关于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或类似的东西我可以用不同的配置再次运行我的整个场景?
谢谢!
答案 0 :(得分: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.
}
这个解决方案有一些缺点:
另一个想到的解决方案就是使用另一个PHP / Bash脚本,该脚本将使用country param顺序运行Behat。它也有一些缺点:
如您所见,这不是一项微不足道的任务。就个人而言,我对第二种解决方案有了更好的信念,虽然它可能更及时,但它也为大量定制提供了空间。另一方面,除非每个国家/地区的内容/逻辑完全不同,否则您可能不需要进入这种极端状态。做一些有针对性的检查,语言可以改变,并且它按预期改变就足够了。为40个国家重新运行相同的测试需要数小时,并且不会增加任何重要价值。