Search code examples
phpseleniumjenkinsphpunitphing

Jenkins-Phing-PHPUnit formatter not working


In my project, on server, PHP Unit formatter task is not working (not generating report file) but on local dev box, it is working.

My build.xml file is as follow:

<?xml version="1.0" encoding="UTF-8" ?>
<project name="Webshop" default="selenium">
    <property name="project.lib.dir" value="${project.basedir}/vendor" />

    <property name="selenium.logs.dir" value="${project.basedir}/build/logs" />
    <property name="selenium.logs.file" value="junit-selenium.xml" />
    <property name="selenium.tests.dir" value="${project.basedir}/tests" />

    <target name="prepare" depends="clean">
        <mkdir dir="${selenium.logs.dir}"/>
    </target>

    <target name="clean">
        <delete dir="${selenium.logs.dir}"/>
    </target>

    <target name="selenium" description="Run all selenium tests of Webshop" depends="prepare">
        <!-- Please change pharlocation. Vendor/bin/phpunit shouldn't be used with phing. -->
        <phpunit bootstrap="${project.lib.dir}/autoload.php" pharlocation="${project.lib.dir}/bin/phpunit">
            <formatter type="xml" todir="${selenium.logs.dir}" outfile="${selenium.logs.file}" />
            <batchtest>
                <fileset dir="${selenium.tests.dir}">
                    <!-- If some test folder needs to be excluded from test, mention it below -->
                    <!--exclude name="" /-->
                </fileset>
            </batchtest>
        </phpunit>
    </target>
</project>

It is supposed to generate file 'junit-selenium.xml' but no file is generated and I got following output (Test result on console).

vendor/bin/phing
Buildfile: /home/admin/ee/webshop-selenium/build.xml

Webshop > clean:

    [delete] Deleting directory /home/admin/ee/webshop-selenium/build/logs

Webshop > prepare:

    [mkdir] Created dir: /home/admin/ee/webshop-selenium/build/logs

Webshop > selenium:

.

Time: 9.99 seconds, Memory: 17.25Mb

OK (1 test, 29 assertions)

Can someone please suggest where I'm doing wrong?


Solution

  • Replaced your selenium target with a little customized phpunit target which works for me on Linux (CentOS/Debian) for PHP 5.5, 5.6 and 7.0.

    <?xml version="1.0" encoding="UTF-8" ?>
    <project name="Webshop" default="phpunit">
    
        <property name="myproject.lib.dir" value="${project.basedir}/vendor" />
        <property name="selenium.logs.dir" value="${project.basedir}/build/logs" />
        <property name="selenium.logs.file" value="junit-selenium.xml" />
        <property name="selenium.tests.dir" value="${project.basedir}/tests" />
    
        <target name="prepare" depends="clean">
            <mkdir dir="${selenium.logs.dir}"/>
        </target>
    
        <target name="clean">
            <delete dir="${selenium.logs.dir}"/>
        </target>
    
        <target name="selenium" description="Run all selenium tests of Webshop" depends="prepare">
            <!-- Please change pharlocation. Vendor/bin/phpunit shouldn't be used with phing. -->
            <phpunit bootstrap="${myproject.lib.dir}/autoload.php" pharlocation="${myproject.lib.dir}/bin/phpunit">
                <formatter type="xml" todir="${selenium.logs.dir}" />
                <batchtest>
                    <fileset dir="${selenium.tests.dir}"/>
                </batchtest>
            </phpunit>
        </target>
    
        <fileset id="phptests" dir="${selenium.tests.dir}"/>
    
        <target name="phpunit" description="Run unit tests" depends="prepare">
            <coverage-setup database="${selenium.logs.dir}/coverage.db">
                <fileset refid="phptests"/>
            </coverage-setup>
            <phpunit haltonfailure="true" haltonerror="true" printsummary="true" bootstrap="${myproject.lib.dir}/autoload.php"
                     codecoverage="true">
                <formatter todir="${selenium.logs.dir}" type="clover" outfile="clover.xml" />
                <formatter todir="${selenium.logs.dir}" type="xml" outfile="junit.xml" />
                <batchtest>
                    <fileset refid="phptests"/>
                </batchtest>
            </phpunit>
        </target>
    </project>