Kapil Sharma
Kapil Sharma

Reputation: 10417

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?

Upvotes: 3

Views: 206

Answers (2)

DragonBe
DragonBe

Reputation: 456

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>

Upvotes: 1

DragonBe
DragonBe

Reputation: 456

Your build.xml for phing looks ok at first sight, but for some reason you seem to miss the usefile="true" argument in your formatter block.

<formatter type="xml" usefile="true" todir="${selenium.logs.dir}" outfile="${selenium.logs.file}">
</formatter>

Try this out to see how it works for you.

Upvotes: 1

Related Questions