Articles

Tutorial Specflow: The Ultimate Guide to BDD Tool

A Complete Guide to Specflow and Behavior Driven Development (BDD) Tutorial:

What is Specflow?

Specflow é um framework de testes que suporta as práticas BDD no framework. net. É um framework de código aberto hospedado no GitHub. Ajuda na utilização de ATDD (Acceptance test driver development) para aplicações.net. Com isso, podemos definir o cenário em inglês simples definido pela linguagem Gherkin que é claramente compreensível por qualquer um.

Existem várias ferramentas para a escrita de testes no BDD abordagem como Pepino/JBehave para Java, Alface para Python, Jasmim para Javascript, o Specflow para .LÍQUIDA.

Specflow e BDD

o BDD (behavior Driven Development) é um conjunto de práticas ou de uma abordagem semelhante à de TDD (Test Driven Development), que visa colmatar o défice de comunicação entre os diferentes intervenientes, como Produto, Desenvolvedores e Testadores.

O objetivo final da abordagem BDD é criar Requisitos de negócios que poderiam ser compreendidos por toda a equipe, de modo a evitar mal-entendidos, e ajuda a enviar o recurso que está sendo desenvolvido da forma mais aceitável.

A Complete Specflow Tutorial Series:

Read through the Complete Specflow Training Series for better understanding of the concept.

Tutorial #1: Introdução ao Specflow BDD Tool (Este Tutorial)
Tutorial #2: Specflow and Selenium Example
Tutorial #3: Specflow Binding Advanced Concepts
Tutorial #4: Step Argument Transformations Specflow Tables
Tutorial #5: Specflow Living Documentation with Pickles
Tutorial # 6: Specflow Report Generator
Tutorial # 7: Specflow Interview questions

A Brief Overview of Tutorials in the Specflow Series:

Tutorial # Descrição
1 Introdução à Specflow BDD (Ferramenta de Este Tutorial)
Este tutorial de introdução irá explicar-lhe tudo sobre o Specflow em detalhe. Specflow é um framework de testes que suporta as práticas BDD no framework.net. É um framework de código aberto hospedado no GitHub. Ajuda na utilização de ATDD (Acceptance test driver development) para aplicações.net.
2 Specflow and Selenium Example
This tutorial will focus on the Integration of Selenium with Specflow framework through a simple test scenario of video search on Youtube application. Você também vai verificar como compartilhar dados através de diferentes ligações através de campos de classe privada.
3 Spectflow and Selenium Example
This tutorial will focus on the Integration of Selenium with Specflow framework through a simple test scenario of video search on Youtube application. Você também vai verificar como compartilhar dados através de diferentes ligações através de campos de classe privada.
4 Passo Argumento Transformações & Specflow Tabelas
Este informativo Specflow tutorial expalin em detalhes sobre o Passo Argumento de transformações que permitem tipo personalizado conversões para o Specflow argumentos para evitar código clichê e Specflow tabelas vir a calhar quando você precisa passar em um monte de campos/dados em um único passo em uma interface amigável de formato tabular.
5 Specflow Viver Documentação com Pickles
a Partir desta Specflow tutorial você vai conhecer como gerar boas procurando viver a documentação através de um framework open source chamado pickles de usar o existente Specflow arquivos.
6 Gerador de relatórios de fluxo
Neste tutorial de relatórios de fluxo, você irá aprender as formas de executar testes de recursos de fluxo, juntamente com Gerar relatórios HTML através do executável De Fluxo.
7 Specflow perguntas da Entrevista
Uma lista dos mais populares Specflow entrevista de perguntas e respostas com exemplos estão incluídos neste tutorial para você quebrar qualquer Specflow entrevista com êxito na primeira tentativa.

Vamos começar com o primeiro tutorial nesta série.

Introduction to Specflow BDD Tool

Watch The Video Tutorial:

Aqui está um vídeo tutorial sobre Specflow and Behavior Driven Development:

Características do BDD

Os principais recursos do BDD são informados abaixo:

#1) Ele tenta definir o comportamento do sistema ou recurso está sendo desenvolvido através de um exemplo ou cenário. Por exemplo, se você está construindo uma aplicação de calculadora simples, então os diferentes comportamentos incluem adição, multiplicação, divisão, etc.assim, através do BDD, todos os stakeholders primeiro se reunirão para decidir o comportamento da aplicação como adição e terão cenários como mostrado abaixo.

Given, I have 2 numbers 30 and 50 as inputWhen I add these 2 numbersThen I should get an output of 80

Se você veja a representação é um cenário em inglês simples que é claramente compreensível por qualquer pessoa e faz com que os requisitos para uma funcionalidade clara (de acordo com os critérios de aceitação). Daí que o primeiro passo seja articular estes requisitos.

#2) agora com um conjunto destes cenários, o QA escreve testes contra estes e isso irá falhar inicialmente, uma vez que o recurso ainda não está desenvolvido.

#3) agora, o desenvolvedor escreve um código de recursos e executa estes testes novamente.4) Os testes podem passar ou falhar. Se o código do Refactor falhar e repetir o processo

#5) Uma vez que o Refactor do código esteja completo, todos os cenários/ensaios devem passar.

portanto, em essência, a BDD utiliza a abordagem TDD e leva-a para o próximo nível, tendo algumas especificações comuns facilmente compreensíveis sob a forma de cenários. Eles também representam a documentação do recurso em si.

Existem várias ferramentas para a escrita de testes na abordagem BDD como Cucumber / JBehave para Java, alface para Python, Jasmine para Javascript, Specflow para .NET.

neste tutorial, estaremos focando no Specflow.

também Lido => Top BDD Tools and Testing Framework

the Keywords – Giv-Giv, When Then

From the unit testing world, most of us are familiar with 3 A’s i.e. Arge, Act and Assert. Agora, dado, quando e depois são as substituições para estes no mundo BDD.tomemos um exemplo para entender cada um deles. Suponha que você está listando um cenário para validar um produto que é adicionado ao carrinho de compras de uma aplicação de E-commerce que requer que você seja logado como um pré-requisito.

A especificação pode ser escrita do seguinte modo:

Scenario: Products get added to cart for a logged in customerGiven I have a logged-in customer on my applicationWhen I add 2 quantity of a product to my shopping cartThen the shopping cart should get updated and have the right product and quantity 

dado: este é usado para descrever um conjunto de pré-condições para o cenário a ser definido. Por exemplo, no exemplo, o pré-requisito do cenário é um cliente logado. Assim, comparando com a analogia organize em um teste de unidade, a implementação step terá de garantir que há um cliente logado.

Quando: isto é usado para descrever uma ação ou etapa de execução. No exemplo, mostra que o cliente está tentando adicionar um produto ao seu carrinho de compras. Assim, a implementação step para esta etapa irá cuidar do código de simulação para adicionar um produto ao carrinho. Isto pode ser comparado com a etapa de Ato nos testes unitários.

Então: Isto é usado para descrever o resultado do cenário e essencialmente onde as validações devem ser colocadas. Ele pode ser comparado com o passo assertivo no mundo de testes de unidade. No exemplo aqui, a implementação step vai afirmar se o produto foi realmente adicionado e a quantidade é a mesma que foi escolhida pelo cliente.

o ficheiro de características

o ficheiro de características é essencialmente um agrupamento de vários cenários para a aplicação em desenvolvimento ou ensaio. Ele também pode ser simplesmente pensado como diferentes módulos da aplicação pela qual a aplicação pode ser logicamente separada.

Por exemplo:

uma aplicação de comércio electrónico pode decidir ter diferentes ficheiros de funcionalidades de alto nível como:

  • funcionalidade de Login/Logout
  • carrinho de compras
  • pagamento etc.

