2012-12-10 38 views
0

我使用specflow nunitexecutionreport命令生成我的測試的html報告,並將其複製到文件夾中,其中包含報告,生成的html和成功或失敗時所採用的屏幕截圖的時間戳(全部以編程方式完成)。但該文件夾的HTML報告沒有該時間的功能文件文本。我想知道如何,對於每個測試我可以在運行時獲取功能文件文本,所以我可以將它複製到該文件夾​​。specflow以編程方式獲取方案描述

+0

@AlSki我不想給出我所有的功能文件。我想在我的result.html女巫我正在手工建設的C#,原始功能文本 –

+1

好吧,你能解釋你想做什麼?不是技術問題,但你想要達到什麼目標? – AlSki

+0

此外,在生成html和* current *版本的鏈接文件時記錄的內容可能會斷開。通過嵌入內容,您可以避免斷開連接。 – AlSki

回答

0

IF您可以保證您使用的是NUnit來運行Specflow測試,然後您可以編寫一個NUnitAddin,它可以在運行時獲取Specflow輸出。我以前爲personal project做過這個。

您有一個類

[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; 
     } 
    } 
+0

我正在使用nunit,我會嘗試這個。 謝謝,我會讓你知道的。 –

+0

非常感謝@AlSky –

0

這是不是一個真正的答案,但我需要給一個格式的響應所以這將需要編輯後

你真的需要這種通過改寫輪,或者至少你真的需要重寫測試運行器進程?

例如,下面的輸出來自TeamCity,其運行NUnit超過了specflow生成的測試。

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

現在這是一個標準的開箱即用結果,大概需要十五分鐘才能完成。它完全支持,並免費提供。 或者你需要自定義的東西,我從你的問題缺少?

+0

我正在處理的項目需要全部定製 –

+0

使事情變得更加複雜 –