如何将日志添加到 Specflow C# BDD 测试的范围报告?

问题描述 投票:0回答:1

从步骤定义中,我无法将日志添加到范围报告

我在报告中只看到给定何时描述。

  • Specflow 版本 - 3.9.74
  • C# - 7.0
  • NUnit3

Hooks.cs 文件:

[Binding]
public class GlobalHooks
{        
[ThreadStatic]
public static ExtentReports? extent;

[ThreadStatic]
public static ExtentTest? feature;

[ThreadStatic]
public static ExtentTest? scenario;

[ThreadStatic]
public static ExtentTest? step;

[BeforeTestRun]
public static async Task BeforeTestRun()
{
    string resPath = FileUtil.getFullFolderPath("Test Results");
    var spark = new ExtentSparkReporter(resPath + "/extent.html");
    spark.Config.ReportName = "Test Report";
    spark.Config.DocumentTitle = "Test Automation Report";
    spark.Config.Theme = Theme.Standard;

    extent = new ExtentReports();
    extent.AttachReporter(spark);
}

[BeforeFeature]
public static async Task BeforeFeature(FeatureContext featureContext)
{
    feature = extent?.CreateTest<Feature>(featureContext.FeatureInfo.Title);
}

[BeforeScenario]
public static async Task BeforeScenario(FeatureContext featureContext, ScenarioContext scenarioContext)
{
    scenario = feature?.CreateNode<Scenario>(scenarioContext.ScenarioInfo.Title);
}

TestFeatureStepDefinitions.cs

[Binding]
public class TestFeatureStepDefinitions : GlobalHooks
{
    [Given(@"some step (.*)")]
    public async Task GivenSomeStep()
    {
      step?.Log(Status.Info,"This step I want to log in extent report");
    }
}

c# bdd specflow extentreports extent
1个回答
0
投票

SpecFlow Output API 应该可以满足您的需求。

[Binding]
public class TestFeatureStepDefinitions : GlobalHooks
{
    private readonly ISpecFlowOutputHelper output;

    TestFeatureStepDefinitions(ISpecFlowOutputHelper output)
    {
        this.output = output;
    }

    [Given(@"some step (.*)")]
    public async Task GivenSomeStep()
    {
        output.WriteLine("This step I want to log in extent report");
    }
}

您可以使用自己的扩展方法来增强此 API 以指示日志级别,但您需要自己编写该实现:

public static class SpecFlowOutputExtensions
{
    public static void WriteLine(this ISpecFlowOutputHelper output, Status status, string text)
    {
        // your own implementation here
        output.WriteLine($"{DateTime.Now} {status}: {text}");
    }
}

然后在您的步骤定义中:

output.WriteLine(Status.Info, "This step I want to log in extent report");
© www.soinside.com 2019 - 2024. All rights reserved.