specflow tutorial ultimate guide bdd tool
Um guia completo para Specflow e tutorial de desenvolvimento orientado por comportamento (BDD):
O que é Specflow?
Specflow é uma estrutura de teste que suporta práticas de BDD na estrutura .NET. É uma estrutura de código aberto hospedada no GitHub. Ele auxilia no uso de ATDD (desenvolvimento de driver de teste de aceitação) para aplicativos .NET. Com isso, podemos definir o cenário em inglês simples definido pela linguagem Gherkin que é claramente compreensível por qualquer pessoa.
Existem várias ferramentas para escrever testes na abordagem BDD, como Cucumber / JBehave para Java, Lettuce for Python, Jasmine for Javascript, Specflow para .NET.
BDD (Behavior Driven Development) é um conjunto de práticas ou uma abordagem semelhante ao TDD (Test Driven Development), que visa preencher a lacuna de comunicação entre diferentes partes interessadas, como Produto, Desenvolvedores e Testadores.
O objetivo final da abordagem BDD é criar requisitos de negócios que possam ser entendidos por toda a equipe, de modo a evitar mal-entendidos e ajudar a enviar o recurso que está sendo desenvolvido da maneira mais aceitável.
Uma série completa de tutoriais do Specflow:
Leia o Série completa de treinamento Specflow para melhor compreensão do conceito.
Tutorial nº 1: Introdução à ferramenta Specflow BDD (Este tutorial)
Tutorial # 2: Exemplo de Specflow e Selênio
Tutorial nº 3: Vinculação Specflow e conceitos avançados
Tutorial nº 4: Step Argument Transformations & Specflow Tables
Tutorial # 5: Documentação Specflow Living com Pickles
Tutorial # 6: Specflow Report Generator
Tutorial nº 7: Perguntas da entrevista de Specflow
Uma breve visão geral dos tutoriais da série Specflow:
| Tutorial # | Descrição |
|---|---|
| 7 | Perguntas da entrevista de Specflow Uma lista das perguntas e respostas mais populares da entrevista de Specflow com exemplos está incluída neste tutorial para que você decifre qualquer entrevista de Specflow com sucesso na primeira tentativa. |
| 1 | Introdução à ferramenta Specflow BDD (Este tutorial) Este tutorial introdutório explicará tudo sobre Specflow em detalhes. Specflow é uma estrutura de teste que suporta práticas de BDD na estrutura .NET. É uma estrutura de código aberto hospedada no GitHub. Ele auxilia no uso de ATDD (desenvolvimento de driver de teste de aceitação) para aplicativos .NET. |
| dois | Exemplo de Specflow e Selênio Este tutorial se concentrará na integração do Selenium com a estrutura Specflow por meio de um cenário de teste simples de pesquisa de vídeo no aplicativo Youtube. Você também verificará como compartilhar dados em diferentes associações por meio de campos de classe privada. |
| 3 | Exemplo de Specflow e Selênio Este tutorial se concentrará na integração do Selenium com a estrutura Specflow por meio de um cenário de teste simples de pesquisa de vídeo no aplicativo Youtube. Você também verificará como compartilhar dados em diferentes associações por meio de campos de classe privada. |
| 4 | Step Argument Transformations & Specflow Tables Este tutorial informativo do Specflow explicará em detalhes sobre as transformações de argumento da etapa que permitem conversões de tipo personalizado para argumentos do Specflow para evitar o código clichê e as tabelas do Specflow são úteis quando você precisa passar muitos campos / dados em uma única etapa em uma tabular amigável formato. |
| 5 | Documentação Specflow Living com Pickles A partir deste tutorial do Specflow, você aprenderá como gerar documentação viva de boa aparência por meio de uma estrutura de código aberto chamada pickles usando seus arquivos Specflow existentes. |
| 6 | Specflow Report Generator Neste tutorial de relatório do Specflow, você aprenderá as maneiras de executar testes de recursos do Specflow junto com a geração de relatórios HTML por meio do executável do Specflow. |
Vamos começar com o primeiro tutorial desta série.
O que você aprenderá:
Introdução à ferramenta Specflow BDD
Assista ao tutorial em vídeo:
Aqui está um tutorial em vídeo sobre Specflow e Behavior Driven Development:
Características do BDD
Os principais recursos do BDD são resumidos abaixo:
# 1) Tenta definir o comportamento do sistema ou recurso que está sendo desenvolvido por meio de um exemplo ou cenário. Por exemplo, se você estiver construindo um aplicativo de calculadora simples, os diferentes comportamentos incluem adição, multiplicação, divisão, etc.
Portanto, por meio do BDD, todas as partes interessadas se reunirão primeiro para decidir o comportamento do aplicativo como Adição e terão os cenários mostrados abaixo.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80Se você vir a representação acima, é um cenário em inglês simples que é claramente compreensível por qualquer pessoa e torna os requisitos para um recurso claros (de acordo com os critérios de aceitação). Portanto, o primeiro passo é articular esses requisitos.
#dois) Agora, com um conjunto desses cenários, o controle de qualidade grava testes em relação a eles e isso inicialmente falhará porque o recurso ainda não foi desenvolvido.
# 3) Agora, o desenvolvedor escreve um código de recurso e executa esses testes novamente.
# 4) Os testes podem ser aprovados ou reprovados. Se eles falharem - refatorar o código e repetir o processo
# 5) Depois que a refatoração de código for concluída, todos os cenários / testes devem ser aprovados.
Portanto, em essência, o BDD usa a abordagem TDD e o leva para o próximo nível por ter algumas especificações comuns facilmente compreensíveis na forma de cenários. Eles também representam a documentação do recurso em si.
Existem várias ferramentas para escrever testes na abordagem BDD, como Cucumber / JBehave for Java, Lettuce for Pitão , Jasmine para Javascript, Specflow para .NET.
o que é uma chave de rede sem fio
Neste tutorial, vamos nos concentrar no Specflow.
Leia também => Principais ferramentas de BDD e estrutura de teste
As palavras-chave - dadas, quando e então
Do mundo dos testes de unidade, a maioria de nós está familiarizada com os 3 As, ou seja, organizar, agir e afirmar. Agora, Dado, Quando e Então são os substitutos para eles no mundo BDD.
Vamos dar uma Exemplo para entender cada um deles. Suponha que você esteja listando um cenário para validar um produto que é adicionado ao carrinho de compras de um aplicativo de e-commerce que requer que você esteja logado como um pré-requisito.
A especificação pode ser escrita da seguinte forma:
Scenario: Products get added to cart for a logged in customer Given I have a logged-in customer on my application When I add 2 quantity of a product to my shopping cart Then the shopping cart should get updated and have the right product and quantity Dado :Isso é usado para descrever um conjunto de pré-condições para o cenário que está sendo definido. Por exemplo, no exemplo, o pré-requisito do cenário é um cliente conectado. Portanto, comparando com o Arranjo Por analogia em um teste de unidade, a implementação da etapa precisará garantir que haja um cliente conectado.
Quando :Isso é usado para descrever uma ação ou etapa de execução. No exemplo, mostra que o cliente está tentando adicionar um produto ao carrinho de compras. Portanto, a implementação da etapa para esta etapa cuidará do código de simulação para adicionar um produto ao carrinho. Isso pode ser comparado ao ato etapa nos testes de unidade.
Então :Isso é usado para descrever o resultado do cenário e, essencialmente, onde as validações devem ser colocadas. Ele pode ser comparado ao Afirmar passo no mundo dos testes de unidade. No exemplo aqui, a implementação da etapa irá assegurar se o produto foi realmente adicionado e a quantidade é a mesma que foi escolhida pelo cliente.
O arquivo de recurso
O arquivo de recurso é essencialmente um agrupamento de vários cenários para o aplicativo em desenvolvimento ou teste. Ele também pode ser simplesmente considerado como módulos diferentes do aplicativo, pelos quais o aplicativo pode ser separado logicamente.
Por exemplo:
Um aplicativo de comércio eletrônico pode decidir ter diferentes arquivos de recursos de alto nível, como:
- Funcionalidade de login / logout
- Carrinho de compras
- Pagamento etc.
O que é Specflow?
Specflow é uma ferramenta de suporte às práticas de BDD no .NET framework. É uma estrutura de código aberto hospedada no GitHub. Ele auxilia no uso de ATDD (desenvolvimento de driver de teste de aceitação) para aplicativos .NET.
A vinculação de requisitos de negócios para um aplicativo usando o paradigma Especificação por Exemplo ajuda a um melhor entendimento do comportamento do aplicativo por todas as partes interessadas e, portanto, resulta no envio do produto com as expectativas corretas.
Faz uso de Maxixe sintaxe para criar recursos e cenários. Ele também tem uma discussão ativa / desenvolvedor fórum .
Specflow - Primeiros passos
Nesta seção, exploraremos a instalação de specflow no IDE do Visual Studio e a criação de arquivos de recursos para um aplicativo utilitário de string simples.
Sobre o aplicativo de amostra
Estaremos ilustrando diferentes recursos da estrutura Specflow neste tutorial usando um aplicativo de calculadora que possui funções / interfaces para fornecer diferentes operações como:
- Adicionando 2 números.
- Subtraindo 2 números.
- Dividindo e multiplicando 2 números.
- Encontrar a raiz quadrada do número fornecido.
Specflow Guia de instalação
A instalação do Specflow é um processo de 2 etapas
# 1) Instalando os plug-ins necessários no IDE do Visual Studio.
- Para instalar o plug-in specflow, navegue até Ferramentas -> Extensão e atualizações.
- Agora clique em “Online” no painel esquerdo.
- Agora pesquise specflow no painel direito.
- Nos resultados da pesquisa, selecione “Specflow for Visual Studio 2017”.

#dois) Configurando o projeto com arquivos de recursos e definições de etapas.
- Crie um novo projeto simples no Visual Studio. Podemos criar qualquer tipo de projeto, como biblioteca de classes / aplicativo de console / projeto de teste de unidade, etc. Para simplificar, estamos adotando um projeto de biblioteca de classes. Nomeie o projeto como “SpecflowBasic”.
- Para executar os cenários Specflow que vamos criar, precisamos de um executor de teste. Specflow fornece um runner pronto para usar chamado Specflow + Runner (que é uma versão paga e a versão gratuita apresenta um atraso).
(Outros corredores também estão disponíveis para NUnit e MsTest, que veremos nos próximos artigos desta série).
Para instalar Specflow + Runner - Navegue para Ferramentas -> Gerenciador de pacotes NuGet -> Console do gerenciador de pacotes.
Assim que o console do gerenciador de pacotes abrir - Execute o comando.
Install-Package SpecRun.SpecFlow 
- Além disso, para afirmar os valores, precisaremos da ajuda de uma estrutura de teste. NUnit pode ser uma das opções e as outras incluem MsTest, etc. Para instalar a estrutura NUnit no aplicativo, abra o Console do gerenciador de pacotes e digite o comando.
Install-Package NUnit # 3) Crie uma nova classe chamada “CalculatorApplication” que se tornará nosso aplicativo em teste. Esta é uma classe simples com funções para realizar adição / multiplicação / divisão / raiz quadrada, etc., para a entrada fornecida. Esta é a aparência da classe CalculatorApplication.
# 4) Assim que o pacote for instalado, crie 2 pastas no projeto e nomeie-as como Recursos e Definições de Etapa para armazenar os arquivos de recurso e as ligações de etapa, respectivamente. Discutiremos em detalhes o motivo dessa organização de pasta para as definições de recursos e etapas.
# 5) Agora, na pasta de recursos, adicione um novo arquivo de recurso e nomeie-o como CalculatorFeature.

Você veria que, por padrão, o arquivo de feições tem alguma descrição em Recurso e Cenário.
Substitua isso com o que vamos testar.
Feature: CalculatorFeature In order to test my application As a developer I want to validate different operations of the application Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should be 90 Scenario: Substract two numbers Given I have provided 70 and 20 as the inputs When I press substract Then the result should be 50 Scenario: Multiply two numbers Given I have provided 70 and 20 as the inputs When I press multiply Then the result should be 1400 Scenario: Divide two numbers Given I have provided 70 and 20 as the inputs When I press divide Then the result should be 3.5 Scenario: SquareRoot of number Given I have provided 70 as input When I press squareroot Then the result should be 8.37# 6) Gerando definições de etapas: Specflow fornece uma maneira automatizada de gerar ligações / implementação para as diferentes etapas em cenários de arquivo de recursos. Isso pode ser feito clicando com o botão direito do mouse no arquivo de feição e clicando em “Gerar Definições de Etapa”.

Esta etapa não garante uma implementação para todas as etapas, mas faz o possível para agrupar as etapas comuns em cenários e reutilizar quantas ligações puder. No entanto, ele evita o código clichê sempre que uma etapa do cenário precisa ser implementada.
Depois de clicar “Gerar definições de etapas” , Uma janela aparecerá listando as implementações de etapas identificadas que o processador detectou. Pode-se selecionar ou desmarcar de acordo com os requisitos.

