设置期间测试失败时检索输出日志

时间:2018-12-10 17:19:49

标签: selenium nunit log4net specflow

我正在使用SpecFlow和Selenium运行自动化的单元测试。 SpecFlow提供BeforeTestRunBeforeFeatureBeforeScenario属性,以在适当的时间在测试之间执行代码。

我也在使用log4net记录测试输出。

如果在测试期间或BeforeScenario阶段测试失败,则可以看到输出记录。

但是如果在BeforeTestRunBeforeFeature期间测试失败,则没有可用的输出。

这使得在远程测试服务器上早期诊断测试失败时难以诊断,而我所拥有的只是输出日志。

如果在单个测试开始之前测试失败,是否可以使用log4net获取输出日志?

2 个答案:

答案 0 :(得分:0)

您可以引用TestResult和TestContext对象来实现自定义方法。您可以在[TearDown]或测试结束的某个地方调用它:

    if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Failed")
    {
     string message = TestContext.CurrentContext.Result.Message;
     string logs = TestContext.CurrentContext.Result.StackTrace;
    }
    else if (TestContext.CurrentContext.Result.Outcome.Status.ToString() == "Passed")
    {
    //User defined action
    }
    else
    {
     string otherlog = TestContext.CurrentContext.Result.Outcome.Status.ToString();
    }

答案 1 :(得分:0)

实际上很奇怪,如果测试失败,它不会显示日志。 它对我很好地显示了它: enter image description here

我建议尝试的方法是检查log4net是否将所有日志推送到控制台。实际上,如果您尚未执行某些特殊操作,则默认情况下,记录器应具有控制台附加程序。

我这样启动记录器:

private static readonly ILog log =
            LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

另一个猜测是,也许当您在OneTimeSetup Fixture上测试失败时,它还没有任何日志。