o que é o Specflow?

Specflow é uma ferramenta que suporta as práticas BDD no framework.net. É um framework de código aberto hospedado no GitHub. Ajuda na utilização de ATDD (Acceptance test driver development) para aplicações.net.os requisitos de Negócio vinculativos para uma aplicação usando paradigma de Especificação Por exemplo ajudam a uma melhor compreensão do comportamento da aplicação por todos os stakeholders e, assim, resulta no envio do produto com expectativas corretas.

faz uso da sintaxe de Gherkin para criar recursos cenários. Ele também tem um fórum de discussão/desenvolvimento ativo.

Specflow – iniciando

nesta seção, vamos explorar a instalação de specflow no IDE Visual Studio e criar arquivos de recursos para uma aplicação de utilidade de String simples.

sobre a aplicação de amostras

estaremos ilustrando diferentes características da framework Specflow neste tutorial usando uma aplicação de calculadora que tem funções/interfaces para fornecer diferentes operações como:

  1. adicionando 2 números.subtraindo 2 números.dividindo e multiplicando 2 números.
  2. encontrando a raiz quadrada do número indicado.

Specflow Installation Guide

Specflow installation is a 2 step process

#1) Installing the required plugins in The Visual Studio IDE.

  • para instalar o plugin specflow navegue para Ferramentas- > extensão actualizações.agora carregue em “Online” no painel esquerdo.
  • Agora procure por specflow no painel direito.
  • dos resultados da pesquisa selecione “Specflow for Visual Studio 2017”.

#2) Setting up the project with feature files and step definitions.

  • crie um novo projeto simples em Visual Studio. Nós podemos criar qualquer tipo de projeto como biblioteca de classe / Console Aplicação / Projeto de teste de unidade etc. Para simplificar, estamos tomando um projeto de biblioteca de classe. Nomeie o projeto como “SpecflowBasic”.
  • A fim de executar os cenários de fluxo que vamos criar, precisamos de um corredor de teste. Specflow provê um corredor fora da caixa chamada Specflow + Runner (que é uma versão paga e a versão livre introduz um atraso).

(outros corredores também estão disponíveis para NUnit e MsTest que veremos nos artigos posteriores desta série).

para instalar Specflow + Runner-navegar para Ferramentas – > NuGet Package Manager -> Package Manager Console.

assim que a consola do Gestor de pacotes abrir, execute o comando.

 Install-Package SpecRun.SpecFlow

Specrun-Instalação

  • Também, para fazer Valer os valores, vamos precisar da ajuda de um framework de teste. NUnit pode ser uma das opções e as outras incluem MsTest, etc. Para instalar o NUnit framework para a aplicação, abra a consola do Gerenciador de pacotes e digite o comando.
 Install-Package NUnit 

#3) Criar uma nova classe chamada “CalculatorApplication” que se tornará a nossa aplicação sob teste. Esta é uma classe simples com funções para realizar adição/multiplicação/divisão / raiz quadrada, etc., para o dado input. É assim que a classe de Aplicação de calculadoras se parece.

#4) Uma vez que o pacote seja instalado, crie 2 pastas no projeto e nomeie-as como características e definições de passo para armazenar os arquivos de recursos e encadernações de passo, respectivamente. Discutiremos em detalhe a razão para esta organização de pastas para o recurso definições de passo.

#5) agora na pasta Recursos, adicione um novo arquivo de recursos e nomeie-o como calculadora.

Calculator Feature

you would see that by default the feature file has some description in Feature and Scenario.

substitua isso pelo que vamos testar.

 Feature: CalculatorFeatureIn order to test my applicationAs a developerI want to validate different operations of the applicationScenario: Add two numbersGiven I have provided 70 and 20 as the inputsWhen I press addThen the result should be 90Scenario: Substract two numbersGiven I have provided 70 and 20 as the inputsWhen I press substractThen the result should be 50Scenario: Multiply two numbersGiven I have provided 70 and 20 as the inputsWhen I press multiplyThen the result should be 1400Scenario: Divide two numbersGiven I have provided 70 and 20 as the inputsWhen I press divideThen the result should be 3.5Scenario: SquareRoot of numberGiven I have provided 70 as inputWhen I press squarerootThen the result should be 8.37

#6) gerando definições de etapas: Specflow fornece uma maneira automatizada de gerar ligações / implementação para os diferentes passos em cenários de arquivos de recursos. Isto pode ser conseguido clicando com o botão direito no arquivo de recursos e clicando em “Gerar definições de passos”.

gerar definição de passo

Esta etapa não garante uma implementação para todos os passos, mas tenta o seu melhor para agrupar os passos comuns em cenários e reutilizar o máximo de ataduras que puder. No entanto, faz com que o trabalho de evitar Código boilerplate sempre que um passo de cenário precisa ser implementado.

Depois de clicar em “Gerar definições de passos”, uma janela irá mostrar listando as implementações de passos identificadas que o processador detectou. Pode-se selecionar ou des-selecionar de acordo com os requisitos.

gerar o esqueleto de definição de passo

nas secções posteriores, iremos ver mais detalhes sobre a lista de estilos mostrada na imagem acima.

Por agora, vamos manter todos selecionados com as configurações padrão. Se carregar na antevisão, irá mostrar uma imagem de como será a implementação.

instantâneo da implementação

após a criação de definições de passos, ainda assim, se houver alguns passos não implementados, os arquivos de recursos têm uma forma visual de identificar as aplicações não implementadas. Ele mostra esses passos em uma cor diferente, tornando absolutamente simples saber que existem alguns passos que ainda não têm uma implementação (ou estão tendo qualquer definição de passo ambígua).

Uma Tela de amostra mostra que abaixo:

falta a implementação

Nota: as definições de passos podem ser criadas manualmente também – qualquer .cs arquivo com o Atributo está a um Passo de classe de implementação e o Pepino, sintaxe vai olhar para correspondência com a implementação do cenário dado passo

Execução

Como já foi adicionado Specflow+ Corredor na seção acima, a execução de Cenários é bastante simples (desde que é uma versão de avaliação do Specrun, introduz um atraso variável de 10 a 20 anos antes de cenários de execução. , This delay is not present for registered variants and other flavors of Specrun runner like NUnit and MsTest).

Se todos os passos não foram implementados e se ainda existem ligações que têm um estado pendente. Em seguida, a saída irá mostrar como pendente.

vamos tentar executar estes testes / cenários neste ponto quando não há implementação para as ligações, e os cenários estão todos pendentes.

Pendentes Cenários

Agora, vamos tentar implementar o CalculatorApplication classe com os métodos que queremos testar i.e. adicionar, subtrair, multiplicar, dividir e raiz.

abaixo está uma amostra de código de como a nossa classe de Aplicação de calculadoras se parece:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } } 

Uma vez que a aplicação esteja pronta, vamos tentar descobrir as maneiras de implementar as ataduras para cada uma das etapas do cenário.

Let’s see the step by step approach to implement these:

  • First, we need to have an instance of the application that needs to be tested. Para simplificar, podemos instanciar a AUT (aplicação sob classe de teste) em atalhos de passo e usar a instância instanciada para realmente chamar diferentes métodos/funções de acordo com o passo que é implementado.
  • para capturar a entrada e saída estamos declarando variáveis para manter estes valores, a fim de chamar funções na instância de Aplicação.

Let’s see the end to end implementation for all the bindings involved in validating the Add functionality (Rest of the scenarios are simply extending this).

O cenário de adição aparece como mostrado abaixo:

Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should 

vamos ver a implementação do passo para cada uma destas etapas individuais. Para o uso de todas as implementações step, estamos declarando uma instância de Aplicação sob teste, bem como variáveis para manter as variáveis de entrada e saída como mostrado abaixo:

