我读过一些关于验收测试的文章,我想在我们的web应用程序中添加一些。我们最近经历了多次倒退,我认为这会对我们有所帮助。
我们使用MVC4框架提供视图,但也使用knockout.js和webapi通过json数据驱动html的生成。这是一个相当重的javascript应用程序。
我读了一些关于SpecFlow的文章,我觉得它看起来不错。我们的测试人员可以用gerkin语法编写他们的测试用例,然后让程序员来实现它们或类似的东西。
我对此有几个问题,也许我对此的理解有点有限。也许这是一个糟糕的问题,但任何有关这方面的建议都会受到欢迎。
发布于 2013-02-07 09:37:27
SpecFlow是一个框架,允许开发人员和业务人员协作,以可执行规范的形式定义系统的业务功能,这些规范可以重复和一致地运行,并作为一个“活文档”系统,定义系统在任何给定点上的行为方式。为此,需要从外部编写规范,即访问应用程序的入口点,对于基于web的应用程序来说,这些入口点要么是网站URL,要么是某种服务端点,并验证该端点的业务需求。回答你的问题:
验收测试是对活产品进行端到端测试吗?我读过一些是的和一些不是的。我应该测试端到端,还是应该只对c#、javascript进行单元测试,或者在webapi路由上添加一些集成测试?
验收测试是其中的很大一部分,但不应该孤立地进行。您也可能需要集成测试,如果您使用的是数据存储,或者验证外部系统是否按照预期进行通信,那么这些测试就会实际命中您的数据存储。当然,您应该对各个组件进行单元测试,并在适当的情况下模拟/消除依赖关系,但这并不能告诉您系统的不同层是否作为一个整体相互依赖地运行。这就是SpecFlow真正闪耀的地方。我不一定主张在您的现场站点上运行验收测试,但是专门为验证验收测试建立一个镜像将是一项非常有价值的工作,理想的是作为您的CI构建过程的一部分。
是否有可能用Specflow编写操作浏览器的测试?我应该使用像Ranorex或Selenium之类的东西来进行端到端吗?
当然这是可能的。您可以使用硒WebDriver或类似于瓦廷 (硒的.NET包装器)之类的东西。我最后一次看它的时候,瓦丁只是在IE工作。它与Firefox3.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可以正常工作。
https://stackoverflow.com/questions/14747368
复制相似问题