2

我一直在閱讀一些關於驗收測試的內容,我想在我們的Web應用程序中添加一些內容。最近我們經歷了一系列的迴歸,我認爲這對我們有幫助。使用specflow爲Mvc4/WebApi網站編寫驗收測試

我們使用MVC4框架來傳遞視圖,但也使用knockout.js和webapi來驅動通過json數據生成html。這是一個JavaScript重型應用程序。

我一直在閱讀有關SpecFlow,我認爲它看起來不錯。我們的測試人員可以使用gerkin語法編寫他們的測試用例,然後讓程序員執行這些測試用例或其他東西。

我對此有幾個疑問,也許我的理解在這裏有點有限。也許這是一個總體上不好的問題,但任何有關這方面的建議將非常感激。

  1. 驗收測試是否對現場產品進行端到端測試?我讀過一些是的,有些沒有。
  2. 是否可以使用Specflow編寫測試來操作瀏覽器?
  3. 我應該測試端到端還是應該單元測試c#,javascript,並可能在webapi路由中引入一些集成測試?
  4. 我應該使用類似Ranorex還是Selenium進行端到端?

回答

4

SpecFlow是一個框架,允許開發人員和商業人士以可執行規範的形式定義系統的業務功能,可重複和一致地運行,並作爲「活文檔」系統來定義該系統應該在任何給定的點上運行。爲了有效地這樣做,規範需要從外部寫入,即打到應用程序的入口點,對於基於Web的應用程序來說,這些入口點可能是網站URL或某種服務端點,並驗證業務需求點。回答您的問題:

驗收測試是否對現場產品進行端到端測試?我讀過一些是的,有些沒有。 我應該測試端到端還是應該單元測試c#,javascript,並且可能會在webapi路由中引入一些集成測試?

驗收測試是其中很大一部分,但不應該孤立地進行。如果您正在使用一個集成測試,或者驗證外部系統正在按照預期進行通信,那麼您可能也需要集成測試以及真正打擊數據存儲。您當然應該單元測試您的各個組件,並根據需要嘲弄/剔除依賴關係,但這不會告訴您系統的不同層是否作爲一個整體相互依賴。這是SpecFlow真正閃耀的地方。我不一定會主張在您的現場進行驗收測試,但專門爲驗證驗收測試設置實時鏡像將是一個非常值得的嘗試,理想情況下這是您的CI構建過程的一部分。

是否可以使用Specflow編寫測試來操作瀏覽器? 我應該使用Ranorex還是Selenium來進行端到端的操作?

絕對有可能。您可以使用Selenium WebDriver或類似Watin(圍繞Selenium的.NET包裝)。 Watin在上次看到它時只在IE中工作。它與Firefox 3.6一起工作,但在發佈5時,FF核心發生了變化,停止了它的工作。可惜,因爲它是一個非常好的框架。 SpecFlow提供的鉤子可用於在每次測試運行期間啓動並拆除瀏覽器。下面是使用硒的webdriver一個簡單的例子:

[Binding] 
public class FeatureHooks 
{ 
    [BeforeFeature] 
    public static void StartWebDriver() 
    { 
     Runner.InitialiseHost(HostTypeOption.Firefox); 
    } 

    [AfterFeature] 
    public static void StopWebDriver() 
    { 
     Runner.StopHost(); 
    } 

} 

的亞軍是一個靜態類我作爲一個頁面框架我正在開發,以幫助驗收測試自動化的一部分使用。這裏的主機初始化部分:

public static class Runner 
{ 
    internal static IWebDriver Host { get; private set; } 

    public static void InitialiseHost(HostTypeOption hostType, int windowWidth = 1024, int windowHeight = 768) 
    { 
     switch (hostType) 
     { 
      case HostTypeOption.Firefox: 
       Host = new FirefoxDriver(); 
       break; 
      case HostTypeOption.InternetExplorer: 
       Host = new InternetExplorerDriver(); 
       break; 
      case HostTypeOption.Chrome: 
       Host = new ChromeDriver(); 
       break; 
      case HostTypeOption.Safari: 
       Host = new SafariDriver(); 
       break; 
      default: 
       throw new ArgumentOutOfRangeException("hostType"); 
     } 
     Host.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight); 
     Host.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3)); 
    } 

    public static void StopHost() 
    { 
     Host.Quit(); 
     Host = null; 
    } 
} 

如果你想使用IE或Chrome,你需要下載一個特定的驅動程序,並把它添加到您的驗收測試項目的bin目錄但Firefox的作​​品原樣。

+0

謝謝,很好的答案。我會讓它開放幾天,以鼓勵更多的答案,但否則我會標記你的。我認爲我期待specflow是一站式商店,而不是同時使用specflow和selenium。在這個項目中,我們已經有了單元測試和集成測試,但是我真的很喜歡一些端到端的測試,以確保JavaScript的行爲符合預期。再次感謝一個偉大的答案,並花時間幫助我! – Neil

+0

不用擔心。如果您在開始使用憤怒時有任何其他問題,請將它們跨越! – levelnis