首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sauce.io phpunit selenium测试中动态设置$browsers静态属性

在Sauce.io phpunit selenium测试中动态设置$browsers静态属性
EN

Stack Overflow用户
提问于 2012-12-20 20:32:17
回答 3查看 1.2K关注 0票数 5

我正在使用SauceLabs设置一些浏览器测试。我已经能够在本地和通过Sauce运行测试,所以我现在正在尝试将其集成到我的Jenkins安装中,以自动触发构建和浏览器测试。

这些都是有效的,但我有一个小问题。为了在本地和通过Sauce运行测试,我希望在phpUnit setup()函数期间设置$browsers静态属性,而不是对其进行硬编码。这似乎是不可能的。

我使用的是香肠绑定,我的TestCase看起来非常类似于这个演示:https://github.com/jlipps/sausage/blob/master/WebDriverDemo.php

我曾尝试在setUp()中更新$browsers数组,但似乎从未生效。例如:

代码语言:javascript
复制
public function setUp()
{   
    self::$browsers = array(
        'browserName' => getenv('SELENIUM_BROWSER'),
        'desiredCapabilities' => array(
            'version' => getenv('SELENIUM_VERSION'),
            'platform' => getenv('SELENIUM_PLATFORM'),
         )
     );
}

有没有办法从Jenkins那里传递浏览器的详细信息,这样测试用例就更灵活了?我觉得我错过了一些简单的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-22 17:45:36

好了,我解决了这个问题。如果其他人有同样的问题,这里是我如何解决它的。

在Jenkins运行的ANT脚本中,我包含了一个config.xml文件,该脚本依次运行PHPUnit。这会将名为sauce的配置(环境)变量设置为true

代码语言:javascript
复制
<phpunit> 
    <php>
        <env name="sauce" value="true" />
    </php>
</phpunit>

现在的诀窍是不实际使用$browsers静态数组,而是使用setupSpecificBrowser方法。因此,现在在我的测试的setUp()函数中,我只打开了sauce环境变量,如果它存在,那么我知道我们是从Jenkins运行的,所以我使用它提供的变量。

代码语言:javascript
复制
    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);

AFAIK似乎没有任何关于这方面的文档,我只是从看代码开始。有趣的。

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 08:42:31

在花了相当多的时间挖掘源代码之后,我找到了“多浏览器”场景的解决方案。chapmatic关于多个浏览器的断言和给定的答案确实是正确的:如果您的$browsers数组中定义了多个浏览器,则它不适用于并行测试,并且多次运行同一个浏览器。该解决方案仍然使用环境变量,但您仍然必须使用$browsers数组。

因此,首先要确保在抽象测试类中定义了$browsers数组。然后,假设您定义了env var浏览器,并将您想要测试的浏览器分配给它。您可以在扩展Sauce\Sauce\WebDriverTestCase的抽象测试类中设置以下静态函数:

代码语言:javascript
复制
    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;
    }

既然已经定义了browserSetup(),您必须确保在设置测试套件之前调用它,以便将测试设置为仅在您在浏览器环境变量中指定的浏览器上运行。让我们看一下PHPUnit_Extensions_Selenium2TestCase,它由Sauce\Sausage\WebDriverTestCase扩展;PHPUnit_Extensions_Selenium2TestCase定义了以下方法:

代码语言:javascript
复制
public static function suite($className)
{   
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className);
} 

调用此方法是为了使用您在$browsers数组中指定的所有浏览器设置测试套件,因此您需要在抽象测试类中覆盖此方法,并确保在调用fromTestCaseClass()之前调用browserSetup():

代码语言:javascript
复制
public static function suite($className)
{   
    self::browserSetup();
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className);
} 

现在,如果使用要测试的浏览器定义环境变量BROWSER,则可以启动测试套件,并且$browsers数组将被在browser环境变量中定义的单个浏览器的设置正确覆盖。确保jenkins在Build->Execute shell部分正确地设置了这个环境变量,这样就可以了。

票数 5
EN

Stack Overflow用户

发布于 2013-06-18 23:15:07

还需要注意的是,在完成后设置浏览器将停止并行测试。此外,如果您有三个不同的浏览器(在$browsers静态数组中),并将浏览器设置为chrome,那么现在您将有三台机器运行chrome。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13972304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档