簡體   English   中英

如何重新運行失敗的 Nunit 測試 2.6.2

[英]How to re-run a fail Nunit Test 2.6.2

我正在嘗試重新運行失敗的 Nunit 測試,主要是因為 selenium 的脆弱性。

    [TearDown]
    public virtual void TearDown()
    {
        var testName = TestContext.CurrentContext.Test.FullName.Replace("Server.Tests.", string.Empty);

        if (TestContext.CurrentContext.Result.Status == TestStatus.Passed)
            return;
        else if (_testFailure < 3) {
            _testFailure++;
            Console.WriteLine($"\n {testName} {TestContext.CurrentContext.Result.Status}... Retrying attempt {_testFailure}");
            DbReloader.LoadUnitTestData(DbFactory);
            TestExecutionContext.CurrentContext.CurrentTest.Run(new NullListener(), TestFilter.Empty);

        }
        BrowserDriver.GetScreenshot()
                     .SaveAsFile($"{testName}.fail.png", ImageFormat.Png);
    }

問題是在測試再次運行后,由於原始測試失敗,它將繼續拆除測試。 如何用重試的測試結果覆蓋 TestContext.CurrentContext.Result?

不幸的是, RetryAttribute僅在 NUnit 3 中可用。從長遠來看,它已經存在了很長一段時間,已經在 2015 年實現了。是否有無法升級您正在使用的 NUnit 版本的原因?

如果情況迫使您繼續使用這樣一個舊版本(2012 年)的 NUnit,那么實現自己的RetryAttriute並不難。 該定義可以存在於您的測試程序集中並引用您正在使用的 NUnit 版本。

您可以在現有的 V2 RepeatAttribute之后使用 model 這樣的屬性,並且還可以從 NUnit 3 中的RetryAttribute中獲得一些提示。但是,后者基於一組完全不同的接口,因此無法在不修改的情況下使用。

沒有簡單的方法可以有效地從TearDown方法重新運行測試,因為在TearDown方法完成之前測試不會結束。 實際上修改 NUnit 2.6.2 本身會更容易。

總結一下,按照從易到難的順序,你可以選擇

  1. 升級到 NUnit 3
  2. 添加自定義 RetryAttribute
  3. 修改 NUnit 2.6.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM