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的作品原樣。
謝謝,很好的答案。我會讓它開放幾天,以鼓勵更多的答案,但否則我會標記你的。我認爲我期待specflow是一站式商店,而不是同時使用specflow和selenium。在這個項目中,我們已經有了單元測試和集成測試,但是我真的很喜歡一些端到端的測試,以確保JavaScript的行爲符合預期。再次感謝一個偉大的答案,並花時間幫助我! – Neil
不用擔心。如果您在開始使用憤怒時有任何其他問題,請將它們跨越! – levelnis