asp.net mvc 4-使用specflow为Mvc4/WebApi网站编写验收测试



我读了一些关于验收测试的文章,我想在我们的web应用程序中添加一些。我们最近经历了一些倒退,我认为这将对我们有所帮助

我们使用MVC4框架来传递视图,但也使用knockout.js和webapi来通过json数据驱动html的生成。这是一个相当重javascript的应用程序。

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

我对此有一些问题,也许我的理解在这里有点有限。也许总的来说,这是一个糟糕的问题,但任何关于这方面的建议都将不胜感激。

  1. 验收测试是对带电产品的端到端测试吗?我读过一些关于这个的肯定和否定
  2. 是否可以使用Specflow编写操作浏览器的测试
  3. 我应该进行端到端测试,还是只对c#、javascript进行单元测试,并可能对webapi路由进行一些集成测试
  4. 我应该使用像Ranorex或Selenium这样的东西进行端到端吗

SpecFlow是一个框架,允许开发人员和业务人员以可重复一致运行的可执行规范的形式合作定义系统的业务功能,并作为一个"活文档"系统,定义系统在任何给定点的行为。为了有效地做到这一点,规范需要从外到内编写,即找到应用程序的入口点,对于基于web的应用程序,入口点可以是网站URL或某种服务端点,并验证该终点的业务需求。回答您的问题:

验收测试是对带电产品的端到端测试吗?我读过一些关于这个的肯定和否定。我应该进行端到端测试,还是只对c#、javascript进行单元测试,并可能对webapi路由进行一些集成测试?

验收测试是其中的一个重要部分,但不应该孤立地进行。如果您正在使用集成测试,或者验证外部系统是否按预期进行通信,那么您很可能也需要实际访问数据存储的集成测试。当然,您应该对单个组件进行单元测试,并在适当的时候模拟/消除依赖关系,但这不会告诉您系统的不同层是否作为一个整体相互依赖地运行。这就是SpecFlow真正闪光的地方。我不一定主张在您的实时站点上运行验收测试,但专门为验证验收测试而设置实时镜像将是一项非常值得的努力,最好将其作为CI构建过程的一部分。

是否可以使用Specflow编写操作浏览器的测试?我应该使用像Ranorex或Selenium这样的东西进行端到端吗?

绝对有可能。您可以使用SeleniumWebDriver或类似Watin(一个围绕Selenium的.NET包装器)的东西。我最后一次看Watin时,它只在IE中工作。它在Firefox 3.6中工作,但当他们发布5时,FF核心的变化使它停止了工作。很遗憾,因为这是一个非常好的框架。SpecFlow提供了挂钩,您可以在每次测试运行期间使用这些挂钩来启动和关闭浏览器。下面是一个使用SeleniumWebDriver:的快速示例

[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,你需要下载一个特定的驱动程序,并将其添加到验收测试项目的bin目录中,但Firefox可以正常工作。

最新更新