如何解决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.");
}
}
}
解决方法
简化问题陈述:
- 您有一个操作(初始化范围报告),您希望在任何测试运行之前执行该操作。
- 您有另一个操作(刷新范围报告),您希望在所有测试运行后执行该操作。
如果这些操作是基类的一部分,则代码将重复运行,如果您使用 '[SetUp]and
[TearDown]or once for each test fixture class using
[OneTimeSetUp]`,则对每个测试方法运行一次和“[OneTimeTearDown]”。所以你想做的事情在一个基类中是无法完成的。
实际上,第一部分(初始化)可以在基类中完成,使用静态标志,以便您只在第一次初始化。但是,您的代码无法知道它最后一次被调用,因此第二部分是不可能的。
这种情况正是SetUpFixtureAttribute
要处理的。
-
创建一个标记为
[SetUpFixture]
的新类。将该类放置在包含所有测试的顶级命名空间中,或者(更简单的)任何命名空间之外。 -
给那个类
[OneTimeSetUp]
和 [OneTimeTearDown] 方法。将您要在运行测试之前和之后执行的操作分别移到这些方法中。
在任何命名空间之外的 SetUpFixture
中定义,初始化操作将在运行程序集中的任何测试之前发生,并在所有测试完成后进行拆卸。
如果一次性初始化留下任何信息供您的测试使用,请将该信息保存在类的静态属性中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。