san*_*nte 7 automated-tests qa web-testing behat mink
我正在使用Behat和Mink来测试几个站点.其中两个使用Single Sign On,因此我的一个测试包括在一个站点登录,转到第二个站点并检查我已登录.
这是使用这个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"
Run Code Online (Sandbox Code Playgroud)
这有效,但问题是这一行:
And I go to "http://server.developer1.workstations/"
Run Code Online (Sandbox Code Playgroud)
我们有不同的环境(本地开发,开发,交错)和不同的URL,因此我无法编写适用于每台机器的测试.第一台服务器没关系,因为我可以为每台机器设置不同的base_url设置,但我找不到将第二台服务器设置为常规设置的方法,而不是重写改变第二台服务器URL的每个功能文件.
有没有办法声明变量,常量或可以存储在每个机器不同的文件中的东西?
为了解决这个问题,有可能:
Run Code Online (Sandbox Code Playgroud)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: ~
然后,将定义的param包含到您自己的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'],
);
}
Run Code Online (Sandbox Code Playgroud)
最后,定义自己的步骤:
/**
* @Then /^I should be logged in master$/
*/
public function iShouldBeLoggedInMaster()
{
$this->visit($this->site_urls['master']);
$this->assertPageContainsText('Close session');
}
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
然后,包括一个新步骤,以检查用户是否已登录master.
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |