Selenium Phpunit和Jenkins

Selenium Phpunit和Jenkins,selenium,jenkins,phpunit,Selenium,Jenkins,Phpunit,我有一个使用Selenium用PHPUnit编写的PHP项目 本项目结构如下: PHPProjectName 源文件 不包含任何内容 Selenium测试文件 包含我的所有selenium测试php文件-扩展类PHPUnit_Extensions_SeleniumTestCase 包含路径 c:\ProgramFiles\PHP c:\ProgramFiles\PHP\PEAR\PHPUnit 然后,通过运行java-jar Selenium-server-standalone-2.24.1.j

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

本项目结构如下: PHPProjectName

源文件 不包含任何内容 Selenium测试文件 包含我的所有selenium测试php文件-扩展类PHPUnit_Extensions_SeleniumTestCase 包含路径 c:\ProgramFiles\PHP c:\ProgramFiles\PHP\PEAR\PHPUnit 然后,通过运行java-jar Selenium-server-standalone-2.24.1.jar手动启动Selenium服务器

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

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

安装詹金斯 为PHPunit测试编写一个构建脚本 通过Jenkins执行构建脚本 步骤正确吗?有人做过或知道如何设置吗


非常感谢,

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

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


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

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

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


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

我们的设置与您描述的类似。我们让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结合使用的模板:

包括运行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>

我们的设置与您描述的类似。我们让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结合使用的模板:

包括运行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>

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

注意: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
确保将geckodriver和chromedriver的路径更正到其实际位置

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

更多资讯:

您必须在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
确保纠正通往geckodriver和chro的路径 medriver到他们的实际位置

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

更多资讯:

感谢大家对Selenium RC服务器不稳定的批评。您是否有运行PHPunit脚本的ANT构建脚本,我尝试使用这里的脚本,但运气不好……该链接上的示例看起来是正确的,但我以前从未使用过ANT+PHPunit,所以我没有任何脚本可以共享。您的问题是什么?感谢您对Selenium RC服务器不稳定的提醒。您是否有运行PHPunit脚本的ANT构建脚本,我尝试使用这里的一个,但运气不太好……该链接上的示例看起来正确,但我以前从未使用过ANT+PHPunit,所以我没有任何脚本可以共享。你有什么问题?