gpt4 book ai didi

automated-tests - 如何在不同环境下的同一测试中使用 behat 两个站点进行测试(因此不同的 URL)

转载 作者:行者123 更新时间:2023-12-04 11:55:43 26 4
gpt4 key购买 nike

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

这是用这个 behat 代码完成的:

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/"

我们有不同的环境(本地开发人员、开发人员、暂存)和不同的 URL,所以我无法编写适用于每台机器的测试。第一个服务器没问题,因为我可以为每台机器设置不同的 base_url,但是我找不到设置第二个服务器的方法
作为常规设置,而不是重写每个更改第二个服务器 URL 的功能文件。

有没有办法声明变量、常量或可以存储在每个机器不同的文件中的东西?

最佳答案

要解决这个问题,可以:

  • 在机器相关文件或环境变量中定义主从 URL。例如,behat.yml 可以为每台机器定制,有一些额外的参数:

  • default:
    context:
    parameters:
    master_url: 'http://master_site.workstation1'
    slave1_url: 'http://.slave1.master_site.workstation1'
    slave2_url: 'http://.slave2.master_site.workstation1'
    extensions:
    Behat\MinkExtension\Extension:
    slave1_url: 'http://.slave1.master_site.workstation1'
    goutte: ~
    selenium2: ~


    然后,将定义的参数包含到您自己的 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');
    }

    使用 base_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。

    关于automated-tests - 如何在不同环境下的同一测试中使用 behat 两个站点进行测试(因此不同的 URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289607/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com