Nas seções posteriores, veremos mais detalhes sobre o menu suspenso Estilo mostrado na captura de tela acima.
Por enquanto, vamos manter todos eles selecionados com as configurações padrão. Clicar em Visualizar mostrará um instantâneo de como será a implementação.

Depois de criar as definições de Step, ainda, se houver algumas etapas não implementadas, os arquivos Feature possuem uma forma visual de identificar os aplicativos não implementados. Ele mostra essas etapas em uma cor diferente, tornando absolutamente simples saber que existem algumas etapas que ainda não têm uma implementação (ou estão tendo quaisquer definições de etapas ambíguas).
Um exemplo de tela mostra que abaixo:

Observação: As definições de Step também podem ser criadas manualmente - Qualquer arquivo .cs com Atributo (Binding) é uma classe de implementação de Step e a sintaxe do Gherkin procurará corresponder à implementação da etapa de cenário fornecida
Execução
Como já adicionamos Specflow + Runner na seção acima, executar os Cenários é bastante simples (uma vez que é uma versão de avaliação do Specrun, introduz um atraso variável de 10-20s antes da execução dos cenários., Este atraso não está presente para variantes registradas e outros sabores de runner Specrun como NUnit e MsTest).
Se todas as etapas tiverem não foi implementado e se ainda houver vinculações com um estado pendente. Em seguida, a saída será exibida como pendente.
Vamos tentar executar esses testes / cenários neste ponto, quando não há implementação para as ligações e os cenários estão todos pendentes.

