我使用phpunit开发了一组测试用例,用于测试开发站点和生产站点。唯一的区别是域名。我该如何将域名从命令行传递到phpunit测试用例中,以便我不需要修改每个文件?
在你的phpunit-bootstrap.php
文件中,你可以这样做:
$site = getenv('DOMAIN');
并使用
<php>
<env name="DOMAIN" value="http://production.com"/>
</php>
按照文档中所示,在您的phpunit.xml
文件中进行设置。
这种方法的缺点是需要使用两个不同的xml
文件。
其他选项是像@DavidHarkness展示的那样,使用围绕phpunit的自定义包装脚本,这通常效果很好。
或者,如果您不想以自动化方式运行这些测试(或同时使用这两种方法),可以执行以下操作:
$site = getenv('DOMAIN');
if(!$site) {
echo "Enter Domain: ";
$site = fgets(STDIN);
}
并且让运行程序检查环境,如果没有设置则要求您提供域名。
对于 PHP 从外部获取输入的几乎每种方式都是如此。
<php>
<define name="DOMAIN" value="http://production.com"/>
</php>
对于使用常量的情况,同样也适用,例如:
在运行测试之前,您可以设置一个环境变量。为了让自己更容易操作,可以创建一个简单的脚本来导出变量并运行测试。
#!/bin/bash
USAGE="Usage: $0 <domain> [file-or-directory]"
if [ "$#" == "0" ]; then
echo "$USAGE"
exit 1
fi
export TEST_DOMAIN=$1
shift
phpunit $*
getenv
访问此值:$domain = getenv('TEST_DOMAIN');
我也遇到了这个问题。你可以使用 bash
导出想要传递的环境变量,并使用 ;
链接 phpunit 调用,例如:
#: HOST_NAME="my.host.com"; phpunit MyTestFile.php
这将创建一个名为HOST_NAME
的环境变量,然后立即调用您的单元测试。
然后在您的测试脚本中,您可以使用类似以下方式访问HOST_NAME
变量:
$host = getenv('HOST_NAME');