如何利用Spec Flow编写自动化验收测试

对验收测试、Gherkin及Spec Flow的介绍

验收测试或功能测试是验证系统是否满足需求的一种测试。这些测试作为黑盒测试的一种,与其内部具体执行无关。验收测试只是用来验证系统是否符合某一需求。

现在我们一起看下面这个关于网页登录功能的需求:

Feature: Login
  In order to access my account
  As a user of the website
  I want to log into the website

Scenario: Logging in with valid credentials
  Given I am at the login page
  When I fill in the following form
  | field | value |
  | Username | xtrumanx |
  | Password | P@55w0Rd |
  And I click the login button
  Then I should be at the home page

其可读性非常强,是吧?以上的详细需求是通过Gherkin语言来描述的。Gherkin是一种领域特定语言,它允许我们在不解释具体执行细节的情况下,详细描述应用应该如何执行。以上详细需求的大部分内容是由自由文字组成;只有几个特定的Gherkin关键字:Feature、Scenario、Given、When、And和Then,其他的都是自由文字,并且主要记录了功能特性是如何被使用的。

Gherkin是一种基于行的编程语言,场景中的每一行(Line)就是一个步骤(Step)。“Logging in with valid credentials”场景中的第一个步骤是“Given I am at the login page”。该步骤需要一个具体步骤定义,这样我们的测试执行者(test runner)才能知道如何去完成该步骤。Spec Flow中的步骤定义其实就是一个带有变量的方法,而该变量包含有该步骤的具体文本。所有步骤定义方法都需包含于一个含有Binding属性的类中。

[Binding]
class LoginStepDefinitions
{
  [Given("I am at the login page")]
  public void GivenIAmAtTheLoginPage()
  {
    // TODO
  }
}

上面的类和方法名都是随意的。真正重要的是应用到类和方法中的变量。如果没有它们,Spec Flow就无法确认步骤定义方法和具体步骤的绑定关系。

现在就剩下步骤定义执行了。而这时候就该WatiN和Nunit上场了。

WatiN是一个基于浏览器的自动化工具。我们将利用它来打开一个IE实例,浏览URL,填充表格,点击按钮或链接等。与此同时,我们将利用NUnit来断言我们的期望。尽管如此,WatiN和NUnit并非是必需的。也可以使用Selenium进行浏览器自动化;而事实上,任何单元测试框架都可用来断言,甚至可以使用Windows自带的应用自动化库,比如:White,然后为相应的Windows Forms或WPF应用编写自动化验收测试。

现在我们就来尝试为一个真实应用创建实际的验收测试。针对本文,我们将使用该实例程序。读者可以从这里的repository获取一份。该repository还包含完整的验收测试工程,但是我还是建议通过执行本文剩下的内容来创建自己的验收测试代码。

先决条件

Spec Flow为所有支持的第三方测试运行器授权以运行真正繁重的验收测试。正如前面所提的,我们将使用NUnit执行测试和WatiN自动化浏览器。以下就是如何使用WatiN自动化浏览器为WatiN执行谷歌查询的例子(来自WaitN网站)。

[Test]
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

上面的测试创建了一个新IE实例,然后将Google的URL传给构造器,然后由构造器让浏览器跳转到Google页面。随后寻找命名为“q”的文本框。该文本框就是你要输入具体查询内容的地方。找到该文本框后,输入“WatiN”。紧接着,查找命名为“btnG”的按钮,然后点击它。最后,由一个断言来确定页面上存在有“WatiN”(可以是页面上任何地方)。

以上的代码为我们快速展示了通过WatiN自动化常规任务是多么的简单,这些任务可以是在浏览器上执行例如填写文本框、点击按钮等动作。

接下来,就可以在Visual Studio中为你的验收测试创建新的类库工程。当你下载完NUnit和WatiN后,你将需要添加必需的DLL到你的验收测试工程中。从你的NUnit下载中添加一个nunit.framework.dll引用到你的验收测试工程。对于WatiN,你则需要添加两个DLL引用到你的验收测试工程:Interop.SHDocVw.dll和WatiN.Core.dll。

值得一提的是,你可以通过NuGet获取NUnit和WatiN这两个项目。这两个都很容易在NuGet中找到,并能自动添加到你的工程中。如果你已经在你的项目中使用NuGe了,大可以通过它下载这两个项目。

从网站上获取一份Spec Flow,然后安装到你的系统中。跟NUnit和WatiN不同,你需要在系统中安装Spec Flow,而不是简单的拷贝Dll文件。Spec Flow自带有某些工具,每次往项目中添加一个特性文件,它都会创建相应的隐藏代码文件。另外,在你编辑特性文件时,它还带有一些语法高亮和其他调整。

成功安装Spec Flow后,检查安装目录(默认为Program Files)。里面有一堆DLL文件,但是你只需要添加该引用到你的工程中:TechTalk.SpecFlow.dll。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试
, 自动化
, 构造器
, 工程
, 步骤
一个
bgp flowspec、bgp flowspec技术、flowspec、bgp flowspec功能介绍、flowspec技术,以便于您获取更多的相关知识。

时间: 2024-09-17 16:24:28

如何利用Spec Flow编写自动化验收测试的相关文章

RFS的web自动化验收测试—介绍篇

