微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# ExtentReport 仅显示最后一个测试类 (NUnit3)

如何解决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.");
        }
    }
}

解决方法

简化问题陈述:

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

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。