【问题标题】:Phpunit and JenkinsPhpunit 和詹金斯
【发布时间】:2012-07-19 16:28:34
【问题描述】:

我有一个使用 Selenium 用 PHPUnit 编写的 PHP 项目。

项目结构如下: PHP项目名称

  • 源文件
    • (不包含任何内容)
  • 硒测试文件
    • 包含我所有的 selenium 测试 php 文件 - 扩展类 PHPUnit_Extensions_SeleniumTestCase
  • 包含路径
    • c:\程序文件\PHP
    • c:\程序文件\PHP\PEAR\PHPUnit

然后我通过运行 java -jar selenium-server-standalone-2.24.1.jar 手动启动 Selenium 服务器

执行我所有的 selenium 测试 php 文件的 php 脚本工作正常。

但是现在我想使用 Jenkins 作为测试管理工具来在这个文件夹中构建和执行我的 PHPunit 测试。我猜步骤是:

  • 安装 Jenkins
  • 为 PHPunit 测试编写构建脚本
  • 通过 Jenkins 执行构建脚本

步骤是否正确?有人做过或知道如何设置吗?

非常感谢,

【问题讨论】:

    标签: selenium jenkins phpunit


    【解决方案1】:

    我已经在各种平台上做过很多次了。您的步骤通常是正确的并且应该可以工作,但是管理服务器并不总是那么简单。 Selenium RC 服务器如果打开时间过长会变得不稳定,因此您必须以某种方式对其进行管理。

    您可以设置第二个 Jenkins 作业,该作业每天运行一到两次来重置您的服务器。然而,更好的选择是编写一个简单的测试框架,关闭所有打开的服务器,然后在运行测试之前启动一个新的服务器实例。当然,您也可以使用 cron 作业来重置服务器,但如果您安装了 Jenkins,则通过 jenkins 作业来执行此操作会更容易。

    当然,最好的选择是切换到 Webdriver,但这可能需要一些工作,具体取决于您的测试有多复杂。

    【讨论】:

    • 感谢有关 Selenium RC 服务器不稳定的提醒。
    • 你有运行 PHPunit 脚本的 ANT 构建脚本吗,我正在尝试使用这里的那个 unclecode.com/2012/06/… 但运气不佳....
    • 该链接上的示例看起来是正确的,但我以前从未使用过 ANT + PHPUnit,所以我没有任何可以共享的脚本。你有什么问题?
    【解决方案2】:

    我们的设置与您描述的类似。我们让 Jenkins 运行一个作业来定期重启 Selenium 服务器:

    #!/bin/bash
    # startselenium.sh: Start Selenium up and also start headless screen.
    Xvfb :99 -ac &
    export DISPLAY=:99 
    java -jar /opt/selenium/selenium-server-standalone-2.19.0.jar &
    

    Sebastian Bergmann 在这里维护了一堆用于将 Jenkins 与 PHP 结合使用的模板: http://jenkins-php.org/

    包括运行 PHPUnit 所必需的 Ant 脚本(非常简单,只需调用 PHPUnit):

    <target name="phpunit" description="Run unit tests with PHPUnit">
        <exec executable="phpunit" failonerror="true"/>
    </target>
    

    还有必要的'phpunit.xml'文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <phpunit bootstrap="tests/bootstrap.php"
        backupGlobals="false"
        backupStaticAttributes="false"
        strict="true"
        verbose="true">
    
        <testsuites>
            <testsuite name="ProjectName">
                <directory suffix="Test.php">tests/unit/</directory>
                <directory suffix="Test.php">tests/integration/</directory>
            </testsuite>
        </testsuites>
    
        <logging>
            <log type="coverage-html" target="build/coverage" title="BankAccount"
                charset="UTF-8" yui="true" highlight="true"
            lowUpperBound="35" highLowerBound="70"/>
            <log type="coverage-clover" target="build/logs/clover.xml"/>
            <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
        </logging>
    
        <filter>
            <whitelist addUncoveredFilesFromWhitelist="true">
                <directory suffix=".php">src</directory>
                <exclude>
                    <file>src/bootstrap.php</file>
                </exclude>
            </whitelist>
        </filter>
    
    </phpunit>
    

    【讨论】:

      【解决方案3】:

      你必须在 jenkins 中安装 selenium 插件,然后 jenkins 上会自动启动一个 selenium 服务器,这将创建一个集线器。现在,您必须在客户端上启动一个连接到此集线器的节点。

      注意:jenkins selenium 服务器始终与 jenkins 的 selenium 插件版本相同。所以如果 selenium 插件名称是 selenium 插件 3.1.0 然后它在 selenium 服务器 3.1.0 上运行。

      安装jenkins selenium插件后,你可以找到一个新的selenium grid选项,点击它,你会得到更多信息:

      现在你必须像这样启动一个 jenkins selenium 独立服务器:

      Windows(创建一个包含以下内容的.bat文件并执行它,相应地更改相关部分):

      start java -jar -Dwebdriver.gecko.driver="C:\Webdrivers\GeckoDriver\geckodriver.exe" -Dwebdriver.chrome.driver="C:\Webdrivers\ChromeDriver\chromedriver.exe" selenium-server-standalone-<VERSION>.jar -role node -hub http://<YOUR_JENKINS_MACHINE_IP>:<PORT>/grid/register
      

      就我而言,我使用的是:

      start java -jar -Dwebdriver.gecko.driver="C:\Webdrivers\GeckoDriver\geckodriver.exe" -Dwebdriver.chrome.driver="C:\Webdrivers\ChromeDriver\chromedriver.exe" selenium-server-standalone-3.1.0.jar -role node -hub http://172.25.201.100:4444/grid/register
      

      确保将 geckodriver 和 chromedriver 的路径更正到它们的实际位置。

      现在节点应该连接到集线器,您可以开始测试了。

      更多信息: https://github.com/SeleniumHQ/selenium/wiki/Grid2

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 2014-08-31
        • 2016-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2016-07-08
        • 1970-01-01
        相关资源
        最近更新 更多