You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#结合Selenium生成ExtentReports 3.1.3版本失败求助

解决ExtentReports 3.1.3 "No reporters were started" 错误

嘿,这个问题我之前帮人排查过,其实核心原因很直白:你创建了ExtentReports实例,但没正确添加并启动任何报表生成器(比如HtmlReporter)——ExtentReports必须绑定至少一个reporter才能输出测试报告,所以才会抛出这个异常。

下面是适配NUnit框架的完整修正代码,你可以直接参考:

using AventStack.ExtentReports;
using AventStack.ExtentReports.Reporter;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
using System;

namespace YourTestNamespace
{
    public class BaseTest
    {
        // 声明全局的ExtentReports和每个测试对应的ExtentTest实例
        protected static ExtentReports _extent;
        protected ExtentTest _test;

        [OneTimeSetUp]
        public void SetupReport()
        {
            // 1. 创建HtmlReporter实例,指定报告输出路径
            var htmlReporter = new ExtentHtmlReporter(@"C:\TestReports\AutomationTestReport.html");
            
            // 2. 可选:配置报告的自定义属性(标题、名称等)
            htmlReporter.Config.DocumentTitle = "UI自动化测试报告";
            htmlReporter.Config.ReportName = "功能测试执行结果";
            
            // 3. 初始化ExtentReports并附加reporter——这一步是解决错误的核心!
            _extent = new ExtentReports();
            _extent.AttachReporter(htmlReporter);
            
            // 4. 可选:添加系统环境信息,让报告更完整
            _extent.AddSystemInfo("操作系统", Environment.OSVersion.ToString());
            _extent.AddSystemInfo("C#版本", Environment.Version.ToString());
            _extent.AddSystemInfo("NUnit版本", "3.x");
        }

        [SetUp]
        public void SetupTest()
        {
            // 每个测试方法启动时,创建对应的测试节点
            _test = _extent.CreateTest(TestContext.CurrentContext.Test.Name);
        }

        [TearDown]
        public void TearDownTest()
        {
            // 每个测试结束后,同步测试结果到报告
            var testStatus = TestContext.CurrentContext.Result.Outcome.Status;
            var errorMsg = TestContext.CurrentContext.Result.Message;

            switch (testStatus)
            {
                case TestStatus.Failed:
                    _test.Fail($"测试失败原因: {errorMsg}");
                    break;
                case TestStatus.Passed:
                    _test.Pass("测试执行通过");
                    break;
                case TestStatus.Skipped:
                    _test.Skip("测试被跳过");
                    break;
                default:
                    _test.Info("测试状态未知");
                    break;
            }
        }

        [OneTimeTearDown]
        public void TearDownReport()
        {
            // 所有测试结束后,刷新并生成最终报告——这一步不能漏!
            _extent.Flush();
        }
    }

    // 你的测试类继承BaseTest即可复用报告逻辑
    public class YourTestCases : BaseTest
    {
        [Test]
        public void LoginSuccessTest()
        {
            _test.Info("执行登录成功测试步骤");
            Assert.IsTrue(true);
        }

        [Test]
        public void LoginFailTest()
        {
            _test.Info("执行登录失败测试步骤");
            Assert.IsFalse(true);
        }
    }
}

关键注意点:

  • 必须执行AttachReporter:这是解决你当前错误的核心,一定要在初始化ExtentReports后,把创建好的reporter附加进去。
  • Flush()不能忘:所有测试结束后必须调用这个方法,否则测试数据不会写入到报告文件中。
  • 版本一致性:确保你安装的ExtentReports和ExtentReports.Reporter NuGet包版本都是3.1.3,版本不匹配也可能导致异常。
  • 路径权限:报告输出路径要保证程序有写入权限,否则会抛出IO异常。

内容的提问来源于stack exchange,提问作者G. Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:34:56