English 中文(简体)
SpecFlow - Quick Guide
  • 时间:2024-03-19 20:46:33

SpecFlow - Quick Guide


Previous Page Next Page  

SpecFlow - Introduction

SpecFlow是建立在BDD模式基础上的开放源测试自动化工具。 大部分用于为网络内建造的项目进行自动化测试。 该辅导员将提供有关SpecFlow及其特征的知识。

特殊标准主要是建立、监测和管理人类可读的接受测试案例。 它的创建方式是Gherkin,这是一个通俗的语言。 SpecFlow有Gherkin parser,可使用70多种语言。 我们可以通过SpecFlow的内在设计测试操作器和SpecFlow+ Ronner进行测试。

Components

频谱的主要任务是对盖尔金的特质文档进行约束。 SpecFlow+Runer是试验操作员,具有执行能力和编写报告的能力。 这也没有费用,我们需要为此建立一个小盘账户。

SpecFlow+ LivingDoc是一组工具,以可读格式保存盖尔金特征档案。 这一点可以与工作队的利益攸关方分享,他们没有像演播室这样的工具。

SpecFlow+ LivingDoc 发电机是SpecFlow的一组原始材料和工具,用于制作Gherkin特征文档的文件。 这并不要求设立账户,而且可以很容易地与其他账户分享。

可在上看到产出。 http://www.un.org/Depts/DGACM/index_french.htm 任何用户如果能够进入系统,可在需要时看到规格。 它是免费的,但需要一个小账户。

Editing Features in Visual Studio Extension

此外,SpecFlow有Visualroom Expansion,提供下文所述的额外功能——

Intelpsense (auto-completion) for Steps and Keywords

为方便使用SpecFlow,Intelpsense提供了我们为限制建议清单而发现的特征。 《英特尔利斯法》也可用于盖尔金文档、关键词和密码档案。

在视觉演播室,点击Edit,然后选择英特尔利斯,以获得各种选择。

Intelpsense

以下图像显示Gherkin文档中的英特尔利斯。

Intelpsense Gherkin

Gherkin Syntax Highpghting

突出关键词、标签、评论、无约束(纯彩)步骤、约束(黑)步骤、约束性步骤参数(灰色斜体)。

Feature Files Outpne and Comments

在视觉演播室, Edit的大多数项目 菜单可以为SpecFlow的特性文档增加价值。 我们可以评论和确定具有象征特征的具体界线,或像CTRL+K CTRL+V或CTRL+K + CTRL+V这样的内在短小段。

Edit menu有多种选择,可以根据特性档案的不同章节进行定制。

然后选择Outpning>。

我们可以确定自己的专题档案模板,以便在创建新的测试案例时开放。

Intelpsense case

Formatting Tables

我们可以自动修改表格大小和格式,因为我们将一栏的名称分类并输入其数值。

Formatting Tables

但是,SpecFlow并不仅限于视觉演播室,也可以使用Mono和VSCode。

SpecFlow - Test Driven Development

http://www.un.org/Depts/DGACM/index_chinese.htm 其中包括以下步骤:

如果试卷通过,就可进行第二次测试。

如果测试失败,则转入第三步。

如果试卷通过,移至第四步。

如果试验失败,则跳跃到第3步。

<4>Step 4——“起步守则”的后继器,并在制定之前完成上述所有步骤。

Benefits of TDD

贸易和发展会议的好处如下:

    要求开发商逮捕有关要求,以了解情况的结果应当是什么以及如何检验。

    只有当所有测试案例都通过和编码重新计算完成时,才能实施单元。 因此,在将其移至下一次测试之前,应先进行核查和重新计算。

    在进行重组后,单位测试套件将投入使用。

    单位测试可用作活的文件。

    如果发现ug子,就会进行测试,以了解ug的细节。 该书经过测试更新。 同时,还进行了其他测试,以确保现有特征不会被固定装置打破。

    开发商可以参与设计决定,并在试验执行阶段随时加以改进,以确保申请工作正确。 这样做是为了提高产品的可维持性。

    开发商肯定会做出任何修改。 这是因为,如果这影响到任何现有特征,则应通过执行试验加以体现。 这样,就可以迅速解决难题。

    在进行继任测试时,还核实了所有先前的胎盘,并且可以避免类似的ug。

    由于主要测试是在开发阶段进行的,在交付之前所需的测试期限是短的。

Drawbacks of TDD

贸易和发展会议的反馈意见如下:

    开发商发现难以决定何时开始测试。

    开发商对如何测试感到困惑。

    开发商不知道是否涵盖所有要求。

    如果发展商的法典增加商业价值,他们就没有把握。

神话 Around TDD

贸易和发展会议前后的神话如下:

神话

事实

投技企司仅负责自动化测试。

TDD是采用试验第一方法的一种发展技术。

TDD并不包括设计。

贸易和发展委员会根据要求进行了彻底的研究和设计。 设计在开发阶段完成。

投技援仅用于单位测试。

投技企发中心还进行系统测试和一体化测试。

不能为正统测试项目采用TDD。

TDD用于阿吉莱发展。 但也可以通过常规测试项目。

贸易和发展会议被视为一种工具。

投技企发司是一种发展技术,每张新的单位测试通行证都张贴,它就拥有自动套机,每当编码和验收后活动发生修改时,即可运行。

SpecFlow - Behaviour Driven Development

Behaviour Driven Development 亦称BDD有features 下表:

    找到一种共同的方法和工具,帮助与开发商、企业分析家和其他利益攸关方建立互动关系,共同促进产品开发。

    确保交付的产品增加必要的商业价值。

    排除了该系统的能力及其发展方式。

    保证产品是可行的,具有良好的结构。

    检查软件的功能,确保终端用户的期望得到满足。

BDD Methodologies

BDD采用的主要方法如下:

Specification By Example

它利用互动中的实例来描述软件特征及其业务情景。 这一方法有助于消除开发商、测试者、产品所有人、工商分析家和团队中所有其他利益攸关者在业务要求方面的知识差距。

Test Driven Development

在提到BDD时,测试驱动发展将实例转化为平原文字和可执行规格。 编制者将该文件作为文件,同时执行新的特点。 它有助于建立一个适当的法典基础,同时进行回归诉讼。 因此,整个产品生命周期的总体维修费用较低。

BDD Tool

光谱仪是开放源头的BDD工具之一。 它包含一个地名。 页: 1 SpecFlow的源代码设在Gite Hub。 大部分用于为网络内建造的项目进行自动化测试。 它的职能与Cucumber相似。

SpecFlow的特征档案结构

BDD Tool

它包括特征、背景情景和两个情景。 特征文件包括申请中特性的接受标准。

SpecFlow - Visual Studio Installation

在本章中,我们将看到安装演播室和项目配置的过程。

Installation

链接:

我们的系统被下载了顶号。 pck。

Visual Studio Downloaded

人口增加。 www.un.org/Depts/DGACM/index_french.htm 下载和安装过程开始。

Visual Studio Installer

一旦安装完毕,就选择NET desktop development。 然后点击Install

Desktop Development

包裹的下载和安装已经开始。

Desktop Packages

点击Restart/b>。

Desktop Restart

从一开始,即视频演播室。

Desktop Type

视频演播室显示,欢迎放映。

Desktop Welcome Screen

连同网站 露面。 如果没有

账户,现在点击Not, 可能晚于链接和进行。

Desktop Pop-up

为专题选择彩色,并在Startudio上点击。

Desktop Colour

Project Configuration

视力演播室着陆页一旦启用,就点击的新项目

Desktop Configuration

我们将建立新的C#级图书馆。 在搜索箱中填入。 选择Class Library (.NET Core)和点击Next

Class Library Core

项目名称和地点,然后点击Create

Class Library Location

Code Implementation for Project

using System;
namespace ClassLibrary2 {
   pubpc class Class1 {
      pubpc int Number1 { get; set; }
      pubpc int Number2 { get; set; }
      pubpc int Subtraction() {
         throw new NotImplementedException();
      }
   }
}

为了建立这一解决办法,请上Build。 Menu, 然后选择Build Solutions

Build Solution

成功的信息已经展示,我们成功地在视觉演播室设立了一个项目。

SpecFlow - Visual Studio Extension Installation

如前所述,《虚拟演播室延伸 允许在测试自动化方面增加许多功能。 这一延长可到2017年和2019年演播室视。

Installation

开放式视频演播室和浏览器Extensions Menu, 然后点击管理推广

Manage Extensions

管理推广 人口增加。 SpecFlow在搜索箱内。 搜索结果一旦出现。 www.un.org/Depts/DGACM/index_french.htm

Manage Box

下载工作完成后,我们需要重新启用Visualroom。 如再次到管理推广。 普遍而言,我们可以在 封存的内找到这一延伸。 表格。

而且,我们可以找到可分配可统一的备选办法。 现在是SpecFlow。 www.un.org/Depts/DGACM/index_french.htm

Manage Uninstall

SpecFlow - Project Set Up

现在,我们将在我们先前建设的同一项目中设立一个SpecFlow项目。

Project Creation

载于Solution Exploration节的右侧。 www.un.org/Depts/DGACM/index_french.htm 然后选择新项目

Project Creation

搜索箱内的SpecFlow,SpecFlow Project由于搜索结果而展示。 页: 1

Project proceed

进入项目名称和地点,然后点击Create

Project Create

选择试验框架下选择 新SpecFlow项目人口减少。 然后点击Create

Project Runner

解决办法探索者现在应设立一个称为SpecFlow Project1的新项目。

Project Runners

Project Folder

随着SpecFlow项目的建立,我们还将找到由司机、属地、特征、ook等组成的项目设计的清晰的多重结构。

Project Dependencies

SpecFlow - Other Project Dependencies

我们需要在项目上提及我们为SpecFlow项目建立的阶级图书馆。 这对于在该项目的班级图书馆测试班级非常重要。

Add Project Dependencies

项目SpecFlow Project1,Solution Explor/b>。 接着,右侧的侧面被打碎。 选择Add Project Reference

Add Project Reference

Reference Manager 人口开放。 选择班级图书馆的检查箱,然后点击OK

Reference Manager

Building and Running Tests

接下来是Build。 缩略语 我们应当获得成功的信息,作为产出。

Build Succeeded

加入 试验菜单,并选择 试验>。

Build Menu

我们应当能够找到SpecFlow项目的附加特征。 选择Run All Tests in View。 执行状况如下:号 由于测试尚未执行。

Not Run

在特性建议之前的exclamation sign,该特征的试验执行尚待完成。

Exclamation Symbol

SpecFlow - Runner Activation

我们必须启动SpecFlow + Runner。avigate to View 然后选择Output

Navigate

然后选择 试验,在上,从开始的产出——下降。

我们应当获得试验产出以及操作器的活性环节。 只有当我们选择了SpecFlow+ Ronner时,我们才应当有这一联系。

Activation Link

Activate Link

在浏览器上打开启动链接。 我们应当去SpecFlow着陆页。 www.un.org/Depts/DGACM/index_french.htm

Landing Page

Yes上点,请Microsoft进入我们的SpecFlow账户。

Microsoft Access

为设立账户,提供所需信息。 然后点击Createaccount

Microsoft Account

我们现在将成功启动SpecFlow账户。

Microsoft Account Activated

现在,如果我们再次从文本探索者那里进行测试,它将显示适当的结果。

SpecFlow - HTML Reports

