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

Asp.net mvc 4 使用specflow为Mvc4/WebApi网站编写验收测试,asp.net-mvc-4,automated-tests,specflow,acceptance-testing,web-testing,Asp.net Mvc 4,Automated Tests,Specflow,Acceptance Testing,Web Testing,我已经阅读了一些关于验收测试的内容,我想在我们的web应用程序中添加一些内容。我们最近经历了一些倒退,我认为这会对我们有所帮助 我们使用MVC4框架来交付视图,但也使用knockout.js和webapi通过json数据驱动html的生成。这是一个相当重javascript的应用程序 我读了一些关于它的书,我觉得它看起来不错。我们的测试人员可以用gerkin语法编写他们的测试用例,然后让程序员按照这些思路来实现它们 关于这一点,我有几个问题,也许我的理解有点有限。一般来说,这也许是个糟糕的问题,

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

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

我读了一些关于它的书,我觉得它看起来不错。我们的测试人员可以用gerkin语法编写他们的测试用例,然后让程序员按照这些思路来实现它们

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

  • 验收测试是现场产品的端到端测试吗?我在这方面读到了一些是和一些不是
  • 是否有可能编写操纵浏览器的测试
  • 我应该进行端到端的测试,还是仅仅对c#、javascript进行单元测试,或者在webapi路由上进行一些集成测试
  • 我应该使用类似或用于端到端的东西吗

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

    验收测试是现场产品的端到端测试吗?我在这方面读到了一些是和一些不是。 我应该进行端到端的测试,还是仅仅对c#、javascript进行单元测试,或者在webapi路由上进行一些集成测试

    验收测试是其中的一大部分,但不应孤立进行。如果您使用的是集成测试,或者验证外部系统是否按预期进行通信,那么您可能还需要实际访问数据存储的集成测试。您当然应该对单个组件进行单元测试,并根据需要模拟/剔除依赖项,但这不会告诉您系统的不同层是否作为一个整体相互依赖地运行。这就是SpecFlow真正闪耀的地方。我不一定主张在您的live站点上运行验收测试,但是专门为验证验收测试设置live镜像将是一项非常有价值的工作,理想情况下作为CI构建过程的一部分

    是否可以使用Specflow编写操纵浏览器的测试? 我应该使用Ranorex或Selenium之类的东西来实现端到端的连接吗

    绝对有可能。您可以使用或类似于(围绕Selenium的.NET包装器)。Watin只在我最后一次看它的时候工作过。它与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,您需要下载一个特定的驱动程序,并将其添加到验收测试项目的bin目录中,但Firefox仍能正常工作。

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

    验收测试是现场产品的端到端测试吗?我在这方面读到了一些是和一些不是。 我应该进行端到端的测试,还是仅仅对c#、javascript进行单元测试,或者在webapi路由上进行一些集成测试

    验收测试是其中的一大部分,但不应孤立进行。如果您使用的是集成测试,或者验证外部系统是否按预期进行通信,那么您可能还需要实际访问数据存储的集成测试。您当然应该对单个组件进行单元测试,并根据需要模拟/剔除依赖项,但这不会告诉您系统的不同层是否作为一个整体相互依赖地运行。这就是SpecFlow真正闪耀的地方。我不一定主张在您的live站点上运行验收测试,但是专门为验证验收测试设置live镜像将是一项非常有价值的工作,理想情况下作为CI构建过程的一部分

    是否可以使用Specflow编写操纵浏览器的测试? 我应该使用Ranorex或Selenium之类的东西来实现端到端的连接吗

    绝对有可能。您可以使用或类似于(围绕Selenium的.NET包装器)。Watin只在我最后一次看它的时候工作过。它与Firefox 3.6配合使用,但当他们发布5时,FF内核发生了变化,使其无法工作。遗憾的是,这是一个非常好的框架。SpecFlow提供了可用于spi的挂钩