And*_*ann 5 selenium phpunit saucelabs
我正在使用SauceLabs设置一些浏览器测试.我已经能够在本地和通过Sauce运行测试,所以我现在尝试将它与我的Jenkins安装集成以自动触发构建和浏览器测试.
大部分都是有效的,但我有一个小问题.因此我可以在本地运行我的测试并通过Sauce,我想在phpUnit setup()函数中设置$ browsers静态属性,而不是硬编码.这似乎不可能.
我正在使用Sausage绑定,我的TestCase看起来非常类似于这个演示:https://github.com/jlipps/sausage/blob/master/WebDriverDemo.php
我已经尝试在setUp()中更新$ browsers数组,但它似乎永远不会生效.例如.
public function setUp()
{
self::$browsers = array(
'browserName' => getenv('SELENIUM_BROWSER'),
'desiredCapabilities' => array(
'version' => getenv('SELENIUM_VERSION'),
'platform' => getenv('SELENIUM_PLATFORM'),
)
);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法从Jenkins传递浏览器详细信息,以便测试用例更灵活?我觉得我在这里错过了一些简单的东西?
在花了不少时间挖掘源代码后,我找到了"多浏览器"场景的解决方案.关于多个浏览器和给定答案的chapmatic断言确实是正确的:如果您在$ browsers数组中定义了多个浏览器,它不适用于并行测试并且运行相同的浏览器几次.解决方案仍然使用环境变量,但您仍必须使用$ browsers数组.
因此,首先要确保在抽象测试类中定义$ browsers数组.然后,假设您定义了env var BROWSER并为其分配了要测试的浏览器.您可以在扩展Sauce\Sausage\WebDriverTestCase的抽象测试类中设置以下静态函数:
public static function browserSetup()
{
switch (getenv('BROWSER')) {
case 'firefox':
self::$browsers = array(
array(
'browserName' => 'firefox',
'desiredCapabilities' => array(
'platform' => 'self::WIN_VERSION',
'version' => self::FIREFOX_VERSION,
)
)
);
break;
case 'safari':
//safari desiredCapabilities
break;
case 'explorer':
//ie desiredCapabilities
break;
case 'chrome':
//chrome desiredCapabilities
default: //This will just use the default $browsers array you defined
return;
}
Run Code Online (Sandbox Code Playgroud)
现在定义了browserSetup(),您必须确保在设置测试套件之前调用它,以便将测试设置为仅在您在BROWSER环境变量中指定的浏览器上运行.让我们看看PHPUnit_Extensions_Selenium2TestCase,它由Sauce\Sausage\WebDriverTestCase支出; PHPUnit_Extensions_Selenium2TestCase定义了以下方法:
public static function suite($className)
{
return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className);
}
Run Code Online (Sandbox Code Playgroud)
调用此方法以使用您在$ browsers数组中指定的所有浏览器设置测试套件,因此您需要在抽象测试类中重写此方法,确保在调用fromTestCaseClass()之前调用browserSetup():
public static function suite($className)
{
self::browserSetup();
return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用要测试的浏览器定义环境变量BROWSER,则可以启动测试套件,并使用您为BROWSER环境变量中定义的单个浏览器指定的设置正确覆盖$ browsers数组.确保jenkins在Build-> Execute shell部分中正确设置了这个环境变量,你就可以了.
好的,所以我解决了这个问题。如果其他人也有同样的问题,这就是我的解决方法。
在 Jenkins 运行的 ANT 脚本(依次运行 PHPUnit)中,我包含了一个 config.xml 文件。sauce
这设置了一个名为的配置(环境)变量true
<phpunit>
<php>
<env name="sauce" value="true" />
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
现在的技巧是不实际使用 $browsers 静态数组,而是使用该setupSpecificBrowser
方法。所以,现在在我的测试的 setUp() 函数中,我只需打开酱汁环境变量,如果它存在,那么我知道我们正在从 Jenkins 运行,所以我使用它提供的变量。
if( getenv('sauce') == true) {
$browser = array(
'browserName' => getenv('SELENIUM_BROWSER'),
'desiredCapabilities' => array(
'version' => getenv('SELENIUM_VERSION'),
'platform' => getenv('SELENIUM_PLATFORM'),
)
);
} else {
$browser = array(
'browserName' => 'firefox',
'local' => true,
'sessionStrategy' => 'isolated'
);
}
$this->setupSpecificBrowser($browser);
Run Code Online (Sandbox Code Playgroud)
AFAIK 似乎没有任何相关文档,我只是通过查看代码来完成它。乐趣。
归档时间: |
|
查看次数: |
1218 次 |
最近记录: |