c# - 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
,初始化操作将在程序集中的任何测试运行之前发生,并在所有测试完成后进行拆卸。
如果一次性初始化留下任何信息供您的测试使用,请将该信息保存在类的静态属性中。
推荐阅读
- angular - 在进行 ng build --prod 时,jw-angular-pagination 抛出错误
- javascript - 如何在javascript中使用while循环打印数字
- python - 使用 eval 时如何使用 df.appen
- c++ - 如何在普通图像上使用 seshat 作为 seshat(C++ 中的数学表达式识别库)的输入?
- php - 贷款 计算逾期还款,每日 0.2% 拖欠
- php - PHP语法建议
- c# - 使用 MaterialDesignTheme WPF 时使用系统默认按钮的正确解决方案?
- sql - 检查列值并从同一个表中更新另一个列值
- go - gorm 无效的内存地址或 nil 指针取消引用
- ruby-on-rails - Rails 无法指定外键