2017-04-18 42 views
1

WebDriver安裝程序應該設置爲靜態以執行併發測試嗎?WebDriver應該設置爲靜態以執行併發測試嗎?

  1. 在線即時看到使用列表BasePage的設置等,其中開發人員使用的驅動程序()的靜態實例的例子很多等
  2. 在我的情況下工作,我可以執行多個測試案例在同一時間:

    public class BrowserFactory implements ISuiteListener { 
    protected WebDriver webdriver; 
    

    }

您的想法?

+0

它並不僅僅是靜態的,它基於如何爲所有硒代碼提供驅動程序實例 – kushal

+0

您的實施明確起作用。你認爲它有什麼問題?似乎沒有任何改變你的方法。您可以在一個窗口之間切換一個驅動程序,但這似乎很麻煩... –

+0

@Mark Lapierre這種方法在使用Webdriver和PageObjectModel方法時很有用,但現在我需要開發一個也使用Cucumber的框架,因此需要研究所有可能性,可能出現的問題,例如在我的DriverFactory類中,我使用TestNG調用BeforeClass等,並且沒有這個可能會導致使用Cucmber和JUnit庫時出現問題, – Gbru

回答

2

這完全取決於您的測試範圍。如果您使用的是像黃瓜或JBehave這樣的基於小黃瓜的系統,那麼您的測試通常是故事情景中的步驟。當您有多個場景和/或多個故事時,一次設置驅動程序(靜態)並將該實例傳遞給其他場景/故事通常更容易。另一方面,如果您每次都需要新的驅動程序新實例,則不應將驅動程序定義爲靜態驅動程序,但這意味着每個方案都需要實例化驅動程序所需的步驟以及通常的日誌用戶等等,並在最後關閉驅動程序。這確實允許有一個更明顯的自包含場景,但如果您在繼續之前檢查驅動程序是否已實例化(或用戶已登錄),則可以使用靜態驅動程序完成同樣的事情,並相應地做出反應,而不是始終假設這是一個新的開始。

如果你有一個完全自包含的測試,那麼堅持使用動態(非靜態)驅動程序的聲明,因爲它將需要被初始化並關閉,如果它是所有將與該驅動程序一起運行的。但是,如果您的套件包含其他測試,並且他們可以從使用相同驅動程序中受益,則可以這樣設計。在JBehave中,我在測試運行器中初始化我的驅動程序,因此無論我以最快和最有效的方式運行一個測試,一個故事或多個故事,它都可以工作。

我希望我已經解釋清楚。

+0

再次感謝您真的很感激您花時間去詳細討論(我確定您是非常忙碌),你的答案已經死了,我在尋找什麼,我已經建立了一個頁面對象模型的方法/框架(Dosnt使用Cucumber),我創建了一個驅動程序類,並依次初始化該類中的驅動程序(Non Static ),反過來我的所有測試都繼承了driverfactory類,這使我能夠同時運行多個測試,唯一的問題是這個應用程序roach使用TestNg,我知道Cucumber更適合JUnit,再次感謝您的幫助 – Gbru

+0

您可以很輕鬆地使用testng的黃瓜。 http://stackoverflow.com/questions/31285778/how-to-integrate-the-cucumber-in-testng – Grasshopper

1

您可能已經知道static變量是變量。如果你使得WebDriver是靜態的,它的實例將在並行線程之間共享,你肯定會面臨競爭條件問題。

這就是線程安全很重要的地方。有幾種方法可以實現它:

  • 使用ThreadLocal容器;
  • 使用針對並行環境設計的專用結構之一,例如ConcurrentHashMap

爲什麼人們做出WebDriver靜態幾點:

  • 盲目複製/來自 「權威」 的來源粘貼;
  • 不包括來自域層的驅動程序;
  • 架構設計。

根據我的經驗,使用純繼承來操作非靜態的WebDriver是不可能的,而不會將其明確暴露在框架之外。

+0

感謝您的支持 – Gbru

相關問題