2013-06-24 58 views
5

我在Behat中創建了一個非常簡單的登錄測試,以便登錄到我們的內部應用程序。有兩種登錄類型(從相同的屏幕和框中完成)。有基礎和先進的。唯一的區別在於,在進階中,正在登錄的用戶可以訪問多個公司,並被要求選擇一家公司進行工作。當通過PhantomJS運行Behat登錄測試時,它僅通過第一次運行

我發現,無論何時我通過PhantomJS而不是Selenium運行場景,運行速度都會更快(顯然,因爲無需在無頭瀏覽器模擬器中進行渲染)。當我第一次啓動PhantomJS時,它運行兩種情況都很好。但後來我再次運行它,並且第一個場景(基本登錄)失敗。

如果我重新啓動PhantomJS,它會再次運行,直到第二次嘗試。我很困惑這一點。爲什麼我需要重新啓動PhantomJS才能在第一次調用時再次通過這兩個測試。

如果我指定我只是希望它在後續運行時運行高級登錄,那麼它也會失敗登錄。如果我指定了基本登錄(仍然阻止它運行兩種情況),它也會失敗。但是當我在同一個電話中運行兩個場景時,第一個總是失敗,第二個總是通過。

我甚至改變了順序,以便基本運行第二次而不是第一次,第一種情況(在本例中爲高級)失敗,第二次通過。那麼世界上正在發生什麼?

作爲一個額外的獎勵,我繼續前進,並添加了一行「然後我按照」註銷「',突然兩個情節都再次通過。如果不是因爲它在第二種情況下工作正常,那麼這將是有意義的。如果它已經登錄,它們不應該失敗嗎?有沒有辦法確保每個場景結束時清除PhantomJS的緩存?

Feature: Login 
    Login to app using a basic user 
    Login to app using a multi-company user 

    @javascript 
    Scenario: Basic Login 
     Given I am on "/" 
     And I wait a few seconds 
     When I fill in "login" with "ijones" 
     And I fill in "password" with "[email protected]" 
     And I press "LoginButton" 
     And I wait a few seconds 
     Then I should see "By clicking below" 
     And I press "OK" 
     Then I should see "Welcome" 

    @javascript 
    Scenario: Advanced Login 
     Given I am on "/" 
     When I fill in "login" with "rtyler" 
     And I fill in "password" with "[email protected]" 
     And I press "LoginButton" 
     Then I wait for the company selection box 
     And I click a field "company" 
     And I pick "Test Company 2" 
     And I press "CompanyLoginButton" 
     Then I should see "By clicking below" 
     And I press "OK" 
     Then I should see "Welcome" 
+0

我在Codeception中遇到同樣的問題。 PhantomJS保持會話。 – Adamamont

+0

我有同樣的問題,但在我的情況下,即使reset()也沒有幫助。 – Pavel

回答

9

好吧,我終於弄明白了這個問題。至少部分。它似乎在維持場景之間的會話。這並不能完全解釋爲什麼它只是第一個電話。但我懷疑PhantomJS會在最後一個場景關閉時保持前一個會話的開啓,並且Mink在場景之間重建會話,但不會在最後一個場景結束之後重建會話。

無論如何,解決方案是在每個方案調用結束時創建一個上下文或掛鉤來重置會話。出於測試目的,我創建了一個上下文,其中顯示「我重置會話」。

我所限定的本這樣:

/** 
* @Given /^I reset the session$/ 
*/ 
public function iResetTheSession() { 
    $this->getSession()->reset(); 
} 

當我打電話在這兩種情況下的端部這方面它解決了這個問題。所以我想我會繼續做一個事後場景的鉤子,爲我照顧這個。

相關問題