2011-03-31 60 views
6

我以前寫過一些使用ruby/rspec的硒測試,並發現它相當強大。現在,我使用Selenium和PHPUnit,並且有一些我錯過的東西,可能僅僅是因爲缺乏經驗。在Ruby/RSpec中,我習慣於能夠爲每個測試用例定義一個「全局」設置,其中包括打開瀏覽器窗口並登錄到我的網站。瀏覽器會話在setUp(),tearDown(),沒有每個測試用例設置?

我覺得PHPUnit的是有點欠缺這裏,因爲1)你只有setUp()tearDown(),其中前和每個單獨測試後運行,並且2)似乎是實際的瀏覽器會話建立之間setUp()並進行測試,並在tearDown()之前關閉。

這使得在測試自己多一點混亂,因爲你必須明確地在開始打開頁面,並在年底進行清理。在每一個測試中。這似乎是不必要的開銷,關閉並重新打開瀏覽器的每一個測試,而不是隻是回到目標網頁。

有沒有其他的方法來實現我在找什麼?

+0

不知道這是你在找什麼,但PHPUnit的並不只提供'setup'和'tearDown'也是其他方法了一堆,可用於設置你的測試的全局狀態。請參閱[PHPUnit手冊中的Fixtures]一章(http://www.phpunit.de/manual/3.6/en/fixtures.html)。請說明這是你正在尋找與否。 – Gordon 2011-03-31 08:27:37

回答

8

我過去所做的是使返回一個對象,像這樣的會話的保護方法:

protected function initBrowserSession() { 
    if (!$this->browserSession) { 
     $this->setBrowser('*firefox'); 
     $this->setBrowserUrl('http://www.example.com/'); 
     //Initialize Session 
     $this->open('http://www.example.com/login.php'); 
     // Do whatever other setup you need here 
    } 
    $this->browserSession = true; 
} 

public function testSomePage() { 
    $this->initBrowserSession(); 
    //Perform your test here 
} 

你真的不能使用setupBefore/AfterClass功能,因爲它們是靜態的(和這樣你將無法訪問該實例)。現在

,隨着中說,我會質疑你這樣做的動機。通過在測試之間重複使用會話的測試,您可能會在測試之間引入副作用。通過爲每個測試重新開啓一個新的會話,您將會將測試的效果降至測試的效果。誰關心重新打開瀏覽器的性能(至少在合理的程度上)?這樣做實際上增加了測試的有效性,因爲它是孤立的。再一次,測試一個長時間的會話可能會有些事情要說。但是,如果是這樣的話,我會做一個獨立的測試用例/類個別功能測試...

0

雖然我@ircmaxell,這可能是最好的重置測試之間的會話同意,我可以看到在這種情況下,測試只需幾分鐘即可完成,只需幾小時即可重新啓動瀏覽器。

因此,我做了一些挖掘和發現,我們可以覆蓋在一個基類中的start()方法。在我的設置,我有以下幾點:

<?php 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 

class SeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase 
{ 
    public function setUp() { 
     parent::setUp(); 
     // Set browser, URL, etc. 
     $this->setBrowser('firefox'); 
     $this->setBrowserUrl('http://www.example.com'); 
    } 

    public function start() { 
     parent::start(); 
     // Perform any setup steps that depend on 
     // the browser session being started, like logging in/out 
    } 
} 

這將影響自動擴展SeleniumTestCase任何類,所以你不必擔心在每一個測試環境搭建。

我沒有測試過,但它很可能是有()拆卸前的叫個不停()方法爲好。

希望這會有所幫助。

相關問題