php向bat中传递参数,php-将参数传递给PHPUnit
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魅族 20 Pro 定版渲染图曝光:直屏
- 下一篇: php复制xml文件,PHP_php x