首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用specflow为Mvc4 4/WebApi网站编写验收测试

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

Stack Overflow用户
提问于 2013-02-07 09:11:38
回答 1查看 2K关注 0票数 2

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

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

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

我对此有几个问题,也许我对此的理解有点有限。也许这是一个糟糕的问题,但任何有关这方面的建议都会受到欢迎。

  1. 验收测试是对活产品进行端到端测试吗?我读过一些是的和一些不是的。
  2. 是否有可能用光谱流编写操作浏览器的测试?
  3. 我应该测试端到端,还是应该只对c#、javascript进行单元测试,或者在webapi路由上添加一些集成测试?
  4. 我应该使用像雷诺雷这样的东西作为端到端吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的快速示例:

代码语言:javascript
运行
复制
[Binding]
public class FeatureHooks
{
    [BeforeFeature]
    public static void StartWebDriver()
    {
        Runner.InitialiseHost(HostTypeOption.Firefox);
    }

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

}

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

代码语言:javascript
运行
复制
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可以正常工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14747368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档