vamos ver a implementação dos passos de cenário um a um.Passo 1: Dado que eu forneci 70 e 20 como entradas.

 public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } 

Aqui, acabamos de inicializar as variáveis de entrada com os valores passados a partir dos passos do cenário. p0 e p1 são os valores que são passados a partir da etapa do cenário e serão inicializados como 70 20, respectivamente.Passo 2: quando carrego em Adicionar.

 public void WhenIPressAdd() { output = app.add(input1, input2); } 

Este é o passo de execução (ou ato) onde o método real é chamado na aplicação em teste. Observe que desde que as variáveis de entrada input1 e input2 já contêm os valores passados no Step1 a instância de aplicação pode chamar o método com estas variáveis.Passo 3: – então o resultado deve ser 90.

 public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }

Este é o passo de validação (ou afirmação) onde a saída é gerada pelo método call on e a instância de aplicação é validada contra a saída esperada.

Notice, that the Assert keyword used is from NUnit Framework, which returns true or false depending on the validation/expectation that is set. Caso retorne falso, fará com que a implementação do passo falhe e isso mostrará o resultado do cenário como fracasso.

também, por favor note que a variável de saída recebe o valor da etapa anterior onde o método real foi chamado na instância de Aplicação.

Similar ao acima, implementações de etapas para o resto dos passos do cenário são realizadas da mesma forma, a diferença é em chamar diferentes métodos na instância de aplicação e afirmar diferentes valores de saída.uma vez que todas as etapas do cenário são implementadas, os testes podem ser executados.

A saída resultante irá ficar como mostrado abaixo:

Consolidadas de Saída

Você também pode exibir a saída do cenário individual que lista para baixo a saída de cada uma das etapas, bem como:

Cenário de Saída

Conclusão

Espero que este artigo poderia ter dado uma compreensão básica de que o BDD é e quais são as ferramentas que suportam o BDD para .NET onde estamos cobertos Specflow.

também discutimos a instalação e execução de arquivos de recursos Specflow com a ajuda de uma aplicação de exemplo.

ficheiros de código

os ficheiros de código utilizados na aplicação são apresentados abaixo:

CalculatorFeatureSteps.cs

using System;using TechTalk.SpecFlow;using NUnit;using NUnit.Framework;namespace SpecflowBasic.StepDefinitions{public class CalculatorFeatureSteps{// instantiating application instanceCalculatorApplication app = new CalculatorApplication();// variables to hold input values and the intermeditate resultint input1, input2;double output;public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1){input1 = p0;input2 = p1;}public void GivenIHaveProvidedAsInput(int p0){input1 = p0;}public void WhenIPressAdd(){output = app.add(input1, input2);}public void WhenIPressSubstract(){output = app.subsctract(input1, input2);}public void WhenIPressMultiply(){output = app.multiply(input1, input2);}public void WhenIPressDivide(){output = app.divide(input1, input2);}public void WhenIPressSquareroot(){output = app.squareRoot(input1);}public void ThenTheResultShouldBe(double p0){Assert.AreEqual(p0, output);}}} 

Calculator Application.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SpecflowBasic{class CalculatorApplication{public int add(int input1, int input2){return input1 + input2;}public int subsctract(int input1, int input2){return input1 - input2;}public int multiply(int input1, int input2){return input1 * input2;}public double divide(double input1, double input2){return input2 != 0 ? Math.Round(input1 / input2, 2) : 0;}public double squareRoot(int input1){return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0;}}} 

pacotes.config

<?xml version="1.0" encoding="utf-8"?><packages><package version="10.0.3" targetFramework="net461" /><package version="3.11.0" targetFramework="net461" /><package version="2.4.0" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="4.3.0" targetFramework="net461" /></packages>

o nosso próximo tutorial irá informá-lo sobre o exemplo final de usar o Specflow e o Webdriver selénio!

Tutorial seguinte