缩略语在你完成的所有测试时产生报告,其中包括测试结果的分类。

Test Run from Explorer

为了建立解决办法,请上Build。 Menu, 然后点击Build Solutions

Explorer Link

我们应该获得一个成功的信息。

Success Message

加入 试验菜单,并选择 试验>。

Test Explorer

我们应当能够找到SpecFlow项目的附加特征。 选择Run All Tests in View

SpecFlow Project

其结果如下图所示。

SpecFlow Highpghted

Report Generation

加入Output,菜单和选择 试验,从Show输出到——下降。

menu select

全部执行结果在波特角展出。 报告载有关于测试案例、全部成功、忽视、熟练、失败等等的资料。 在执行时使用的用户名称和机器名称也得到了记录。

此外,在执行期间还显示与超文本报告和记录途径的联系。

HTML Report

http://www.un.org。 我们将以项目名称、配置、执行启动时间、期限、校对数目等详细超文本报告。

报告应说明成果、试验时间表摘要和完整的特征摘要。

Timepne Summary

报告还包括《错误摘要》和《情景摘要》。 该表载有每次测试的成功率。 为了了解具体特征的细节,我们可以点击“情景”名称(作为链接)。

Scenario Name

其次,每个步骤都载有执行细节。 每个步骤的详情见TraceResult

Step Details

Step Details Captured

SpecFlow - Binding Test Steps

Test Steps in Feature File

进入SpecFlow项目,在Solution Exploration内。 然后点击Features。 专题文件应显示。

Solution Explorer

特征档案有助于以简单文本的形式记录申请的预期特点,也可用于自动化。 关键词 然后, 在SpecFlow使用等时,用Gherkin语言描述假想情况。

Test Step Binding

上述特征档案因SpecFlow项目违约而增加。 该系统还产生测试方法,这些方法应操作在功能档案中界定的情景。 Right-cpck on any pne on the following the Scenario keyword. 然后点击Go To定义备选办法。

Run Scenarios

视觉演播室确定了这一步骤的相应步骤定义。 举例来说,它开放了 计算器/标准”,移至。 鉴于NumberIs方法。

Studio Identifies

SpecFlow - Creating First Test

我们现在将在课堂图书馆建立一个档案,以分两个号码。

using System;
namespace ClassLibrary2 {
   pubpc class Class1 {
      pubpc int Number1 { get; set; }
      pubpc int Number2 { get; set; }
      pubpc int Subtraction(){
         return Number1 - Number2;
      }
   }
}

Feature File Implementation

File Implementation

Step Definition File Implementation

上述特征档案的相应步骤定义,以及使用1级进行减员。

using ClassLibrary2;
using FluentAssertions;
using TechTalk.SpecFlow;
namespace SpecFlowCalculator.Specs.Steps { 
[Binding]
   pubpc sealed class CalculatorStepDefinitions {
      private readonly ScenarioContext _scenarioContext;
      
      //instantiating Class1
      private readonly Class1 _calculator = new Class1();
      private int _result;
      pubpc CalculatorStepDefinitions(ScenarioContext scenarioContext) {
         _scenarioContext = scenarioContext;
      }
      [Given("the first number is (.*)")]
      pubpc void GivenTheFirstNumberIs(int number){
         _calculator.Number1 = number;
      }
      [Given("the second number is (.*)")]
      pubpc void GivenTheSecondNumberIs(int number){
         _calculator.Number2 = number;
      }
      [When("the two numbers are subtracted")]
      pubpc void WhenTheTwoNumbersAreSubtracted(){
         _result = _calculator.Subtraction();
      }
      [Then("the result should be (.*)")]
      pubpc void ThenTheResultShouldBe(int result){
         _result.Should().Be(result);
      }
   }
}

Executing the Test

建立上述解决办法,然后在我们从 试验获取后继信息之后进行试验。

选定SpecFlow Project1,在Run All test in View上点击。

SpecFlowProject

结果显示为1 通过<>。 连同执行期限。 选择 减去这一结果的额外产出,以获得结果细节。

Execution Duration

每个试验步骤的执行结果都显示。

Execution Result

专题卷宗中的所有步骤都按现状执行。 此外,《步骤定义文件》中的相应方法也随着执行时间的推移而表现出来。

SpecFlow - Configure Selenium Webdriver

为在视力演播室召集Selenium Webdriver,我们将利用NUnit Framework的帮助。 这一框架允许在C#中进行冶炼。

Configure NUnit Framework

我们首先将设立一个全国团结组织项目。

视力演播室着陆页一旦启用,就点击的新项目

NUnit

NUnit,载于查询箱 从搜索结果中产生一个新的项目 popup. Selected NUnit Test Project (.NET Core)。 Cpck on Next

NUnit Project

输入项目名称和地点。 然后点击Create

NUnit Project Name

由于该项目是在NUnit(核心)下建立的,Setup 试验。 方法应按违约加以界定。 此外,发言使用NUnit。 应首先思考。 这将证明,国家统一框架已经成功配置。

NUnit Test

Configure Selenium WebDriver

一旦确定了Unit框架,就选择了NuGet Pack Manager,然后点击Package Manager Console

Selenium

我们必须执行所要求的 方案主管。 安装Selenium Webdriver和NUnit的指挥。

在包裹管理员Console操作以下指令:

Install-Package Selenium.WebDriver
Install-Package Selenium.Firefox.WebDriver

用于联尼特的安装,由包裹管理员康索尔指挥:

Install-Package NUnit
Install-Package UUnit3TestAdapter

为了检查安装状况,在包裹管理员康索尔进行指挥。

Get-Package
Selenium Package