Agora vamos tentar implementar a classe CalculatorApplication com os métodos que queremos testar, ou seja, adicionar, subtrair, multiplicar, dividir e sqrt.
A seguir está um exemplo de código de como nossa classe CalculatorApplication 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; } } } Assim que o aplicativo estiver pronto, vamos tentar descobrir as maneiras de implementar as ligações para cada uma das etapas do cenário.
Vamos ver a abordagem passo a passo para implementar estes:
- Primeiro, precisamos ter uma instância do aplicativo que precisa ser testada. Para simplificar, podemos instanciar o AUT (classe Application Under Test) em associações de etapa e usar a instância instanciada para realmente chamar diferentes métodos / funções de acordo com a etapa que é implementada.
- Para capturar a entrada e a saída, estamos declarando variáveis para conter esses valores a fim de chamar funções na instância do aplicativo.
Vamos ver a implementação de ponta a ponta para todas as ligações envolvidas na validação da funcionalidade Adicionar (o restante dos cenários está simplesmente estendendo isso).
O cenário Adicionar se parece com o 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 de cada uma dessas etapas individuais. Para o uso de todas as implementações de etapas, estamos declarando uma instância do aplicativo em teste, bem como variáveis para conter as variáveis de entrada e saída conforme mostrado abaixo:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; Vamos ver a implementação das etapas do cenário, uma por uma.
Passo 1: Dado que forneci 70 e 20 como as entradas.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } Aqui, acabamos de inicializar as variáveis de entrada com os valores passados das etapas do cenário. p0 e p1 são os valores que são transmitidos da etapa do cenário e serão inicializados como 70 e 20, respectivamente.
Passo 2: Quando eu pressiono add.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); } Esta é a etapa de execução (ou ação) em que o método real é chamado no aplicativo em teste. Observe que, como as variáveis de entrada input1 e input2 já contêm os valores passados na Etapa 1, a instância do aplicativo pode chamar o método com essas variáveis.
Etapa 3: - Então, o resultado deve ser 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }Esta é a etapa de Validação (ou Assert) em que a saída é gerada pela chamada do método e a instância do Aplicativo é validada em relação à saída esperada.
Observe que o Afirmar a palavra-chave usada é do NUnit Framework, que retorna verdadeiro ou falso dependendo da validação / expectativa definida. Caso retorne falso, isso fará com que a implementação do Step falhe e isso mostrará o resultado do cenário como falho.
melhor site de download de música para android
Além disso, observe que a variável de saída obtém o valor da etapa anterior, onde o método real foi chamado na instância do aplicativo.
Semelhante ao anterior, as implementações Step para o restante das etapas do cenário são realizadas da mesma maneira, a diferença está em chamar métodos diferentes na instância do aplicativo e declarar valores de saída diferentes.
Assim que todas as etapas do Cenário forem implementadas, os testes podem ser executados.
A saída resultante terá a seguinte aparência:

Você também pode visualizar a saída do cenário individual que lista a saída de etapas individuais também:

Conclusão
Espero que este artigo tenha dado a você uma compreensão básica do que é o BDD e quais são as ferramentas que oferecem suporte ao BDD para .NET em que abordamos o Specflow.
Também discutimos a instalação e execução de arquivos de recursos Specflow com a ajuda de um aplicativo de amostra.
Arquivos de código
Os arquivos de código usados no aplicativo são mostrados abaixo:
CalculatorFeatureSteps.cs
using System; using TechTalk.SpecFlow; using NUnit; using NUnit.Framework; namespace SpecflowBasic.StepDefinitions { (Binding) public class CalculatorFeatureSteps { // instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; (Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } (Given(@'I have provided (.*) as input')) public void GivenIHaveProvidedAsInput(int p0) { input1 = p0; } (When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); } (When(@'I press substract')) public void WhenIPressSubstract() { output = app.subsctract(input1, input2); } (When(@'I press multiply')) public void WhenIPressMultiply() { output = app.multiply(input1, input2); } (When(@'I press divide')) public void WhenIPressDivide() { output = app.divide(input1, input2); } (When(@'I press squareroot')) public void WhenIPressSquareroot() { output = app.squareRoot(input1); } (Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); } } } CalculatorApplication.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; } } } packages.config
Nosso próximo tutorial apresentará um exemplo de ponta a ponta do uso de Specflow e Selenium Webdriver!
Leitura recomendada
- Tutoriais detalhados do Eclipse para iniciantes
- Tutorial do TestLink: um guia para leigos para a ferramenta de gerenciamento de teste TestLink (tutorial nº 1)
- Tutorial do Bugzilla: Tutorial prático da ferramenta de gerenciamento de defeitos
- Tutorial TestComplete: Guia de uma ferramenta de teste de GUI abrangente para iniciantes
- Tutorial SeeTest Automation: um guia de ferramenta de automação de teste móvel
- Tutorial de rede de computadores: o guia definitivo
- Tutorial da ferramenta de teste de acessibilidade WAVE
- Estrutura BDD (Behavior Driven Development): um tutorial completo