5

我最近开始在一个使用 Slim 微框架的 PHP 项目中使用BehatMink我的 Behat 测试工作正常,但我想将它们作为我构建的一部分运行,它使用 Sebastian Bergmann 的 Jenkins-PHP 模板。

为此,我希望我需要运行一个 Web 服务器来为 Slim 应用程序提供服务。显而易见的答案似乎是 PHP 5.4 的内置 Web 服务器,但我仅限于 PHP 5.3。

我目前唯一的想法是有一个部署阶段,如果 Ant 构建通过,Jenkins 会在服务器上部署一个工作区,然后针对它运行 Behat 测试。感觉这将是很多工作并且可能会不稳定,而且它需要启动另一个 VM,我希望避免这种情况。我们希望在大量不同的项目中使用 Behat,因此“一次性”的东西会更可取。

解决此问题的最佳方法是什么?

4

4 回答 4

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 格式输出,以将结果与我们的构建集成。它需要对权限进行一些调整,但这对我们来说非常有效,非常感谢您的帮助:-)

于 2012-08-22T13:20:50.267 回答
1

你或许可以使用 Ruby 的Rack来服务 PHP:https ://github.com/jimeh/php-rack

于 2012-08-07T11:10:25.257 回答
1

另一种选择是为 Mink 实现 Slim 框架驱动程序(就像 Symfony 一样)。只要没有 javascript 场景,您就不需要网络服务器来运行您的场景。

对于 javascript 场景,我只是在我的 jenkins 实例上安装了 Web 服务器和 php。虚拟主机是作为构建的一部分创建的,并指向 jenkins 的工作区。

于 2012-08-07T14:35:07.537 回答
0

您可以使用 php 5.3 部署 vagrant 服务器。它是“另一个虚拟机”,但它是一次性的。

于 2013-06-26T16:53:43.223 回答