PHPUnit parametreleri geçirerek

5 Cevap php

Ben PHPUnit testleri yazmak için başladım ve geliştiriciler makineleri yanı sıra bizim sunuculardan çalıştırmak için testler istiyorum. Geliştiriciler makineleri farklı sunuculardan daha fazla ve hatta farklı birbirinden kurulur.

Bu farklı yerlerde çalıştırmak için bu test o çalıştırılıyor nerede göstermek zorunda olacak çalıştırır kişi gibi görünüyor. Daha sonra test üzerinde çalıştığı makinenin uygun yapılandırma bakabilirsiniz.

Ben böyle bir şey hayal ediyorum:

phpunit.bat-X johns_laptop unittest.php

veya alfa sunucuda:

phpunit-X alfa unittest.php

Testte ben 'X' (ya da her neyse) ise parametre değeri elde etmek mümkün olacak ve biliyorum, örneğin, uygulama kök yolu bu makine için ne olur.

Komut satırı buna izin veriyor gibi görünmüyor - ya da ben bir şey kaçırdım?

5 Cevap

Eğer $ argv ve $ argc incelemek için tek yol olacaktır. Gibi bir şey:

<?php

require_once 'PHPUnit/Framework/TestCase.php';

class EnvironmentTest extends PHPUnit_Framework_TestCase {
    protected function setUp() {
            parent::setUp ();
    }

    protected function tearDown() {
            parent::tearDown ();
    }

    public function __construct() {
    }

    public function testHasParam() {
            global $argv, $argc;
            $this->assertGreaterThan(2, $argc, 'No environment name passed');
            $environment = $argv[2];
    }
}

Sonra bu gibi phpunittest arayabilirsiniz:

phpunit EnvironmentTest.php my-computer

Sen PHPUnit kullanabilirsin - Bunun için anahtarı önyükleme.

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

Ardından, değişkenleri içeren bir bootstrap.php dosyası yapmak:

$port = 4445;

Senin testlerde, bu değerleri kapmak:

global $port;
$this->setPort($port);

Sonra çalıştırın:

phpunit --bootstrap boot.php MyTest.php

Hem önyükleme dosyaları değişkenler geçmek gibi dosyaları test etmek için zarif bir yolu ortam değişkenleri kullanmaktır:

MY_ENV_VAR="some value"

phpunit all

Sonra, PHP dosyaları, bunu şöyle erişebilirsiniz:

getenv('MY_ENV_VAR')

Source: http://blog.lysender.com/2010/10/phpunit-passing-environment-variable-to-your-application/

Ssh kullanacak, uzak makinede testleri çalıştırmak istiyorsanız o zaman koşmak. Yerel makinada sadece o phpunit çalıştırın, kök dizinine cd var.

user@local:/path/to/your/project$ phpunit
user@remote:/var/www/project$ phpunit

Edit: Bir makine bağımlı yapılandırması bahsediyoruz. (Btw conf ne tür?) Benim çözüm, aynı güneşin altında versioncontrolled değil yer bu yapılandırma koymak için, o zaman runtime ayrıştırmak / oku, örneğin methds kurmak gerekli.

Ben tam bu konu ile mücadele ve hacky-henüz-uygun çözüm bir tür ile geldi: Ben diskteki bir dosyaya parametreleri yazmak ve setUp() yönteminde onları almak:

public function setUp() {
    $this->setBrowser('firefox');
    $this->base_url = file_get_contents("selenium_host");
    $this->setBrowserUrl($this->base_url);
}

Aksine phpunit veya çağrı daha paratest, doğrudan, ben testleri başlatmak için bir kabuk komut dosyası var. Bu bir çağırır paratest ve bana süreçlerin sayısını yanı sıra ben karşı çalıştırmak testleri istiyorum ana belirlemenizi sağlar.

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

Sonra, karşı 7 iş parçacığı ile çalıştırmak için http://adifferenthost.com:

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