php向bat中传递参数,php-将参数传递给PHPUnit

这篇博客讨论了如何在开发人员的机器和服务器上运行PHPUnit测试时,根据不同环境传递参数。建议的方法包括使用PHPUnit的--bootstrap开关、设置环境变量、在setUp()方法中读取参数以及通过配置文件管理主机特定的设置。文章提供了多种解决方案和示例代码,以帮助读者解决在不同环境下运行测试时遇到的问题。
摘要由CSDN通过智能技术生成

php-将参数传递给PHPUnit

我开始编写PHPUnit测试,并且希望这些测试可以在开发人员的机器以及我们的服务器上运行。 开发人员计算机的设置与服务器不同,甚至彼此不同。

要在这些不同的地方运行,似乎必须由运行该测试的人员来指明要在哪里运行。 然后,测试可以查找正在运行的计算机的正确配置。

我在想类似的东西:

phpunit.bat -X johns_laptop unittest.php

或在Alpha服务器上:

phpunit -X alpha unittest.php

在测试中,我将能够获取'X'(或其他任何值)参数的值,并且知道例如该机器到应用程序根目录的路径。

它看起来不像命令行所允许的那样-还是我错过了什么?

dl__ asked 2020-08-06T10:29:26Z

9个解决方案

38 votes

您可以为此使用PHPUnit的--bootstrap开关。

--bootstrap A "bootstrap" PHP file that is run before the tests.

然后,制作一个包含变量的bootstrap.php文件:

$port = 4445;

在测试中,您可以获取以下值:

global $port;

$this->setPort($port);

然后运行:

phpunit --bootstrap boot.php MyTest.php

Mark Theunissen answered 2020-08-06T10:30:08Z

32 votes

一种方法是让您检查$ argv和$ argc。 就像是:

require_once 'PHPUnit/Framework/TestCase.php';

class EnvironmentTest extends PHPUnit_Framework_TestCase {

public function testHasParam() {

global $argv, $argc;

$this->assertGreaterThan(2, $argc, 'No environment name passed');

$environment = $argv[2];

}

}

然后,您可以像这样调用phpunittest:

phpunit EnvironmentTest.php my-computer

Paolo answered 2020-08-06T10:29:35Z

15 votes

将变量传递到引导文件和测试文件的一种绝佳方法是使用环境变量:

export MY_ENV_VAR="some value"

phpunit all

然后,在您的PHP文件中,您可以像这样访问它:

getenv('MY_ENV_VAR')

资料来源:[http://blog.lysender.com/2010/10/phpunit-passing-environment-variable-to-your-application/]

scribu answered 2020-08-06T10:30:37Z

4 votes

我认为上述答案无法解决我的同样问题。

公认的答案并不完美。 这样,应始终将自定义选项放在参数列表的末尾,并且没有指示符可以表明它们是自定义选项。 如果我需要的自定义选项的数量没有固定,我应该编写大量代码以解析带有正则表达式或类似内容的自定义选项。

环境变量解决方案是好的,但不是自然的。 看起来很奇怪。

VAR1=aaa VAR2=bbb VAR3=ccc ./phpunit-custom-option CustomOptionTest.php

Shell脚本和setUp()解决方案与公认的缺点相同。 可能是您应该编写大量代码来分析文件并处理数量无法预测的自定义选项。

我认为引导脚本不是正确的解决方案。 它可以用于自动处理肮脏的作品,每次都执行相同的操作,但不能很好地处理更改部分。

我不喜欢以上所有答案。

我自己也没有好主意。 但是也许我所做的可以给您启发。 我在GitHub上分叉了phpunit项目,并对代码进行了一些修改,使其支持自定义选项功能。

k3aGa.png

修改后的phpunit版本可以接受如下自定义选项:

./phpuint-custom-option --custom var1=value1 --custom var2=value2 CustomOptionTest.php

在测试中,您可以通过访问超级全局变量$ _SERVER访问自定义选项

class CustomOptionTest extends PHPUnit_Framework_TestCase {

public function testCustomOption() {

$this->assertEquals('value1', $_SERVER['var1']);

$this->assertEquals('value2', $_SERVER['var2']);

}

}

您可以在此处找到我的代码,然后在此处下载修改后的版本(通过单击页面上的“查看完整文件”链接)。

仅供参考。 本文是类似的解决方案。

Charles answered 2020-08-06T10:31:42Z

3 votes

正如Jasir已经提到的那样,一种解决方案是在phpunit调用之前设置环境变量。

在Linux上:

X=alpha phpunit unittest.php

在Windows上可能:

set X=johns_laptop && phpunit.bat unittest.php

在脚本中使用

getenv('X')

读取值

Victor answered 2020-08-06T10:32:20Z

2 votes

我在这个确切的问题上苦苦挣扎,并提出了一种方便又方便的解决方案:我将参数写入磁盘上的文件,并以setUp()048方法进行检索:

public function setUp() {

$this->setBrowser('firefox');

$this->base_url = file_get_contents("selenium_host");

$this->setBrowserUrl($this->base_url);

}

我没有直接调用./run_all_tests.sh 7 'http://adifferenthost.com'或paratest265,而是使用Shell脚本来启动测试。 这个调用paratest,让我指定进程数以及要运行测试的主机。

run_all_tests.sh

if [ $1 ]

then

threads=$1

else

threads=5

fi

if [ $2 ]

then

echo $2 > selenium_host

else

echo 'http://defaulthost.com' > selenium_host

fi

vendor/bin/paratest -p$threads -f --colors TestSuite.php

然后,以7个线程针对[http://adifferenthost.com:]运行

./run_all_tests.sh 7 'http://adifferenthost.com'

ehed answered 2020-08-06T10:32:53Z

2 votes

此处的所有解决方案均适用于该问题,但是对于某些情况,还有另一种方法可能更简单。Phing将接受以phing -Dtest=MyTest.class.php形式传递的参数

所以用phing -Dtest=MyTest.class.php

然后,您可以使用phing条件句来处理以下参数:

passthru="true" returnproperty="phpunitreturn" />

Frug answered 2020-08-06T10:33:22Z

1 votes

如果要在每次测试运行中更改测试参数,则在命令行上传递参数将很有意义。 在不同的计算机上运行特定于主机的测试并不是此解决方案的最佳理由。

为此,PHPUnit配置文件可能更适合。 它使您可以控制特定于主机甚至请求的变量,包括操纵phpunit.xml.dist设置以及定义常量,全局变量,phpunit.xml、$_SERVER甚至$_GET、$_POST等。这些都在配置文件的节点下完成 ,请参阅设置PHP INI设置,常量和全局变量

Symfony2使用此方法,并在单元测试中同时提供phpunit.xml.dist(默认配置)和phpunit.xml。 后者被忽略,以允许您为每台计算机自定义它而不影响存储库。 然后,您将使用以下命令运行测试:

phpunit -c /path/to/phpunit.xml

gopherIT answered 2020-08-06T10:33:52Z

0 votes

如果要在远程计算机上运行测试,请使用ssh然后运行它。 在语言环境机器上,您仅需CD到您的根目录,然后运行phpunit。

user@local:/path/to/your/project$ phpunit

user@remote:/var/www/project$ phpunit

编辑:您正在谈论机器相关的配置。 (什么样的配置?)我的解决方案是将这些配置放在相同的位置,而不是版本控制的位置,然后在所需的设置方法中读取/解析其运行时。

erenon answered 2020-08-06T10:34:16Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值