首页 > 解决方案 > C# ExtentReport 仅显示最后一个测试类 (NUnit3)

问题描述

我遇到了 ExtentReport 的问题,我的测试类很少,我想生成一个包含所有测试的报告。我已经创建了一个带有扩展报告初始化的 BaseTest 类,测试类继承了它并使用静态变量创建测试,我的问题是 BaseTest 类测试中有一个 [OneTimeTearDown] 方法,其中包含 extent.Flush() 并且它调用在每个类完成后,其中的测试结果是最后一个类覆盖了它之前的类。先感谢您 !

基类:

[SetUpFixture]
public class BaseClass
{
    public static ExtentReports extent;
    public static ExtentHtmlReporter htmlReporter;
    public static ExtentTest extentTest;
    private string path = ""

[OneTimeSetUp]
public void SetUp()
{
    htmlReporter = new ExtentHtmlReporter(path);

    extent = new ExtentReports();
    extent.AttachReporter(htmlReporter);

    htmlReporter.Config.DocumentTitle = "Tests Report";
    htmlReporter.Config.ReportName = "Issta Tests Report";

    extent.AddSystemInfo("OS", "Windows 10");
    extent.AddSystemInfo("Environment", "QA");
    extent.AddSystemInfo("User Name", "Valeri Rozenberg");
}

[OneTimeTearDown]
public void TearDown()
{
    extent.Flush();
    // Email.sendEmail(path);
}
}

测试类:

namespace AutomationTests
{
    [TestFixture]
    public class AutomaticDeals: BaseClass
    {
        DriverManager driverManager;
        public IWebDriver driver;
        public string url = ""

        [SetUp]
        public void SetUpTests()
        {
            driverManager = 
DriverManagerFactory.GetDriverManager(DriverType.Chrome);
            driver = driverManager.GetWebDriver();
            driver.Url = url;
        }

        [Test]
        public void TestLinks()
        {
            extentTest = extent.CreateTest("TestLinks");
            AutomaticDealsPage aDeals = new AutomaticDealsPage(driver);
            Assert.IsTrue(aDeals.CheckEqualUrls(1));
            extentTest.Log(Status.Pass, "Url's in the automatic deals 
page are equal.");
        }

        [Test]
        public void TestPrices()
        {
            extentTest = extent.CreateTest("TestPrices");
            AutomaticDealsPage aDeals = new AutomaticDealsPage(driver);
            Assert.IsTrue(aDeals.allPricesEqual());
            extentTest.Log(Status.Pass, "Prices in the automatic deals 
page are equal.");
        }
    }
}

标签: c#seleniumnunitextentreportsselenium-extent-report

解决方案


简化问题陈述:

  1. 您有一个要在任何测试运行之前执行的操作(初始化范围报告)。
  2. 您有另一个操作(刷新范围报告),您希望在所有测试运行后执行该操作。

如果这些操作是基类的一部分,则代码将重复运行,如果您使用“[SetUp] and[TearDown] or once for each test fixture class using[OneTimeSetUp]”和“[OneTimeTearDown]”,则为每个测试方法运行一次。因此,您想做的事情无法在基类中完成。

实际上,第一部分(初始化)可以在基类中完成,使用静态标志,以便您只进行第一次初始化。但是,您的代码无法知道它是最后一次调用,因此第二部分是不可能的。

这种情况就是SetUpFixtureAttribute要处理的。

  1. 创建一个标记为 的新类[SetUpFixture]。将类放在包含所有测试的顶级命名空间中,或者(更简单)在任何命名空间之外。

  2. 给出该类[OneTimeSetUp]和 [OneTimeTearDown] 方法。将您想要在运行测试之前和之后执行的操作分别移动到这些方法中。

在任何命名空间之外定义SetUpFixture,初始化操作将在程序集中的任何测试运行之前发生,并在所有测试完成后进行拆卸。

如果一次性初始化留下任何信息供您的测试使用,请将该信息保存在类的静态属性中。


推荐阅读