2013-10-11 37 views
1

我正在使用PHPUnit和Selenium來測試我的Web應用程序。PHPUnit和Selenium - 從另一個類運行測試

目前我有2個測試類 - 用戶測試權限測試

  • UserTest我有一個測試程序可以成功地創建一個新用戶的方法。
  • 權限測試我打開和關閉某些權限並測試結果。

例如,我可能會關閉「創建用戶」權限,然後測試「創建用戶」按鈕被禁用。但是,如果我再次打開「創建用戶」權限,我想測試是否可以創建用戶。

能夠創建用戶的所有邏輯已經在UserTest類中 - 那麼是否有任何方式從PermissionsTest類的UserTest類運行測試?

此刻我想下面的代碼:

public function testUserPermission(){ 
    $userTest = new UserTest(); 
    if($this->hasPermission = true){ 
    $userTest->testCanCreateUser(); 
    } 
} 

然而,當我運行這個測試,我得到的錯誤"There is currently no active session to execute the 'execute' command. You're probably trying to set some option in setup() with an incorrect setter name..."

謝謝!

回答

1

解決方案如下:

//instantiate and set up other test class 
$userTest = new UserTest(); 
$userTest->setUpSessionStrategy($this::$browsers[0]); 
$userTest->prepareSession(); 

//carry out a test from this class 
$userTest->testCanCreateUser(); 

這工作得很好。我不明白爲什麼在這種情況下使用來自另一個測試類的功能是一個糟糕的主意,因爲如果我沒有這樣做,我不得不將這個功能重寫到我的新類中,這看起來不那麼'純粹'。 。

+0

你怎麼包括類?是由PHPUnit自動加載還是需要手動指令? – xiankai

+0

我使用自動加載來包含「UserTest」類。具體而言,我使用composer創建自動加載文件,並將此文件包含在PHPUnit「bootstrap」文件中。 – user1578653

+0

謝謝,你知道,如果類似的東西可以用於Selenium 1嗎?我剛剛發現'setUpSessionStrategy'和'prepareSession'只是Webdriver特有的命令。 – xiankai

3

這聽起來我像你缺少你與它的邏輯測試執行的分離 - 我說的不是PHP的問題,而是一般的測試model.It將允許你重新使用在不同的測試案例的測試組件。

你可以看一下關於頁面對象的一些 材料PHP here或普通硒wiki

1

對於硒1(RC),

我作了如下的修改,而不是(以及應用所述頁面對象的設計模式):

具體Test類

//instantiate and set up other test class 
$userTest = new UserTest($this->getSessionId()); 

//carry out a test from this class 
$userTest->createUser(); 

//asserts as normal 
$userTest->assertTextPresent(); 
... 

基本頁對象類別

class PageObject extends PHPUnit_Extensions_SeleniumTestCase { 
    public function __construct($session_id) { 
     parent::__construct(); 
     $this->setSessionId($session_id); 
     $this->setBrowserUrl(BASE_URL); 
    } 
} 

特定頁Object類

class UserTest extends PageObject { 

    public function createUser() { 
     // Page action 
    } 
}