2017-03-21 103 views
0

我目前正在用Nunit構建我的自動化框架,我已經有了一切正常的工作,我想要做的最後一件事情就是能夠映射我的自動測試腳本來測試我的測試軟件中有病例。地圖與Nunit的測試用例ID

我對所有測試用例都使用TestRail。

我的理想情況是能夠在測試軌道中用相應的測試用例ID修飾每個測試用例,並且在TestRail中報告測試結果時,我可以使用Case ID。目前我通過匹配測試名稱/腳本名稱來完成此操作。

示例 -

[Test] 
[TestCaseId("001")] 
    public void NavigateToSite() 
    { 
     LoginPage login = new LoginPage(Driver); 
     login.NavigateToLogInPage(); 
     login.AssertLoginPageLoaded(); 
    } 

然後在我的拆卸方法,它會是這樣的 -

[TearDown] 
public static void TestTearDown(IWebDriver Driver) 
    { 
     var testcaseId = TestContext.CurrentContext.TestCaseid; 
     var result = TestContext.CurrentContext.Result.Outcome; 

     //Static method to report to Testrail using API 
     Report.ReportTestResult(testcaseId, result); 
    } 

我剛剛做了testcaseid屬性,但是這是我什麼尋找。

[TestCaseId(「001」)

我可能已經錯過了,如果它已經存在,或者我怎麼去有可能延長NUnit的做到這一點?

任何幫助都會很棒。

謝謝。

回答

1

您可以使用NUnit提供的PropertyAttribute

例子:

[Property("TestCaseId", "001")] 
[Test] 
public void NavigateToSite() 
{ 
... 
} 

[TearDown] 
public void TearDown() 
{ 
    var testCaseId = TestContext.CurrentContext.Test.Properties["TestCaseId"]; 
} 

此外,您可以創建自定義屬性特性 - 見NUnit link

+0

謝謝Sulo,那正是我在找的東西。我從來沒有遇到屬性屬性。 – Kpizzle

0

多年來,我建議人們做到這一點:混合測試管理代碼到測試本身。這顯然違反了單一責任原則,並且在維護測試方面造成困難。

另外,還有一個問題,TearDown中顯示的結果可能不是最終。例如,如果您在測試中使用了[MaxTime],並且超過了指定的時間,則您的成功測試將更改爲失敗。其他幾種內置屬性以這種方式工作,當然總是有用戶創建屬性的可能性。 TearDown的目的是清理代碼後,而不是創建報告或測試管理系統的跳板。

這就是說,在老版本的NUnit中,人們養成了這樣做的習慣。這部分是由於NUnit插件(我們設計的方法)寫起來相當複雜。問題也較少,因爲在測試方面NUNit V2的可擴展性明顯較差。使用3.0,我們提供了一種創建測試管理功能的方法,例如將此作爲NUnit引擎的擴展,我建議您考慮使用該工具而不是將它們與測試代碼混合。

一般的方法是創建一個屬性,如Sulo的答案中所建議的,但用一個將結果報告給TestRail的EventListener擴展替換TearDown代碼。EventListener可以訪問XML格式的所有結果信息 - 不僅僅是TestContext中可用的有限字段。你可以隨時提取任何需要去TestRail。寫作TestEngine擴展

詳情請訪問:https://github.com/nunit/docs/wiki/Writing-Engine-Extensions

注意,如果你想使用Visual Studio適配器,這是我們正在努力擴展下是一些突出的問題。現在,您將獲得使用控制檯跑步者的最佳體驗。

+0

感謝@Charlie的詳細回覆。我對C#(一般開發)和自動化測試相當陌生,所以我正在學習如何做這些事情。我會在船上採納你的建議,並試圖讓事件偵查員去。 – Kpizzle