BDD e Integración continua en Symfony 2 con Behat, Mink, PHPUnit y Jenkins

Últimamente estoy bastante liado con el proyecto de final de carrera, y he conseguido hacer avances interesantes.

Ya tengo el servidor de integración continua funcionando y haciendo su trabajo.

Como a mi me costó un poco ponerlo todo en marcha, he decidido subirlo aquí por si a alguien le puede ayudar.

Aquí tenéis el build.xml [actualizado 30/09/2012]:

<project name="OpenGestia" default="build" basedir=".">
<property name="output" location="${basedir}/buildOutput/"/>

<target name="init">
<mkdir dir="${output}"/>
<mkdir dir="${output}/phpcs/"/>
<mkdir dir="${output}/pdepend/"/>
<mkdir dir="${output}/coverage/"/>
<mkdir dir="${output}/features/"/>
</target>
<target name="vendors"
description="Update vendors">
<exec executable="composer" failonerror="true">
<arg value="update" />
</exec>
<exec executable="app/console" failonerror="true">
<arg value="cache:clear" />
</exec>

</target>
<target name="build" depends="init, vendors, phpcs, phpmd, phpcpd, pdepend, unitTest, test">
</target>

<target name="testing" depends="init, vendors, unitTest, test">
</target>

<target name="unitTest">
<exec dir="${basedir}" executable="phpunit" failonerror="true">
<arg line="-c app/phpunit.xml --coverage-html=${output}/coverage/ --coverage-clover=${output}/coverage/coverage.xml --log-junit=${output}/phpunit.xml"/>
</exec>
</target>

<target name="test">
<exec dir="${basedir}" executable="${basedir}/bin/behat" failonerror="true">
<arg line="@OpenGestiaBundle --lang=es --format='html,junit' --out='${output}/behat.html, ${output}/features/'"/>
</exec>
</target>

<target name="testing-dev">
<exec dir="${basedir}" executable="${basedir}/bin/behat" failonerror="true">
<arg line="@OpenGestiaBundle"/>
</exec>
<exec dir="${basedir}" executable="phpunit" failonerror="true">
<arg line="-c app/phpunit.xml"/>
</exec>
</target>

<target name="phpcs">
<exec executable="phpcs">
<arg line="--report=checkstyle --report-file=${output}/phpcs/checkstyle.xml --standard=Zend --extensions=php ${basedir}/src" />
</exec>
</target>

<target name="phpmd">
<exec executable="phpmd">
<arg line="
./src xml codesize,unusedcode,naming,design --reportfile ${output}/messdetector.xml --exclude Tests/
" />
</exec>
</target>

<target name="phpcpd">
<exec executable="phpcpd">
<arg line="--exclude app/cache --exclude vendor/ --log-pmd ${output}/phpcpd.xml ." />
</exec>
</target>

<target name="pdepend">
<exec executable="pdepend">
<arg line="
--jdepend-xml=${output}/pdepend/jdepend.xml
--jdepend-chart=${output}/pdepend/dependencies.svg
--overview-pyramid=${output}/pdepend/overview-pyramid.svg
--ignore=app/cache/,vendors/
.
" />
</exec>
</target>
</project>

Ahora mismo hay 16 tests y 6 escenarios en verde.

El código de la aplicación lo podéis ver en: https://bitbucket.org/vicentgodella/opengestia

[Edito 01/08/2012] He actualizado con imágenes de jenkins.

Esas nubes que véis son por la poca cobertura de código, pero los tests pasan perfectamente.

Ahora mismo la cobertura es del 15% según phpunit, pero la verdad es que hay muchos métodos de las clases que es absurdo testear.

Las dos tareas que aparecen en las imágenes son del mismo proyecto, pero la de Test no hace análisis estático del código, y la otra sí, por tanto tarda mucho menos.

Solo me falta averiguar como mostrar los reportes de behat en formato html, porque no encuentro la manera de hacerlo, y la verdad es que están muy chulos, :(

EDITO [30/09/2012]: Ya he conseguido añadir los informes de behat, el problema parece ser que era la versión de jenkins que tenía instalada. He actualizado a la última versión, y ya funciona correctamente.

Informe behat e informe behat extendido.

Esta entrada fue publicada en General y etiquetada , , , , , . Guarda el enlace permanente.

3 respuestas a BDD e Integración continua en Symfony 2 con Behat, Mink, PHPUnit y Jenkins

  1. Vicent M. Valls dijo:

    Hola Vicent!
    Veo que te manejas muy bien con Jenkins. Yo la verdad estoy un poco perdido, si puieses hacer un post explicando como lo configuraste todo para hacer funcionar el Behat de forma automatizada en Jenkins me harias un gran favor, a mi y a muchos usuarios. Si te da pereza el escribirlo, podriamos hacer un hangout y me explicas, y ya haré yo un post explicando todo esto :)

    Enhorabuena por tu blog! Hasta pronto

  2. Javier dijo:

    Buenas Vicent, estoy tratando de utilizar Jenkins para la integración continua y hacer correr nuestros test php pero no logro configurarlo de manera que logre vislumbrar nada logico a traves de consola.

    Estoy utlizando varios plugin y necesito hacer correr phpUnit pero el build no se bien ni por donde meterle mano, ni como decirle que venga a leer mi fichero de configuracion phpunit -c /asasf/asd … etc etc.

    Si tienes alguna idea jeje se agrade, me gusto tu post lo lei con mucho animo de hallar repuesta a mis dudas jaja pero bueno a ver si lo logramos.

    Un saludo!!

  3. gorka dijo:

    Has probado Travis.CI ? es bastante sencillo de configurar y todo online, no tienes que matarte a instalar jenkins u otros ci server y por supuesto te permite correr tus test funcionales de phpunit como no…

Responder a Javier Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>