0

我使用 specflownunitexecutionreport命令生成我的测试的 html 报告,并将其复制到一个文件夹中,在该文件夹中我有时间戳、报告、生成的 html 和成功或失败时截取的屏幕截图(全部以编程方式完成)。但是该文件夹的html报告没有当时的特征文件文本。我想知道如何,对于每个测试,我可以在运行时获取功能文件文本,以便我可以将其复制到该文件夹​​。

4

2 回答 2

0

这不是一个真正的答案,但我需要给出一个格式化的回复,所以稍后需要编辑

你真的需要通过重写轮子来实现这一点,或者至少你真的需要重写测试运行程序吗?

例如,以下输出来自TeamCity在 specflow 生成的测试上运行NUnit 。

[20:29:38][MyCode.Tests.dll] MyCode.Tests.MyFeature.Reload
[20:29:38][MyCode.Tests.MyFeature.Reload] Given I have a config reloader
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenIHaveAConfigReloader() (0.1s)
[20:29:38][MyCode.Tests.MyFeature.Reload] And a config A that will unload
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenAConfig("A") (0.0s)
[20:29:38][MyCode.Tests.MyFeature.Reload] And a config B that wont unload
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.GivenAConfigThatWontUnload("B") (0.0s)
[20:29:38][MyCode.Tests.MyFeature.Reload] When I reload my configs
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.WhenIReloadMyConfigs() (0.3s)
[20:29:38][MyCode.Tests.MyFeature.Reload] Then I should have 2 instances
[20:29:38][MyCode.Tests.MyFeature.Reload] -> done: ConfigReloadTests.ThenIShouldHaveInstances(2) (0.1s)

现在这是一个开箱即用的标准结果,设置可能需要十五分钟。它完全支持,并且免费提供。还是您需要一些我在您的问题中遗漏的自定义内容?

于 2012-12-10T14:44:21.607 回答
0

如果您可以保证您使用 NUnit 来运行 Specflow 测试,那么您可以编写一个NUnitAddin,它可以在运行时获取 Specflow 输出。我以前为个人项目做过这个。

你注册一个班级

[NUnitAddin(
    Name = "RedGreenRefactor.DatCapture.NUnitAddIn", 
    Description = "Captures both test data and test output so that SpecFlow steps can be correctly consolidated by RedGreenRefactor",
    Type=ExtensionType.Core)]
public class Addin : IAddin
{       
    public bool Install(IExtensionHost host)
    {
       IExtensionPoint listeners = host.GetExtensionPoint("EventListeners");
        if ( listeners == null )
            return false;

        listeners.Install( new NUnitCapture() );
        return true;
    }       
}

你的插件的核心看起来像这样

public class NUnitCapture : NUnit.Core.EventListener 
{
...
public void TestOutput(NUnit.Core.TestOutput testOutput)
{
    var text = testOutput.Text.Trim();
    Debug.WriteLine(String.Format("[{0}]", text));
    if (text.StartsWith("Given")
        || text.StartsWith("When")
        || text.StartsWith("Then")
        || text.StartsWith("And"))
        {
            CreateStep(testOutput);
            return;
        }

        if (text.StartsWith("-> done"))
        {
            SetStepToSuccess();
            return;
        }

        if (text.StartsWith("-> error"))
        {
            SetStepToFail();
            return;
        }

        if (text.StartsWith("-> No matching step definition found for the step."))
        {
            SetStepToPending();
            return;
        }
    }
于 2012-12-10T15:45:00.127 回答