让 NUnit 控制台在测试运行期间、每次测试之后报告测试结果
-
23-12-2019 - |
题
我在测试程序集上运行 NUnit 控制台,但有时我的 NUnit 会崩溃(我目前正在找出原因)。当 nunit 崩溃时,不会创建 xml 报告,并且我实际上没有任何测试报告。试运行时间很长,如果我丢失了整个试运行报告,情况就很糟糕了。有没有办法告诉 NUUnit 在运行时写入 xml 日志文件(每次测试后)。即使这意味着 xml 文件将无法正确关闭。我知道可以使用 NUnit TestListener。但是是否有一个开关或其他不包括我自己编写额外代码的东西。
解决方案
你可以调用 nunit-console
与 /labels
命令行开关。这将导致它在运行时将每个测试的(完全限定)名称写到控制台,尽管输出不包括测试结果。但是,它会向您显示哪些测试已成功运行。
唯一的另一种选择是您已经打折的选择,那就是自己编写 EventListener
执行。 有关该接口的文档 有点轻,但是 有关编写 NUnit 插件程序集的 NUnit 文档 如果您改变主意,应该足以让您开始。
其他提示
首先,在近期,它看起来像这样的日志记录是由nunit出来提供的 - 此功能已经请求 - 写下部分结果XML作为测试发生而不是结束。
直到它完成我们需要编写一些自定义代码,以防你使用nunit <3.x它很简单:
1)您需要创建一个实现EventListener接口的事件侦听器
2)该界面为不同的测试执行状态提供通知,例如。 runstarted,unfinished或testfinished。您需要的只是对您的案例的日志记录的实现。代码中的片段:
public void RunStarted(string name, int testCount)
{
try
{
_instanceId = Environment.GetEnvironmentVariable("InstanceId");
_buildId = Environment.GetEnvironmentVariable("BuildId");
_browser = Environment.GetEnvironmentVariable("BrowserToTest");
_template = Environment.GetEnvironmentVariable("TemplateToTest");
}
catch { }
}
public void TestFinished(TestResult result)
{
if (result.ResultState == ResultState.Ignored)
{
return;
}
var r = new TestingWorkerData
{
BuildId = _buildId,
InstanceId = _instanceId,
TestName = result.FullName,
Success = result.IsSuccess,
TimeTaken = result.Time.ToString(CultureInfo.InvariantCulture),
Message = result.Message,
StackTrace = result.StackTrace,
Browser = _browser,
Template = _template
};
File.AppendAllLines(@"z:\\results.txt", new[] {JsonConvert.SerializeObject(r)});
}
public class TestingWorkerData
{
public string TestName { get; set; }
public bool Success { get; set; }
public string TimeTaken { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
public string InstanceId { get; set; }
public string Browser { get; set; }
public string Template { get; set; }
public string BuildId { get; set; }
}
.
3)最后一件事是创建nunit addin:
[NUnitAddin]
public class ProgressReporterNugetAddin : IAddin
{
public bool Install(IExtensionHost host)
{
var listeners = host.GetExtensionPoint("EventListeners");
listeners.Install(new ProgressReporterEventListener());
return true;
}
}
.
注意:有一个很好的文章 http:/ /jimmykeen.net/2015/02/28/logging-test-results-with-nunit/ 它涵盖类似的方法和更多。
不幸的是它适用于 nunit <3.x仅由于Nunit3严重重写 - 例如。没有EventListener接口了。