引言:什么是RFS--RobotFramework+selenium2library,本系列主要介绍web自动化验收测试方面. == RobotFramework的一些特性== 易于使用,采用表格式语法,统一测试用例格式: 重用性好,可以利用现有关键字来组合新关键字: 支持变量: 支持创建基于数据驱动的测试用例. 结果报告和日志采用HTML格式,易于阅读: 提供标签以分类和选择将被执行的测试用例: 平台.应用无关: 功能全面,支持WEB测试(Selenium).Java GUI 测试,启动线程.

《Cucumber:行为驱动开发指南》——第1章 为何使用Cucumber 1.1自动化验收测试

第1章 为何使用Cucumber 软件始于一个想法. 我们假设这是一个优秀的想法--一个能让世界变得更加美好,或者至少能让一些人赚到一些钱的想法.而软件开发人员所面临的挑战就是要落实这个想法,使其能真正产生效益. 最初的想法是完美.漂亮的.如果拥有该想法的人碰巧是一个天才软件开发人员,那事情就非常简单了:他无须向任何人解释就能直接把想法实现成可工作的软件.然而更常见的情况是,拥有最初想法的人并不具备使其想法变为现实所必需的编程技能,因此这个想法必须从他的脑中传递到另外一些人的脑中.也就是说,相关

利用Python绑定编写OpenStack自动脚本

OpenStack 是一个越来越流行的.用于部署基础架构即服务 (IaaS) 云的开源解决方案.OpenStack 附带了一个仪表板 Web 应用程序,非常适合执行 手动任务,比如启动单个虚拟机 (VM) 实例, 但是,如果希望自动化基于云的任务,则需要编写可操作 OpenStack 的脚本. 许多用户直接为 OpenStack 具象状态传输 (REST) 应用编程接口 (API) 编写自动化脚本,或者编写调用命令行工具(比如 keystone 或 nova)的 shell 脚本.但 Pytho

利用Burp“宏”解决自动化 web fuzzer的登录问题

本文讲的是利用Burp"宏"解决自动化 web fuzzer的登录问题,本博文的主要内容是关于如何利用Burp Suite宏,帮助我们自动化完成需要手动输入payload的模糊测试工作.尽管许多安全测试人员可能会知道,这篇文章只是为那些尚未利用Burp宏的自动化功能的人所写的. 在我的渗透测试职业生涯中,在Web应用程序中执行参数和页面表单字段的模糊测试处理时,我遇到了一些与会话处理有关的挑战和困难. 在多种情况中,当你进行安全模糊测试时,web应用程序终止会话的行为,可能是因为一些安

利用c语言编写图形。。。。。。

问题描述 利用c语言编写图形...... 我想利用c语言编写图形,我用的是vc++编译器,不知道用什么头文件.请各位长辈指教. 解决方案 最简单的是新建一个MFC SDI类型的应用程序,在OnDraw中绘图.你可以用GDI库,无需额外的头文件,直接画图就可以了. 比如 pDC->DrawLine()画线 pDC->TextOut()写字 pDC->Ellipse()画圆/椭圆. 解决方案二: 对话框工程,vc 绘图http://blog.csdn.net/luck_good/articl

大牛教你利用AI驱动广告自动化投放

广告投放系统很多,大的有Google,百度,阿里等的广告投放系统,小型的广告投放系统也屡见不鲜,深挖其背后的运作机理,不外乎利用人工智能算法,结合用户信息.网页信息,上下文信息.广告信息以及其他对广告有影响的信息数字化.向量化进行广告投放.不过,广告投放系统本身也在发生细微的变化,如何利用AI实现广告投放的自动化与精准化,本次讲堂我们请来徐江博士为我们传授实战经验. 嘉宾介绍 徐江 清谷科技创始人 本科毕业于清华大学自动化专业,之后获得美国西北大学人工智能与机器学习方向博士. 2014年加盟My

利用python实现批量自动化运维脚本案例

本文为通过密码或密钥实现python批量自动化运维脚本案例分享 #!/usr/bin/env python # this script comes from beijing oldboy trainning. # e_mail:70271111@qq.com # function: remote multi exec cmd by ssh. # version:1.1 ################################################ # oldboy trainn

详解如何利用iOS API编写简单微博客户端

要编写社交网络客户端程序,可以大体上分为4个主要的步骤 下面我们按照这个流程,介绍一下: 1.引入Accounts和Social框架 工程中需要引入Accounts和Social框架,Accounts框架中有进行用户账户认证所需类,Social框架中SLRequest类是我们所需要的.添加具体步骤是选择工程中的TARGETS→WeiBo→Build Phases→Link Binary With Libraries,选择右下角的"+"按钮,打开框架和库选择对话框. 分别选择Social

利用iOS API编写简单微博客户端全过程

要编写社交网络客户端程序,可以大体上分为4个主要的步骤 下面我们按照这个流程,介绍一下: 1.引入Accounts和Social框架 工程中需要引入Accounts和Social框架,Accounts框架中有进行用户账户认证所需类,Social框架中SLRequest类是我们所需要的.添加具体步骤是选择工程中的TARGETS→WeiBo→Build Phases→Link Binary With Libraries,选择右下角的"+"按钮,打开框架和库选择对话框. 分别选择Social