0

specflownunitexecutionreportコマンドを使用してテストの html レポートを生成し、レポート、生成された html、および成功または失敗時に取得したスクリーンショット (すべてプログラムで実行) のタイムスタンプがあるフォルダーにコピーします。しかし、フォルダーの html レポートには、その時の機能ファイルのテキストがありません。各テストについて、実行時に機能ファイルのテキストを取得して、そのフォルダーにコピーできるようにする方法を知りたいです。

4

2 に答える 2

0

これは実際には答えではありませんが、フォーマットされた応答を返す必要があるため、後で編集する必要があります

ホイールを書き直すことによってこれを本当に行う必要がありますか、それとも少なくともテストランナープロセスを書き直す必要がありますか?

たとえば、次の出力は、 specflowで生成されたテストでNUnitを実行しているTeamCityからのものです。

[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)

これは標準の結果であり、セットアップにはおそらく15分かかります。完全にサポートされており、無料で利用できます。それとも、私があなたの質問に欠けている何か習慣が必要ですか?

于 2012-12-10T14:44:21.607 に答える
0

NUnitを使用してSpecflowテストを実行していることを保証できる場合は、実行時にSpecflow出力を取得できるNUnitAddinを作成できます。私は以前、個人的なプロジェクトのためにこれを行いました。

1つのクラスに登録します

[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 に答える