如何获取测试用例名称并将其用作文件名NLog

时间:2019-12-18 08:05:48

标签: c# file nunit nlog

我有以下问题。我想为每个运行的测试用例创建一个新的 .txt 文件,其中测试用例名称或测试用例ID(没关系)为文件名,但我不这样做。不知道如何在 NLog.Config 文件中获取当前的测试用例名称。

<target name="logfile"
            xsi:type="File" 
            layout="${longdate}|${message}" 
            fileName="${basedir}\ATF\web\utils\reports\${shortdate}\${callsite}.txt"  />

我正在使用 $ {callsite} ,但是我在多个类中都有记录器,并且它使用这些类的名称创建文件。

        private static readonly Logger Logger = GetCurrentClassLogger();

例如:我有一个类记录了一些Selenium操作已完成,另一个类记录了驱动程序已成功打开。在测试中,我同时使用两个类,并且我不想为我使用的每个类都创建文件,而只创建一个带有测试名称的文件。

P.S记录器本身运行正常。  我正在使用 NUnit 进行测试。

因此,如果有人因为我找不到我想要的东西而知道如何做,我将非常感激。

祝你有美好的一天!

2 个答案:

答案 0 :(得分:0)

使用NLog NDLC的非常简单的解决方案:

target name="logfile"
            xsi:type="File" 
            layout="${longdate}|${message}" 
            fileName="${basedir}\ATF\web\utils\reports\${shortdate}\${ndlc:topFrames=1:whenEmpty=UnknownTest}.txt"  />

然后您可以在NLog布局中执行此操作:

SAAS files
1) _variable.scss (All variables define here like $primary-color, $secondary-color etc.)
2) _common.scss
3) app.scss

另请参阅:https://github.com/NLog/NLog/wiki/Ndlc-Layout-Renderer

答案 1 :(得分:0)

在自定义NLog LayoutRenderer中使用NUnit TextContext:

SELECT
  SourceTable,
  <Any other columns you're interested in>
FROM
  vwJan;

将上面的代码编译为一个名为“ Custom.NLog.NUnit”的程序集,然后可以像这样加载它:

[LayoutRenderer("nunit-testname")]
public class NUnitTestNameLayoutRenderer : LayoutRenderer
{
    protected override void Append(StringBuilder builder, LogEventInfo logEvent)
    {
        builder.Append(NUnit.Framework.CurrentContext?.Test?.Name);
    }
}

另请参阅:https://github.com/nunit/docs/wiki/TestContext

另请参阅:https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer