使用specflow为Mvc4 / WebApi网站编写验收测试

时间:2013-02-07 09:11:39

标签: asp.net-mvc-4 automated-tests specflow acceptance-testing web-testing

我一直在阅读有关验收测试的内容,我想在我们的网络应用程序中添加一些内容。我们最近经历了一些回归,我认为这会对我们有所帮助。

我们正在使用MVC4框架来提供视图,但也使用knockout.js和webapi来驱动通过json数据生成html。这是一个非常重要的javascript应用程序。

我一直在阅读SpecFlow,我觉得它看起来不错。我们的测试人员可以用gerkin语法编写他们的测试用例,然后让程序员实现它们或类似的东西。

我对此有几个问题,也许我的理解在这里有点限制。也许这一般是一个不好的问题,但对此的任何建议都会非常感激。

  1. 验收测试是否对实时产品进行端到端测试?我已经阅读了一些肯定而有些没有。
  2. 是否可以使用操作浏览器的Specflow编写测试?
  3. 我应该进行端到端测试,还是应该单独测试c#,javascript并在webapi路由上进行一些集成测试?
  4. 我应该使用RanorexSelenium等端到端的内容吗?

1 个答案:

答案 0 :(得分: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提供了一些钩子,您可以在每次测试运行期间使用这些钩子来启动和拆除浏览器。以下是使用Selenium WebDriver的简单示例:

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

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

}

Runner是一个静态类,我用它作为页面框架的一部分,我正在开发以帮助验证测试自动化。这是主机初始化部分:

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,则需要下载特定的驱动程序并将其添加到Acceptance Test项目的bin目录中,但Firefox可以按原样运行。