Automatical Test in BDD

摘要:
行为驱动发展(BDD)。本文主要使用Google搜索测试的示例来说明如何从头开始构建自动化测试框架。这个测试用例来自WATIN官方网站上的HelloWorld。让我们将此测试转换为行为驱动开发模式下的测试。当然,这个例子远非框架。这只是一个介绍。首先,让我们看看WATIN测试:http://watin.org/[测试]publ

Behavior-driven development(行为驱动开发)这里我们简为BDD。这篇主要以Google搜索测试的例子来说明从零搭建出一个自动化测试的框架。本测试案例来 源于WATIN官网的Hello World,我们来把这个测试转化于行为驱动开发模式下的测试。当然这个例子远远谈不上框架,只是一个入门的介绍。

首先我们来看一下WATIN的测试:http://watin.org/

[Test]
publicvoidSearchForWatiNOnGoogle()
{
using(varbrowser=newIE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
 
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
 

安装SpecFlow

http://www.specflow.org/downloads/installer.aspx

本文安装的版本是1.9,它可以和Visual Studio 2012集成一起。安装好之后,启动VS, 新建项目或打开已有项目,添加新的文件,可以看到有…Feature, Steps…等文件。

1w4v3ks4.hh3[7]

之后我们就开始搭建BDD模式下的测试。VS New Project > Add one Class Library with project name GoogleTestDemo

加载需要的工具或程序集

加载WatiN.Core.dll, TechTalk.SpecFlow.dll, nunit.framework.dll

配置App.Config

在App.Config中我们需要设置TestRunner和ApartmentState

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
    <sectionGroup name="NUnit">
      <section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/>
    </sectionGroup>
  </configSections>
  <appSettings>
  </appSettings>
  <specFlow>
    <!-- For additional details on SpecFlow configuration options see https://github.com/techtalk/SpecFlow/wiki/Configuration -->
  </specFlow>
  <NUnit>
    <TestRunner>
      <!-- Valid values are STA,MTA. Others ignored. -->
      <add key="ApartmentState" value="STA"/>
    </TestRunner>
  </NUnit>
  <startup>
  <supportedRuntime version="v2.0.50727"/></startup>
</configuration>

SpecFlow默认的TestRunner是NUnit,如果需要使用MsTest或其他工具,需要App.Config中设置。这里需要设置ApartmentState为STA

添加Search.feature文件,写验收测试的Feature和Scenarios

Feature: Search

In order to find related information through network

I want to use Google search to find out information

Scenario: Search WatiN

Given I am on Google search page

When I search WatiN

Then I should be able to find WatiN

添加SpecFlow Step Definition文件

SearchSteps.cs, 删除类中的默认方法。我们可以回到Search.feature文件中,鼠标选中Given步骤,按F12,SpecFlow会帮我们默认生成一个方法来 绑定Given步骤,选择Yes,就可以把这个方法粘帖到SearchSteps.cs中去

[Given(@"I am on Google search page")]

public void GivenIAmOnGoogleSearchPage()

SpecFlow通过.NET的特性来把描述性的测试语言(Gherkin)Given I am on Google search page和C#的方法public void GivenIAmOnGoogleSearchPage()绑定起来。这也是BDD框架最核心的地方,BDD使开发和测试以及其他非技术人员更好地沟通和 合作,实现文档即测试。

创建WebBrowser的静态类

public class WebBrowser
{
    private const string BrowserKey = "browser";
    private static IE _ieInstance;

    public static IE Current
    {
        get
        {
            if (!FeatureContext.Current.ContainsKey(BrowserKey))
                FeatureContext.Current[BrowserKey] = _ieInstance;

            return (IE)FeatureContext.Current[BrowserKey];
        }
    }

    [BeforeFeature]
    public static void StartBrowser()
    {
        _ieInstance = new IE();
        _ieInstance.ClearCache();
        _ieInstance.ClearCookies();
    }

    [AfterFeature]
    public static void CloseAnyUsedBrowsers()
    {
        _ieInstance.Dispose();
        _ieInstance.Close();
    }
}

这里的WebBrowser使用Singleton的模式,能够更好实现在不同的步骤传递相同的浏览器对象,并且很好的屏蔽运行过程中其他浏览器的 影响。在上面的例子中我们还加入了 [BeforeFeature]和[AfterFeature]的方法,这十分类似我们应用NUnit框架中的[BeforeFixture]和 [TearDown]特性。他们用来实现每个测试之前初始化和完成后的清除工作。当然你也可以根据项目的情况加入更多的方法。

WATIN实现测试方法

类似Given,生成When,Then步骤对应的方法,后面需要在每一个方法中使用WATIN来写测试代码,比较快捷的是把我们刚才WATIN官网的例子Copy到Steps中相应的方法。

[Binding]
public class SearchSteps
{
    [Given(@"I am on Google search page")]
    public void GivenIAmOnGoogleSearchPage()
    {
        WebBrowser.Current.GoTo("www.google.com");
    }

    [When(@"I search WatiN")]
    public void WhenISearchWaiN()
    {
        WebBrowser.Current.TextField(Find.ById("gbqfq")).TypeText("WatiN");
        WebBrowser.Current.Button(Find.ById("gbqfb")).Click();
    }

    [Then(@"I should be able to find WatiN")]
    public void ThenIShouldBeAbleToFindWatiN()
    {
        Thread.Sleep(2000);
        Assert.IsTrue(WebBrowser.Current.Link(Find.ByUrl("http://watin.org")).Exists);
    }
}

编译成功后使用NUnit来运行测试

qxzwoopc.d05

免责声明:文章转载自《Automatical Test in BDD》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql 把备份数据文件还原后乱码处理方法Mac下的IDEA快捷键下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

谈jdbcTemplate与mybatis

为什么会产生 Hibernate Mybatis 这类的dao层框架 传统的jdbc 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的数据库时,由于关系型数据库的设计思想是数学思维,在持久化时,必须要对象拆分各个属性值,才可存入数据库;传统的jdbc 持久化时 对象持久化时 ,取出对象的一个...

testng参数化(提供测试数据)

testng提供测试数据的两个注释:@DataProvide和@Parameter   一、通过testng.xml中设置参数 (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.xml文件,然后文件格式按照testng的文档格式DTD来就可以了) testng.xml中的内容: <?xml version="1.0" encodi...

十个PHP开发者最容易犯的错误

文章引用链接:http://www.phpxs.com/post/5974/ PHP 语言让 WEB 端程序设计变得简单,这也是它能流行起来的原因。但也是因为它的简单,PHP 也慢慢发展成一个相对复杂的语言,层出不穷的框架,各种语言特性和版本差异都时常让搞的我们头大,不得不浪费大量时间去调试。这篇文章列出了十个最容易出错的地方,值得我们去注意。 易犯错误...

JavaScript单元测试工具-Jest

标注: 首先这并不是一篇完整的关于Jest的教程,只是个人在接触jest学习的一点随手笔记,大部分内容都是对官方文档的一些翻译。 ------------------------------------------------------------------------------------------------------------------...

Apache Solr配置

Solr配置 Solr的主要功能是全文检索,该功能分为两个过程:创建索引和对索引进行搜索; 在创建索引之前,需要重点关注两个配置文件:SOLR_HOME/collection1/conf/schema.xml(定义Document的结构类似定义DB的表结构) & solrconfig.xml(solr运行配置如请求如何被处理);在Solr创建索引...

oracle之二物化视图

物化视图 18.1、物化视图作用 1) 物化视图起源于数据仓库,早期的考虑是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免在基表上进行这些耗时的操作,从而快速的得到结果。 2) 物化视图和表一样可以直接进行查询。物化视图还用于复制、移动计算等方面。 alter table t add primary key (empn...