如何获取测试用例名称并将其用作文件名 NLog
How can I get test case name and use it as file name NLog
我有以下问题。我想为每个测试用例 运行 创建新的 .txt 文件,并将测试用例名称或测试用例 ID(无关紧要)作为 文件name 但我不知道如何在 NLog.Config 文件中获取当前测试用例名称。
<target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${callsite}.txt" />
我正在使用 ${callsite},但我有几个 classes 的记录器,它会创建具有这些 classes 名称的文件.
private static readonly Logger Logger = GetCurrentClassLogger();
例如 我有一个 class 记录某些 Selenium 操作已完成,另一个 class 记录驱动程序已成功打开。在测试中,我同时使用 classes 并且我不想为我使用的每个 class 创建文件,而是只创建一个具有测试名称的文件。
P.S 记录器本身工作正常。
我正在使用 NUnit 进行测试。
因此,如果有人知道如何因为我找不到我想要的东西,我将非常感激。
祝你有愉快的一天!
使用 NLog NDLC 的非常简单的解决方案:
[Test]
public void MyTest()
{
using (NLog.NestedDiagnosticsLogicalContext.Push(System.Reflection.MethodBase.GetCurrentMethod().ToString()))
{
// Testing within "${ndlc}"
}
}
然后您可以在 NLog-Layout 中执行此操作:
target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${ndlc:topFrames=1:whenEmpty=UnknownTest}.txt" />
在自定义 NLog LayoutRenderer 中使用 NUnit TextContext:
[LayoutRenderer("nunit-testname")]
public class NUnitTestNameLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(NUnit.Framework.CurrentContext?.Test?.Name);
}
}
将上面的代码编译成一个名为"Custom.NLog.NUnit"的程序集,然后你就可以像这样加载它了:
<extensions>
<add assembly="Custom.NLog.NUnit" />
</extensions>
<targets>
<target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${nunit-testname:whenEmpty=UnknownTest}.txt" />
</target>
另请参阅:https://github.com/nunit/docs/wiki/TestContext
另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer
我有以下问题。我想为每个测试用例 运行 创建新的 .txt 文件,并将测试用例名称或测试用例 ID(无关紧要)作为 文件name 但我不知道如何在 NLog.Config 文件中获取当前测试用例名称。
<target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${callsite}.txt" />
我正在使用 ${callsite},但我有几个 classes 的记录器,它会创建具有这些 classes 名称的文件.
private static readonly Logger Logger = GetCurrentClassLogger();
例如 我有一个 class 记录某些 Selenium 操作已完成,另一个 class 记录驱动程序已成功打开。在测试中,我同时使用 classes 并且我不想为我使用的每个 class 创建文件,而是只创建一个具有测试名称的文件。
P.S 记录器本身工作正常。 我正在使用 NUnit 进行测试。
因此,如果有人知道如何因为我找不到我想要的东西,我将非常感激。
祝你有愉快的一天!
使用 NLog NDLC 的非常简单的解决方案:
[Test]
public void MyTest()
{
using (NLog.NestedDiagnosticsLogicalContext.Push(System.Reflection.MethodBase.GetCurrentMethod().ToString()))
{
// Testing within "${ndlc}"
}
}
然后您可以在 NLog-Layout 中执行此操作:
target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${ndlc:topFrames=1:whenEmpty=UnknownTest}.txt" />
在自定义 NLog LayoutRenderer 中使用 NUnit TextContext:
[LayoutRenderer("nunit-testname")]
public class NUnitTestNameLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(NUnit.Framework.CurrentContext?.Test?.Name);
}
}
将上面的代码编译成一个名为"Custom.NLog.NUnit"的程序集,然后你就可以像这样加载它了:
<extensions>
<add assembly="Custom.NLog.NUnit" />
</extensions>
<targets>
<target name="logfile"
xsi:type="File"
layout="${longdate}|${message}"
fileName="${basedir}\ATF\web\utils\reports${shortdate}${nunit-testname:whenEmpty=UnknownTest}.txt" />
</target>
另请参阅:https://github.com/nunit/docs/wiki/TestContext
另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer