Automated tests 如何在同一测试中使用不同的环境(如此不同的URL)测试两个站点的行为

Automated tests 如何在同一测试中使用不同的环境(如此不同的URL)测试两个站点的行为,automated-tests,qa,web-testing,behat,mink,Automated Tests,Qa,Web Testing,Behat,Mink,我正在使用Behat和Mink测试几个站点。其中两个使用单点登录,所以我的一个测试包括登录一个站点,转到第二个站点并检查我是否登录 这是由以下行为代码完成的: Feature: SSO In order to login in all related sites As a anonymous user I want to login in just one site Scenario: Login with normal user Given I am on "/user/l

我正在使用Behat和Mink测试几个站点。其中两个使用单点登录,所以我的一个测试包括登录一个站点,转到第二个站点并检查我是否登录

这是由以下行为代码完成的:

Feature: SSO
  In order to login in all related sites
  As a anonymous user
  I want to login in just one site


Scenario: Login with normal user
  Given I am on "/user/login"
  When I fill in "name" with "username"
    And I fill in "pass" with "password"
    And I press "login"
  Then I should see "My account"
    And I go to "http://server.developer1.workstations/"
  Then I should see "Close session"
这是可行的,但问题是这一行:

    And I go to "http://server.developer1.workstations/"
我们有不同的环境(本地开发人员、开发人员、staging)和不同的URL,所以我不能编写一个在每台机器上都能工作的测试。第一台服务器没问题,因为我可以为每台机器设置不同的基本url设置,但我找不到设置第二台服务器的方法 作为常规设置,而不是重写每个功能文件更改第二个服务器URL


是否有任何方法可以声明变量、常量或可存储在文件中的某些东西,这些文件对于每台机器都是不同的?

要解决此问题,可以:

  • 在依赖于机器的文件或环境变量中定义主URL和从URL。例如,可以为每台机器自定义behat.yml,并使用一些额外的参数:
然后,将定义的参数包括到您自己的FeatureContext类中:

class FeatureContext extends MinkContext
{
    /**
     * Initializes context.
     * Every scenario gets it's own context object.
     *
     * @param array $parameters context parameters (set them up through behat.yml)
     */
    public function __construct(array $parameters)
    {
        $this->site_urls = array(
          'master' => $parameters['master_url'],
          'slave1' => $parameters['slave_url1'],
          'slave2' => $parameters['slave_url2'],
        );

    }
最后,定义您自己的步骤:

/**
 * @Then /^I should be logged in master$/
 */
public function iShouldBeLoggedInMaster()
{
  $this->visit($this->site_urls['master']);
  $this->assertPageContainsText('Close session');      
}  
使用此步骤检查从属站点的基本url的场景可能是:

Scenario: Login as normal user
  Given I am on "/user/login"  
  When I fill in "name" with "username"
    And I fill in "pass" with "password"
    And I press "Login"
  Then I should see "My account"
  And I should be logged in master

然后,包括一个新的步骤来检查用户是否登录到master

不要创建大量的
slave1\u url
slave2\u url
等,而是创建
slave\u url
参数,并使用behat配置文件重载它。然后,在目标环境上运行不同的配置文件。
Scenario: Login as normal user
  Given I am on "/user/login"  
  When I fill in "name" with "username"
    And I fill in "pass" with "password"
    And I press "Login"
  Then I should see "My account"
  And I should be logged in master