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