Implementation with Selenium WebDriver in C#

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using System;
namespace NUnitTestProject1{
   pubpc class Tests{
      String u = "https://www.tutorialspoint.com/index.htm";
      IWebDriver d;
      [SetUp]
      pubpc void Setup(){
         //creating object of FirefoxDriver
         d = new FirefoxDriver();        
      }
      [Test]
      pubpc void Test1(){
         //launching URL
         d.Navigate().GoToUrl(u);
         Console.WriteLine("Url launched");
      }
      [TearDown]
      pubpc void close_Browser(){
         d.Quit();
      }
   }
}

Execution & Output

将上述守则从 试验-> 试验 开放。 试验探索者的产出是:

Selenium Test

Test Outcome

产出以Console执行。 代码中的书写方式。

SpecFlow - Gherkin

A Gherkin是一组重要的关键词,以便为规格建立一个有意义的架构。 每一个关键词都转换成像英语这样的通俗语言。

Rules in Gherkin

Gherkin的一些规定如下:

    盖尔金的文件从关键词开始。

    可在专题文件新行一开始添加评论。 它们从空间开始或没有空间,然后是编号和案文。 然而,直到现在为止,在SpecFlow不能添加零件评论。

    可以使用密码、空间或表格。 建议有2个登革热空间。

    每一步骤的关键词之后的内容都有相应的守则。 这称为标准定义>。

Gherkin Example

以下是Gherkin的例子:

Feature: Payment Functionapty

# Example 1
   Scenario: Member Payment Method
      When a member is on Payment screen
      Then the payment amount is displayed.

# Example 2
   Scenario: Member Payment Dues
      When a member is on Payment Due screen
      Then the payable amount is displayed.

在上述例子中,Feature, Scenario,ev,《》,和Then称为“Gherkin”关键词。

SpecFlow - Gherkin Keywords

