2011-04-17 19 views
10

在搜索NUnit +依賴方法+測試執行順序時,我已經閱讀了很多SO的答案。每一個答案都表明,強制任何單元測試的順序是非常邪惡的。是NUnit Selenium測試的不好選擇嗎?

我正在使用NUnit編寫Selenium測試。 所以我想用單元測試框架編寫集成測試!

舉一個集成測試的例子(這只是一個例子)。在繼續進行其他測試之前,我需要創建一個有效的帳戶。如果創建帳戶失敗,我想中止整個測試執行。

由於我不想依賴測試的字母順序和真正的NUnit精神,決定在進一步測試之前創建一個帳戶。雖然它不右看看我的兩個核心原因 -

  1. 不必要的重複代碼/執行
  2. 如果應用程序帳戶創建不工作,我所有的測試仍然會嘗試創建和帳戶一而再,再而失敗

我傾向於認爲NUnit可能不適合處理硒測試。 但是,如果不是Nunit,那麼我應該使用什麼?

+0

想要補充的是,TestNG與Selenium的混合測試對於上面製作的所有指針有多好。雖然TestNG的是對Java – Tarun 2011-04-17 13:19:49

+0

已經看到這篇文章的任何一個 - http://beust.com/weblog/2005/03/17/are-dependent-test-methods-really-evil/ – Tarun 2011-04-18 09:53:22

+0

能否從分享這個你的經驗過去的一年? – Stijn 2012-04-19 14:33:19

回答

2

Selenium Core本身帶有一個用Javascript編寫的TestRunner,您可以直接從瀏覽器運行測試。

更多請見:

http://www.developerfusion.com/article/84484/light-up-your-development-with-selenium-tests/

除此之外,使用NUnit和C#編寫的測試更容易編寫和維護。你在寫測試的時候使用了SetUp和TearDown嗎?這樣你可以避免代碼重複。

關於第二點,您可以在第一次設置失敗時設置一個標誌,並在下次跳過設置或設置本身跟蹤它,並在下一次快速失敗。如果在Nunit中安裝失敗,測試不會運行。

2

我一直在用NUnit運行Selenium。這取決於你如何編寫測試。爲了避免代碼重複,我創建了一個輔助函數庫,用於執行常見的事情,如登錄或註銷我的網站,其他測試用來訪問他們需要測試的頁面。 (我使用「庫」這個術語,但實際上並沒有將它們分割成它們自己的C#項目)。

如果創建帳戶的功能被破壞,其他測試將失敗。但個人而言,我不認爲這是一個問題,因爲單元測試的重點是確保您的更改不會在項目的其他地方產生意想不到的影響。如果賬戶創建失敗,顯然會影響很多事情。如果我的登錄助手方法失敗,那麼也是如此:如果您無法登錄,則無法訪問站點中的任何內容。實際上,整個網站被打破了。

2

如果您需要在每個測試中創建新帳戶,那麼我會採取的方法是將該代碼移入您的SetUp代碼。如果您的某些測試不需要登錄,請將它們分成不同的文件。

任何位重複都應該被刪除,測試代碼應該像生產代碼一樣乾淨和健壯。用不同的測試分割文件有助於保持Single Responsibility的想法。

+2

看到喲點,雖然不完全說服。登錄/註冊是一個非常小的例子,並且可以在每個測試方法之前執行(儘管如此,我認爲它是耗時的,因爲同樣的操作會一次又一次地執行)。考慮這種情況。有大學的課程註冊程序。申請課程之前,學生必須通過15層不同的步驟和任何一個發生故障不會讓你進一步進行。因此,這些步驟是在他們的自我,並以這些步驟之後的申請過程中的測試。你還是喜歡保持設置所有這些步驟? – Tarun 2011-04-18 09:14:59

+0

並且爲了增加這個「SetUp」代碼可以在多個類中使用嗎?由於我必然會創建不同的類來將模塊化帶入測試 – Tarun 2011-04-19 03:51:56

1

你也看看PNunit嗎?

見這個問題anwers之一:

Has anyone found a way to run C# Selenium RC tests in parallel?

我仍然不是100%肯定TestNG中如何與電網工作,假設你有一個3步註冊過程,你把這個在3個測試中。 TestNG的網格將幫助你在這裏?我想不,或者它會檢測到測試C需要讓測試A和B運行在同一個線程上?

PNunit看起來像它可以提供一種方式來分發依賴測試到同一臺機器。儘管設置起來可能相當複雜。

+1

是的,TestNG確實會考慮何時並行運行相關測試。這些方法在不同的線程中運行,但它們保持順序 - http://testng.org/doc/documentation-main.html#parallel-running。我最大的問題是集成測試的測試順序。我需要在多個系統中創建帳戶,然後來到一個系統並驗證它。如果創建帳戶,它會自動失敗,而不會繼續執行更多測試。我想我無法解釋黑白單元和集成測試之間的差異,並且都似乎支持單元測試方法。 – Tarun 2011-04-21 07:44:29

+0

我明白你的意思,我認爲最好問[Gallio](http://groups.google.com/group/gallio-user)/ [PNunit](http://groups.google.com/group/)。 nunit-discuss)用戶/開發者,如果他們的框架可以/將會支持與testng類似的功能。在stackoverflow上也有pnunit,mbunit,gallio標籤,你可能會用你的問題來標記你的問題? – 2011-04-21 10:00:27

1

有兩種方法可以幫助你,跟你描述的回答爲AutomatedTester問題:

首先,NUnit的2.4.4定義SuiteAttribute,可以讓你在運行你想要的順序測試。非常方便,但它有一個主要限制:它不兼容TestCaseAttribute。這意味着您的所有測試只能通過TestAttribute;如果您的目標是基於價值的邊界測試(因此有多個數據驅動的測試用例)的覆蓋範圍,這是非常煩人的。更多信息http://www.nunit.org/index.php?p=suite&r=2.5.10

另一種方法是爲您的測試用例準備一個集成示例數據庫。假設您有15個步驟的註冊流程:創建一個學生記錄並將其推至第一步,然後再推送至第二步,依此類推。保存數據庫並將其恢復爲測試夾具設置。然後用不同的學生測試每一步。

在大多數情況下,在每個步驟的不同記錄上進行集成測試是完全有效的,因爲它提供了相同的功能和代碼覆蓋率,並且遵循集成測試的想法,因爲DB中的記錄是真實記錄(由用戶界面創建,並附帶UI的所有缺陷)。

當然,由於需要存儲數據庫副本,因此需要更多時間來運行和存儲空間。如果你的系統負擔不起,那麼你可能會想看看第一個解決方案。

它也給你的是能夠發現在後續步驟中的錯誤,即使前面的步驟是不穩定的優勢在於:所有的測試都在每個測試活動是不是你要求的解決方案的情況下運行。

相關問題