2012-08-06 14 views
5

Recientemente comencé a usar Behat con Mink en un proyecto PHP que usa el microesqueleto Slim Las pruebas My Behat funcionan bien pero me gustaría ejecutarlas como parte de mi compilación, que utiliza la plantilla Jenkins-PHP de Sebastian Bergmann.Behat with Jenkins - cómo servir la aplicación PHP?

Para hacer esto, espero que necesite ejecutar un servidor web para servir la aplicación Slim. La respuesta obvia parece ser el servidor web incorporado de PHP 5.4, pero estoy restringido a PHP 5.3.

La única idea que tengo en este momento es tener una fase de implementación mediante la cual, si se supera la compilación Ant, Jenkins implementa un espacio de trabajo en un servidor y luego ejecuta las pruebas Behat en contra de eso. Parece que sería mucho trabajo y podría ser escamoso, además de que requeriría girar otra máquina virtual, lo que preferiría evitar. Estamos buscando emplear Behat en una gran cantidad de proyectos diversos, por lo que sería preferible algo "desechable".

¿Cuál es la mejor manera de resolver este problema?

Respuesta

7

La solución de la que fuimos al final es muy parecido a Jakub sugirió - nuestra instancia Jenkins genera archivos vhost de Apache en conf.d. para cada espacio de trabajo que utiliza Behat, usando un guión algo como lo siguiente:

# Set up a host file entry if none exists 
hostFileEntry="127.0.0.1 ${JOB_NAME}.loc" 
if fgrep -i "$hostFileEntry" /etc/hosts 
then 
     echo "${hostFileEntry}" already in hosts file 
else 
     echo $hostFileEntry >> /etc/hosts 
fi 

# Set up a virtual host for this job 
echo "<VirtualHost *:80>" > /etc/httpd/conf.d/${JOB_NAME}.conf 
echo " ServerName ${JOB_NAME}.loc" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo " DocumentRoot ${WORKSPACE}/public" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "  <Directory ${WORKSPACE}/public>" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "   AllowOverride all" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "   Order allow,deny" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "   Allow from all" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "  </Directory>" >> /etc/httpd/conf.d/${JOB_NAME}.conf 
echo "</VirtualHost>" >> /etc/httpd/conf.d/${JOB_NAME}.conf 

# Reload Apache 
sudo /sbin/service httpd reload 

Luego ejecutamos Behat contra estos espacios de trabajo y lo publicamos en formato JUnit para integrar los resultados con nuestras compilaciones. Se requirió algunos ajustes de permisos, pero esto está funcionando muy bien para nosotros, muchas gracias por su ayuda :-)

+0

Gracias por eso. Estoy intentando esta solución proporcionando un paquete que incruste este script. No es abstracto para toda la distribución del servidor, pero la idea está aquí. https://github.com/prestaconcept/meta-ci. – DEY

1

Otra opción sería implementando conductor marco delgado para Mink (al igual que Symfony dispone de uno). No necesitaría un servidor web para ejecutar sus escenarios, siempre que no haya escenarios de JavaScript.

Para escenarios de JavaScript Simplemente instalé el servidor web y php en mi instancia de jenkins. El host virtual se crea como parte de la construcción y apunta al espacio de trabajo de jenkins.

+0

Gracias, ambos son excelentes sugerencias –

0

Puede implementar un servidor vago con php 5.3. Es "otra máquina virtual" pero es increíblemente desechable.

Cuestiones relacionadas