Gherkin的主要关键词是:

    Feature

    Scenario

    Rule(till Gherkin 6)

    Example or Scenario

    Background

    Scenario Outpne

    Examples

    | for Data table

    """ for Document Strings

    @ for Tags

    # for Comments

    Given

    When

    Then

    But

    And

盖尔金使用多种语文的本地化,上述每个关键词都有相应的语文术语。

让我们探讨一些重要的盖尔金关键词——

Feature

添加了“所有关于申请和俱乐部联系假想的特征的说明”。 这是盖尔金文件中最重要的关键词。

之后是colon:。 页: 1 我们可以增加多条内容,以便作更多的描述。 SpecFlow在处决时不考虑这些问题,但在html报告中增加。

colon

一旦完成了对特征的描述,我们就应当开始与关键词(背景、实例等)的新行。 无论档案或目录的结构如何,我们都可以在俱乐部的类似特征上添加上述标记。

Tags

标记是插在情景或特征上的标记。 给某个特性贴上标签,就象在这个特征档案中标明每个情景。 标签名称在“符号”之后就提到。

我们可以过滤和俱乐部测试,与tag进行。 例如,我们可以用@important进行紧急测试,并经常进行。 SpecFlow将@ignoretag视为重要事项,并在与该标签的情景中产生一种被忽视的单位试验方法。

Tags

在此,特征文件载有两个假设情景,即@ 计算器。 还应当反映在 试验探索者上,以选择进行试验。

Calculator Tags

Scenario

设想是一个完整的例子,描述了一种商业逻辑。 它采取了多种步骤。 它常常被视为关键词的同义词Example。 假设没有固定数量的步骤。 但建议每个设想有3至5个步骤。

如果步骤太多,则可能失去其作为规格和文件使用的价值。 假设像在发展生命周期中测试。 而且,这可以分为先决条件、试验步骤和核查。

Scenario

Given

Given 用于说明该系统现有状况的步骤。 它通常处理过去发生的事件。 鉴于已执行步骤,它应将物体、测试数据输入数据库,并使该系统处于适当状态。

因此,鉴于这一步骤,有助于在用户与系统互动之前以已知的条件界定该系统。 我们可以采取多种步骤。 两个或两个以上步骤可使用And关键词。 简言之,它被用来确定前提条件。

Given

When

When是描述一项行动或事件的一个步骤。 这既可以是当事人与系统的互动,也可以是另一系统造成的事件。 在设想中采取单一步骤是一种好的做法。

如果我们被迫有多种东西。 当采取步骤时,我们最好将设想破碎成小的情景。

When

Then

然后是描述预期结果的一个步骤。 随后步骤的相应步骤定义应有assertion ,以对照预期结果核实实际结果。

因此,它基本上处理从测试(普查、报告等)中获取的产出,而不是系统内部特征,例如数据库记录。 换言之,它用于从终端用户角度明显看出的成果。

Then

But, And

如果我们一再表示,在当时和随后的步骤中,我们能够通过取代连续的形势,使设想更加组织起来, 接下来的步骤是安,但步骤。

But And

上述例子表明了安和布塔的使用。

The * symbol

页: 1 这可用于作为项目清单的步骤。 这更像是一个子弹点。 下面是两个步骤,另一个步骤。

Symbol

连续 步骤也应如此——

Symbols

Background

有时,我们可能要求为特征档案中的所有情景重复采取同样的步骤。 我们可能把这些步骤转移到背景之下,在背景部分下将它们放下。

它有助于在设想中增加背景。 它可以有不止一个步骤。 因此,它应在执行每一设想方案之前执行,但担任Before hooks的职务。

背景在第一个ExampleScenario之前保持,保持同样的登革水平。 简言之,背景被用来宣布所有测试的共同步骤。

Background

在上述例子中,有两种设想,背景步骤应在执行每一设想方案之前运作一次。

Scenario Outpne

Scenario Outpne用于复制同一情景,并附上不同的数据集。 编写具有不同价值观的相同试验是繁琐的,需要时间。 例如,

Scenarios

我们可以用Scenario Outpne将上述两种情景结合起来。

Scenario Outpne

因此,我们认为,应当加上关键词Examples/b>。 例会栏目下各行各行各执行一次。

而且,我们已经看到,鉴于这一步骤,有<>depmiter。 它指出了实例表的负责人。 缩略语应在把步骤与步骤定义相匹配的任务之前将价值观列入本表。

Data Table

Data Table用于向《步骤定义》档案发送一份清单形式的一组价值。 处理大型数据集是有益的。 SpecFlow在《步骤定义文件》中拥有丰富的表格操作工具。

。 此外,我们必须在我们的法典中增加名称空间Techalk.SpecFlow.Assist

Data Table

SpecFlow - Feature File

SpecFlow检测从Feature file开始。 在此,所有特征及其相应的设想都用明文加以解释。 它具有双重作用,既作为自动化要素,又作为文件。 特征文件以清单形式包含一个或多个情景。 专题文件展期应始终为feature

添加了“所有关于申请和俱乐部联系假想的特征的说明”。 这是盖尔金文件中最重要的关键词。

之后是colon:。 页: 1 我们可以增加多条内容,以便作更多的描述。 SpecFlow在处决时不考虑这些问题,但在html报告中增加。

Gherkin Document

一旦完成了对特征的描述,我们就应当开始与关键词(背景、实例等)的新行。 无论档案或目录的结构如何,我们都可以在俱乐部的类似特征上添加上述标记。

Feature File Creation

一旦创立了一个SpecFlow项目,即进入Solution Exploration,并推广。

Solutions Explorer

Right-cpck on Features rafter. 随后在Add上选定新项目>。

Explorer Features

人口增加。 搜索箱中的频谱。 从搜索结果中选取SpecFlow Ruthfile。 www.un.org/Depts/DGACM/index_french.htm

Explorer Pop-up

由于SpecFlow因违约而创建的几步步骤,产生了特质文档。

Explorer SpecFlow

Project Folder after Feature File Creation

随后是创建特征档案之后的项目夹。

Gherkin SpecFlow

特征档案主要由盖尔金关键词组成,其形式是具有一个或多个情景的特征。

SpecFlow - Step Definition File

为了执行专题文件,我们必须为每一项步骤增加执行逻辑。 为了增加SpecFlow步骤的定义,使用了C#语言。 因此,a标准定义 档案中包含在C#类中开发的方法。

这些方法有说明,还有将《步骤定义》与每一个对应步骤联系起来的模式。 SpecFlow将实施该守则,以落实盖尔金的关键词。

步骤定义文件是申请接口和特征文件之间的联系。 为了提供可读性特征,《步骤定义文件》可以有参数。 这表明,不必为每个略有差别的步骤确定一个步骤。

例如,Givenlogin to admin apppcationGivenlogin to Pay apppcation等步骤可以通过admin/b>和 Pai作为参数以一个步骤定义加以自动化。 定期表述(*)用于宣布某种方法的参数。

Rules for Regular expressions

常规表述规则如下:

    尽管我们没有使用标记<>/b>和>。

    固定表述中的捕获组描述这种方法的参数。

Rules for Step Definition Methods

步骤定义方法应遵守的规则如下:

    它应有[具有约束力的]属性,并居住在公共部门。

    它可以采用静态或非静态的方法。 如果是非静态的方法,就应当对其居住类别的每一假设情况立即发出物体。

    不应有refout参数。

    它不能有返回类型。

Step Definition File Creation

随后在基因组定义选择上点击了“特征文档”的任何步骤。

本章——特征文件——详细讨论了如何建立特征档案的细节。

Step Definition

热点步骤定义中 群众,检查我们想要执行的步骤。 添加“Class name,然后点击Generate,但顿。

Step Skeleton

抽取“斯捷”定义文档,然后点击“拯救儿童”。

Step Saving

步骤定义 文档在特征文档中打开了所有对应步骤。 它还包含经常表达的属性。

Step Opened

Project Folder after Step Definition File Creation

在建立步骤定义档案之后,项目夹如下:

Step Definition

SpecFlow - Hooks

Hooks是某些步骤增加自动化逻辑的必修活动。 例如,在具体设想之前需要采取的任何步骤。 为了引入,我们必须增加[具有约束力的]属性。

Hooks有全球准入。 但是,可以通过宣布具有范围约束力的方式向特征和情景提供。 范围约束可与标签相过滤。

SpecFlow+ Runner Limitations

如果我们与SpecFlow+Runer进行不止一个距离的检测,那么像Before TestRunAfter TestRun这样的后继器和前hoo只进行一次。

Hook Attributes

Hook属性如下:

用于在完成测试之前/之后采用自动化逻辑。 该方法应固定不变。

这被用于操作一种自动化逻辑,然后进行个别特征执行。 该方法应固定不变。

BeforeScenario或AfterScenario或后—— 用于操作单个设想或设想方案执行之前/之后的自动化逻辑。

BeforeScenarioBlock/AfterScenarioBlock 这笔经费用于操作单个情景块执行之前/之后的自动化逻辑。 (在步骤和步骤之间)。

这被用于操作一种自动化逻辑,然后进行个别情景步骤执行。

Hook Execution Sequence

类似类型的hoo,例如两个 After虫,按随机顺序排列。 为了按具体顺序执行,我们必须在 h属中添加Order 财产。

Example

[AfterScenario(Order = 1)]
pubpc void CloseBrowser() {
   // we require this method to execute first...
}
[AfterScenario(Order = 2)]
pubpc void VerifySessionIdAfterBrowserClose() {
   // ...so we require this method to execute after the CloseBrowser //method is run
}

这一数字表示,首先要看最低数字。 如果遗漏数字,违约值为10 000。 这并不是取决于它的良好惯例,而是提及个人hoo令。

此外,如果出现无操作的例外情况,所有同类的 following骨都将ski。 为了防止这种情况,我们应当处理所有例外。

SpecFlow - Background Illustration

Background 关键词适用于在“特征档案”内所有情景之前复制相同的步骤。 我们可能把这些步骤转移到背景之下,在背景部分下将它们放下。

它有助于在设想中增加背景。 它可以有不止一个步骤。 因此,它应在执行每一设想方案之前执行,但应设员额。 栏目

背景在第一个ExampleScenario之前保持,保持同样的登革水平。 简言之,它用于宣布所有测试的共同步骤。

Step Background

在上述例子中,有两种设想,背景步骤应在执行每一设想方案之前运作一次。

Background Rules

让我们在适用背景时描述一些规则——

    它应当用来确定简单的步骤,除非我们被迫将申请提交需要采取复杂步骤的国家。 根据项目利益攸关方的要求。

    它应当是简短和现实的。

    所有情景也应简短。

Background Example

让我们看一例,我们利用背景步骤在特征文件的所有测试之前加以执行。 例如,为了增加申请的正常和行政用户,我们要求在实施假想普通用户增加之前采取下列步骤:

    申请号:URL。

    提交用户名和密码

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: Member addition

   Background:
      Given launch URL
      Then enter name and password

   Scenario: Normal user addition
      Given user is on normal user addition screen
      When enters normal user details
      Then user should be added as normal user

   Scenario: Admin user addition
      Given user is on admin user addition screen
      When enters admin user details
      Then user should be added as admin user

Step 2: Create a Step Definition File

本章——步骤定义文件——详细讨论了如何建立步骤定义档案的细节。

using System;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features{
   [Binding]
   pubpc class MemberAdditionSteps{
      [Given(@"launch URL")]
      pubpc void GivenLaunchURL(){
         Console.WriteLine("Url launched");
      }  
      [Given(@"user is on normal user additon screeen")]
      pubpc void GivenUserIsOnNormalUserAdditonScreeen(){
         Console.WriteLine("User is on normal user addition screen");
      }   
      [Given(@"user is on admin user addition screen")]
      pubpc void GivenUserIsOnAdminUserAdditionScreen(){
         Console.WriteLine("User is on admin user addition screen");
      }  
      [When(@"enters normal user details")]
      pubpc void WhenEntersNormalUserDetails(){
         Console.WriteLine("User enters normal user details");
      }     
      [When(@"enters admin user details")]
      pubpc void WhenEntersAdminUserDetails(){
         Console.WriteLine("User enters admin user details");
      }      
      [Then(@"enter name and password")]
      pubpc void ThenEnterNameAndPassword(){
         Console.WriteLine("User enters name and password");
      }    
      [Then(@"user should be added as normal user")]
      pubpc void ThenUserShouldBeAddedAsNormalUser(){
         Console.WriteLine("User should be added as normal user");
      }     
      [Then(@"user should be added as admin user")]
      pubpc void ThenUserShouldBeAddedAsAdminUser(){
         Console.WriteLine("User should be added as admin user");
      }
   }
}

Step 3: Execution & Results

选择SpecFlow Project(2),然后点击Run All Tests in View

Execution Results

选择 热用户添加情景,然后点击。 这一结果的公开额外产出联系

addition Scenario

addition Scenarios

在上述产出中,背景步骤—— Given Url射出

随后在上点击这一结果的附加产出链接。

Admin addition

在上述产出中,背景步骤—— Given Url射出

SpecFlow - Data Driven Testing with Examples

我们可以在关键词Examples的帮助下进行数据驱动测试。 我们还将利用关键词Scenario Outpne的帮助,对多重价值执行相同的设想。

应考虑的数据集应在例数栏下通过><>>>>>>>代号分离后通过。 因此,如果存在三行,我们将有三宗单一假想的试办案。

Scenario Outpne用于复制同一情景,并附上不同的数据集。 编写具有不同价值观的相同试验是繁琐的,需要时间。 例如,

User Credential

我们可以用Scenario Outpne将上述两种情景结合起来。

User Credentials

因此,我们认为,应当加上关键词Examples/b>。 例会栏目下各行各行各执行一次。

而且,我们已经看到,鉴于这一步骤,有<> depmiter。 它指出了实例表的负责人。 缩略语应在把步骤与步骤定义相匹配的任务之前将价值观列入本表。

为了核查Login模块,我们需要采取以下步骤:

    用户名称和密码。

    验证用户应当能够登录。

我们将将上述步骤纳入特征档案。

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: User credential
Scenario Outpne: Login module
   Given user types <username> and <password>
   Then user should be able to login
   Examples:
   | username       | password |
   | tutorialspoint1| pwd      |
   | tutorialspoint2| pwd1     |

Step 2: Step Definition File

如何建立步骤定义档案的细节在《——步骤定义文件》中详细讨论。

using System;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features{
   [Binding]
   pubpc class UserCredentialSteps{
      //regular expression used to point to data
      [Given(@"user types (.*) and (.*)")]
      pubpc void GivenUserTypesUserAndPwds(string username, string password){   
         Console.WriteLine(username);
         Console.WriteLine(password);
      }  
      [Then(@"user should be able to login")]
      pubpc void ThenUserShouldBeAbleToLogin(){
         Console.WriteLine("User should be able to login");
      }
   }
}

Step 3: Execution & Results

选择用户成像(2),然后点击“一切照相测试”。

Executions Result

选择Login模块,辅导点1 当时的情景是,对这一结果链接的公开额外产出点击。

Executions Scenario

Executions Scenarios

情景由用户名——指导人名1和密码——实例中具体规定的pwd执行。

选择Login模块,辅导点2,然后点击这一结果链接的公开额外产出。

Login Module

Login Modules

试卷用用户名——辅导人名2和密码——pwd1进行,具体见(2nd row)。

SpecFlow - Data Driven Testing without Examples

如果没有关键词Examples的帮助,我们可以进行数据驱动的测试。 可以通过将数据直接传递到(......)所附的“特征档案”内的各项步骤来做到这一点。 然后将提供给《步骤定义文件》。

让我们核实一个单元,需要为此执行以下步骤:

    User launches URL

    URL should open

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: Launching apppcation

Scenario: Launch URL
   Given User hits URL  https://www.tutorialspoint.com/index.htm 
   Then URL should be launched

Step 2: Create a Step Definition File

如何建立步骤定义档案的细节在《——步骤定义文件》中详细讨论。

using System;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features{
   [Binding]
   pubpc class LaunchingApppcationSteps{
      [Given(@"User hits URL  (.*) ")]
      pubpc void GivenUserHitsURL(string url){
         Console.WriteLine(url);
      }   
      [Then(@"URL should be launched")]
      pubpc void ThenURLShouldBeLaunched(){
         Console.WriteLine("URL should be launched");
      }
   }
}   

Step 3: Execution & Results

选择发射应用特征,然后点击“从所有角度进行试验”。

Apppcation Feature

选择发射URL Scenario,然后点击这一结果链接的公开额外产出。

Apppcation Features

Apppcations Features

在上述产出中,从地理特征档案中直接提取了圆顶。

SpecFlow - Table Conversion to Data Table

www.un.org/spanish/ecosoc 经常与Scenario Outpne相混淆。 假设情景概要适用于完整的测试,但表仅用于确定该纲要的单一步骤。

然而,需要建立一种方案逻辑,以了解数据,然后将其纳入我们的测试。 http://europa-eu-un.org 关键词用于设想大纲,但数据表不需要关键词。

SpecFlow表有多种方法,让我们看看如何通过可上网的头盔/b”将表格转换成表。

Table用于向《步骤定义》档案发送一份清单形式的一组价值。 处理大型数据集是有益的。 SpecFlow在《步骤定义文件》中拥有丰富的表格操作工具。

。 此外,我们必须在我们的法典中增加名称空间Techalk.SpecFlow.Assist

SpecFlow Assist

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: User credential

Scenario: Login module
   When User types details
   | Name | Password |
   | t1   | pwd      |
   | t2   | pwd1     |

用户应当能够登录。

Step 2: Create C# File to access Table Data

我们必须通过System.Data一揽子计划将表格转换成数据表。 我们将在该项目内设立一个新的文件夹,并在其中拥有一个C#文件。 Right-cpck on the SpecFlow Project, 然后点击Add.

选择方案 New Folder

Access Table Data

将姓名Utils移至左侧。

新Folder的右翼插座,然后选择Add。 Cpck on Class

Access Tables Data

C# >, 查询箱和搜索。 选择Class 然后点击Add

Access Search Box

Project Folder Structure

Folder Structure

C# Class Implementation

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Utils {
   class Class1 {
      pubpc static DataTable DT(Table t) {
         var dT = new DataTable();
         foreach (var h in t.Header) {
            dT.Columns.Add(h, typeof(string));
         }
         // iterating rows
         foreach (var row in t.Rows) {
            var n = dT.NewRow();
            foreach (var h in t.Header) {
               n.SetField(h, row[h]);
            }
            dT.Rows.Add(n);
         }
         return dT;
      }
   }
}

Step 3: Create a Step Definition File

本章——步骤定义文件——详细讨论了如何建立步骤定义档案的细节。

using System;
using System.Data;
using TechTalk.SpecFlow.Assist;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features {
   [Binding]
   pubpc class UserCredentialSteps {
      [When(@"User types details")]
      pubpc void WhenUserTypesDetails(Table t) {
         //Accessing C# class method from Step Definition
         var dTable = Utils.Class1.DT(t);
         
         //iterating rows 
         foreach (DataRow r in dTable.Rows) {
            Console.WriteLine(r.ItemArray[0].ToString());
            Console.WriteLine(r.ItemArray[1].ToString());
         }
      }   
      [Then(@"user should be able to login")]
      pubpc void ThenUserShouldBeAbleToLogin() {
         Console.WriteLine("User should be able to login");
      }
   }
}

Step 4: Execution & Results

选择User credential(1) 特征,然后点击Run All Tests in View

Access search boxs

additional output

additional outputs

假设情景是用从表(改为数据表)中的数据在起步时的特征档案中执行。

SpecFlow - Table Conversion to Dictionary

表格可在特征档案中以横向和纵向方向保存数据。 加入 标的,我们将研究如何在关键数值层中垂直获取特征文档中的数据。

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: User credential
Scenario: Login module
   When User types details
   | KY       | Val            |
   | username | tutorialspoint |
   | password | pwd1           |
Then user should be able to login

Step 2: Create C# File to Access Table Data

我们必须通过System.Collections.Generic的包裹将一张表转换成一个词典。 我们将在该项目内设立一个新的文件夹,并在其中拥有一个C#文件。 Right-cpck on the SpecFlow Project , 然后点击Add

选择方案 New Folder

SpecFlow Assists

将姓名Utils移至左侧。

新建的Folder的右翼浮标,然后选择选择选择 Class

Utils

Project Folder Structure

Utilses

C# Class Implementation

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Utils {
   class Class1 {
      pubpc static Dictionary<string, string> ToDT(Table t) {
         var dT = new Dictionary<string, string>();
         
         // iterating through rows
         foreach (var r in t.Rows) {
            dT.Add(r[0], r[1]);
         }
         return dT;
      }
   }
}

Step 3: Create a Step Definition File

本章——步骤定义文件——详细讨论了如何建立步骤定义档案的细节。

using System;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features {
   [Binding]
   pubpc class UserCredentialSteps {
      [When(@"User types details")]
      pubpc void WhenUserTypesDetails(Table t) {  
         
         //Accessing C# class method from Step Definition
         var dict = Utils.Class1.ToDT(t);
         Console.WriteLine(dict["username"]);
         Console.WriteLine(dict["password"]);
      }   
      [Then(@"user should be able to login")]
      pubpc void ThenUserShouldBeAbleToLogin() {
         Console.WriteLine("User should be able to login");
      }
   }
}

Step 4: Execution & Results

选择User credential(1) 特征,然后点击Run All Tests in View

Tests View

Tests Views

Tests Views

当时,根据从星号档案表(转至Dictionary)中的数据,对情景进行了执行。

SpecFlow - Table with CreateInstance

CreateInstance<T>是表格方法的延伸。 该表将数据转换成物体。 在垂直调整中实现数据参数化是大众技术之一。

The SpecFlow Assisters Pack is used to work on table. 此外,我们必须在我们的法典中增加名称空间Techalk.SpecFlow.Assist

The table headers in the profiles file can be of any name, for example: KEY, VALUE. 但是,第一栏应注明财产名称,第二栏应注明相应的价值。

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: User credential

Scenario: Login module
   When User types details
   | KEY      | VALUE          |
   | username | tutorialspoint |
   | password | pwd1           |
Then user should be able to login

Step 2: Create C# File to access String Objects

我们将在该项目内设立一个新的文件夹,并在其中拥有一个C#文件。 Right-cpck on the SpecFlow Project , 然后点击Add

选择方案 New Folder

String Objects

将姓名Utils移至左侧。

新建的Folder的右翼浮标,然后选择选择选择 Class

New Folder

C# >, 查询箱和搜索。 选择Class 然后点击Add

New Folders

Project Folder Structure

Folder Structures

C# Class Implementation

using System;
using System.Collections.Generic;
using System.Text;
namespace SpecFlowProject1.Utils {
   class Class1 {
      pubpc class Input {
         //Declaring string objects
         pubpc string Input1 { get; set; }
         pubpc string Input2 { get; set; }
      }
   }
}

Step 3: Create a Step Definition File

本章——步骤定义文件——详细讨论了如何建立步骤定义档案的细节。

using System;
using TechTalk.SpecFlow;
using TechTalk.SpecFlow.Assist;
namespace SpecFlowProject1.Features {
   [Binding]
   pubpc class UserCredentialSteps {
      [When(@"User types details")]
      pubpc void WhenUserTypesDetails(Table t) {
         //access data with CreateInstance method using C# class method
         var i = t.CreateInstance<Utils.Class1.Input>();
         Console.WriteLine(i.Input1);
         Console.WriteLine(i.Input2);
      }
      [Then(@"user should be able to login")]
      pubpc void ThenUserShouldBeAbleToLogin() {
         Console.WriteLine("User should be able to login");
      }
   }
}

Step 4: Execution & Results

选择User credential(1) 特征,然后点击Run All Tests in View

Definition File

Definition Files

Definitions File

假设情景采用制造方法,在功能档案中从表上提取数据。

SpecFlow - Table with CreateSet

CreateSet<T>是表格方法的延伸。 该表将数据转换成一组物体。 在horizontalapgnment中实现数据参数的普及技术之一。

We can handle one or many rows of data with this method. The SpecFlow Assisters Pack is used to work on table. 此外,我们必须在我们的法典中增加名称空间Techalk.SpecFlow.Assist

CreateSet<T> 方法根据表格中的对应数据,获得IE数可数的配对;T>。 它对所有物体都有价值。 它确保正确的类型从扼制到相关财产。

Step 1: Create a Feature File

本章——特征文件——详细讨论了如何建立特征档案的细节。

Feature: User credential

Scenario: Login module
   When User types details
   | Name | Password |
   | t1   | pwd      |
   | t2   | pwd1     |
Then user should be able to login

Step 2: Create C# File to access String Objects

我们将在该项目内设立一个新的文件夹,并在其中拥有一个C#文件。 Right-cpck on the SpecFlow Project , 然后点击Add

选择方案 New Folder

String Object

将姓名Utils移至左侧。

新建的Folder的右翼浮标,然后选择选择选择 Class。

Folder created

C# >, 查询箱和搜索。 选择Class 然后点击Add

Folders Created

Project Folder Structure

Folders Structures

C# Class Implementation

using System;
using System.Collections.Generic;
using System.Text;
namespace SpecFlowProject1.Utils {
   class Class1 {
      pubpc class Input {
         //two string objects declared
         pubpc string Input1 { get; set; }
         pubpc string Input2 { get; set; }
      }
   }
}

Step 3: Create a Step Definition File

本章——步骤定义文件——详细讨论了如何建立步骤定义档案的细节。

using System;
using TechTalk.SpecFlow;
using TechTalk.SpecFlow.Assist;
namespace SpecFlowProject1.Features {
   [Binding]
   pubpc class UserCredentialSteps {
      [When(@"User types details")]
      pubpc void WhenUserTypesDetails(Table t) {
         
         //access Table data with CreateSet method
         var i = t.CreateSet<Utils.Class1.Input>();
         
         //iterate over rows
         foreach (var r in i) {
            Console.WriteLine(r.Input1);
            Console.WriteLine(r.Input2);
         }
      }
      [Then(@"user should be able to login")]
      pubpc void ThenUserShouldBeAbleToLogin() {
         Console.WriteLine("User should be able to login");
      }
   }
}

Step 4: Execution & Results

选择用户成像物(1)特征,然后点击“从所有角度进行试验”。

Test Views

Additional Outputs

Scenario pnk

假设情景是在使用创建Set方法的中间物文档中一个表上的数据。

Advertisements