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项目,并对代码进行了一些修改,使其支持自定义选项功能。

修改后的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

php向bat中传递参数,php-将参数传递给PHPUnit相关推荐

  1. 向sqlserver数据库中传递类似数组的参数解决办法

    向sqlserver数据库中传递类似数组的参数解决办法 关于sqlserver数据库存储过程传递varchar类型参数(后端给出参数格式 '1,2,3').但是查询始终没有结果,但是直接写在语句中确实 ...

  2. java程序中执行maven_java – 将一个enviornment变量传递给Maven中的已执行进程

    我一直在墙上撞了大约一个小时:我正试图将一个简单的属性( java.library.path)传递给exec-maven-plugin.目标是将其与Netbeans右键单击文件集成>运行文件过程 ...

  3. mysql 传递数组_将数组传递给MySQL存储例程

    我需要将字符串数组作为参数传递给MySQL存储例程.该数组可能很长,其元素数量不是固定的.然后,我想将字符串值放入具有一列的内存表中,以便可以处理数据.我不知道这是否可以在MySQL中完成.也许需要肮 ...

  4. java 方法 多参数_需要在Java方法中传递多个(20+)参数。这样做有效吗?

    我在Java类中有多个方法,其中每个方法都有20多个参数.我将在另一个类中为这个类创建一个对象并调用每个方法.通常我在Selenium Java中使用POM(页面对象模型). 所以在每个Page对象类 ...

  5. 在React中传递onFocus事件的参数

    <Select style={{ width: '70%', marginLeft: 5 }}disabled={!!_.recordId}mode="multiple"ma ...

  6. php获取form传递的变量,PHP-将变量传递给Ninja Form字段

    目的 以下函数应使用变量在我的表单上预填充隐藏字段(hidden_​​email -). 怀疑 但是,在加载页面时已经声明了我需要传递给该字段的变量" $cust_email".现 ...

  7. python中multiple函数_关于多处理:在Python中将多个参数传递给pool.map()函数

    本问题已经有最佳答案,请猛点这里访问. 我需要一些方法来使用pool.map()中接受多个参数的函数.根据我的理解,pool.map()的目标函数只能有一个iterable作为参数,但是有没有其他参数 ...

  8. 超级详细的教程 一步步教你Vue项目中使用axios如何进行参数拼接

    文章目录 一.Vue 中的网络请求 二.axios的引入 三.常用网络请求方式 1.get A.字符串拼接方式: B.通过params属性传递对象: C.路径拼接方式: D.无请求参数: 2.post ...

  9. Vue项目中使用axios如何进行参数拼接

    一.Vue 中的网络请求 在Vue.js中发送网络请求本质还是Ajax,我们可以使用插件方便操作. ①vue-resource:Vue.js的插件,已经不维护,不推荐使用. ②axios:不是vue的 ...

最新文章

  1. pytorch argsort
  2. centos6下jbd2进程占用大量IO处理
  3. 最小生成树-prim算法模板
  4. AR# 58294 Zynq-7000 SoC: PS SPI 控制器文档升级
  5. 【Python 必会技巧】使用 Python 追加写入 json 文件或更改 json 文件中的值
  6. android: 记录及回复lisView的位置
  7. 500万数据mysql_mysql 单表500万数据经过处理后新增到新表
  8. php攻击方式及防御方法,Syn Flood 攻击 及其一般防御方法
  9. gem install XXX报错
  10. scala 主构造函数_Scala主构造器和辅助构造器
  11. 疑难杂症 | Win10解压文件后乱码
  12. 关于playerunknown's battlegrounds中归零距离小谈
  13. yyyyMMdd/HHmmss转化
  14. tx2使用teamviewer远程桌面访问
  15. Abaqus2022功能介绍
  16. python显示变量值_Python 中如何打印变量值
  17. 国内IT公司病的有多重?技术圈交际花谈软件研发管理怪现状
  18. 三星HDM Odyssey适配SteamVR
  19. 云海IOP 3.0:为行业云而生
  20. 7-10 高空坠球 (20 分) 皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

热门文章

  1. 窗口句柄、窗口类对象的关系
  2. 微信小程序:背景图片在电脑可以显示,真机测试时无法显示
  3. java 长轮询_java – Spring中的长轮询
  4. 在tomcat上部署项目需要打成jar_Spring Boot Web 项目教程,SpringBoot与传统Web 优缺对比...
  5. 如何在uniapp中引入阿里字体图标
  6. 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
  7. Android开发之引用三方库导致SO库冲突的解决办法
  8. PHP中 $_SERVER的信息汇总
  9. u3d文件上传至服务器,unity 上传图片到云服务器
  10. mysql主从架构备份,mysql数据库容灾实时备份主从架构