如何让 SpecFlow.NUnit 抑制控制台输出中的传递场景?

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

当我使用

dotnet test
运行 SpecFlow 套件时,我不想看到传递场景中的所有步骤输出。我有近 200 个场景——我只想看看哪里出了问题!

一直运行良好,直到我将这个已有 4 年历史的项目中的所有测试核心升级到最新(非预发布)版本。以前,如果一切都过去了,我只会看到摘要行。如果出现问题,我只会看到损坏的测试的步骤。我希望恢复这种行为!

这些是我当前使用的 nugets:

    <ItemGroup>
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
        <PackageReference Include="NUnit" Version="4.1.0" />
        <PackageReference Include="NUnit.ConsoleRunner" Version="3.17.0" />
        <PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
        <PackageReference Include="SpecFlow" Version="3.9.74" />
        <PackageReference Include="SpecFlow.NUnit" Version="3.9.74" />
        <PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.9.74" />
    </ItemGroup>

NUnit 注意: 如果我将所有 SpecFlow 项目降级到以前的版本 (3.3.57),我仍然会遇到问题。 看起来 NUnit 升级实际上是引入了输出更改。

我尝试过的事情:

1。

dotnet test

的“详细程度”参数

dotnet test --filter TestCategory!=wip koala.IntegrationTests/ -l "console;verbosity=quiet"

默认值为“最小”,它会打印我不想要的输出。这是第二安静的环境。

最安静的设置是

quiet
,但这也隐藏了所有失败输出,所以这不好。

2。添加到specflow.json文件

Per this doc,我尝试调整 SpecFlow 项目目录中的 specflow.json 文件。我添加了设置“traceSuccessfulSteps”,所以现在文件看起来像:

{
  "bindingCulture": { "language" :"en-us" },
  "language": { "feature": "en-us" },
  "runtime": { "missingOrPendingStepsOutcome": "Error" },
  "trace": { "traceSuccessfulSteps": false },
  "plugins": []
}

运气不好,我仍然看到传递的输出。我没有看到任何其他可以应用的配置设置。

3.创建了一个 .runsettings 文件

根据此文档,我在 Specflow csproj 旁边创建了一个 .runsettings 文件。

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration/>
  <TestRunParameters/>
  <NUnit>
    <InternalTraceLevel>Error</InternalTraceLevel>
    <Verbosity>-1</Verbosity>
  </NUnit>
</RunSettings>

我发现输出没有差异。

如何将通过场景步骤保留在我的
dotnet test
控制台输出之外?

nunit specflow nunit-console
1个回答
0
投票

无论如何我都会尝试一下。我知道在 MS Test 中,每个测试都会在命令行上显示“通过”或“失败”。假设 NUnit 执行类似的操作,将测试输出通过管道传输到 PowerShell 中的 Select-String commandlet:

dotnet test --filter TestCategory!=wip koala.IntegrationTests/ -l "console;verbosity=quiet" | Select-String 'Failed'

如果您不熟悉 PowerShell,一般模式是:

dotnet test arguments | Select-String 'foo'

arguments
替换为通常传递给
dotnet test
的内容。它应该过滤掉所有测试输出,除了与传递给
Select-String
的模式匹配的行。


几年前,我在开发 Ruby on Rails 应用程序时一直在做这种事情。我们有一个 Rake 任务来运行类似于

dotnet test
的测试。它显示了一系列
******FFF*FFF*FFF***
字符,其中
*
表示测试通过,
F
表示测试失败。只需在 Bash 中快速
rake test | grep 'F'
就可以减少视觉跟踪的输出。

可组合命令是我在 Linux 和 MacOS 上一直使用的强大工具。我经常在 Windows 上忘记这一点,但 PowerShell 也有一些非常强大的管道命令。

© www.soinside.com 2019 - 2024. All rights reserved.