我最近开始在Behat上使用Mink在一个PHP项目中使用Slim微框架My Behat测试工作正常但是我想将它们作为我的构建的一部分运行,它使用Jenkins - Sebastian Bergmann的-PHP模板。
要做到这一点,我希望我需要运行一个Web服务器来提供Slim应用程序。显而易见的答案似乎是PHP 5.4内置的Web服务器,但我仅限于PHP 5.3。
我目前唯一的想法就是拥有一个部署阶段,如果Ant构建通过,Jenkins会在服务器上部署工作区,然后针对该服务器运行Behat测试。这感觉就像它需要做很多工作而且可能是片状的,而且还需要启动另一个VM,我宁愿避免。我们希望在大量不同的项目中使用Behat,所以“一次性”更适合。
解决此问题的最佳方法是什么?
答案 0 :(得分:8)
我们最终使用的解决方案与Jakub建议的非常相似 - 我们的Jenkins实例在conf.d中为每个使用Behat的工作区生成Apache vhost文件,使用类似以下的脚本:
# 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
然后我们针对这些工作区运行Behat并以JUnit格式输出以将结果与我们的构建集成。它需要对权限进行一些调整,但这对我们非常有用,非常感谢您的帮助: - )
答案 1 :(得分:1)
您可以使用Ruby的Rack来提供PHP:https://github.com/jimeh/php-rack
答案 2 :(得分:1)
另一种选择是为Mink实现Slim框架驱动程序(就像Symfony有一个)。只要没有javascript场景,您就不需要Web服务器来运行您的场景。
对于javascript场景,我只是在我的jenkins实例上安装了web服务器和php。虚拟主机是作为构建的一部分创建的,并指向jenkins的工作区。
答案 3 :(得分:0)
您可以使用php 5.3部署vagrant服务器。它是“另一个虚拟机”,但它非常易于使用。