FrameworkDemoiselle.gov.brCommunity Documentation
Neste capítulo estão descritos os termos, frases e regras para criação e reúso de cenários de teste realizáveis por meio do framework Behave.
No BDD, há três palavras-chave:
O framework Behave estende o vocabulário padrão do BDD, adicionando novos termos:
Um cenário é um conjunto de frases que utilizam as palavras-chave descritas acima para descrever um comportamento esperado pelo sistema.
Dado que estou na tela de login do sistema Quando informo usuário "demoiselle" e senha "behave" E clico no botão "Entrar" Então será exibida a página de boas vindas
Uma história é um conjunto de cenários que descrevem uma funcionalidade do sistema, ou uma parte dela.
O framework Behave foi construído para diminuir o esforço gasto para definir os vários cenários de teste de um sistema. Algumas frases estão embutidas no framework para facilitar o mapeamento das classes de teste. São elas:
[Dado que | Quando | Então] vou para a tela "<título da tela>"
[Dado que | Quando | Então] estou na tela "<título da tela>"
[Quando | Então] clico em "<nome do elemento>" referente a "<lista de parâmetros>"
[Quando | Então] clico em "<texto do botão/link>"
[Quando | Então] seleciono a opção "<texto da opção>"
[Quando | Então] seleciono a opção de índice "<indice>" no campo "<nome do elemento>"
[Quando | Então] seleciono a opção "<nome do elemento>" referente a "<lista de parametros>"
[Quando | Então] seleciono a opção de valor "<valor>" no campo "<nome do elemento>"
[Dado que | Quando | Então] informo "<valor>" no campo "<nome do campo>"
[Quando] limpo o valor do campo "<nome do campo>"
[Quando] não informo valor para o campo "<nome do campo>"
[Dado que | Quando] informo "<tabela de exemplos>"
[Quando] informo os campos "<tabela de exemplos>"
[Então] será exibido "<texto>"
[Então] será exibido na "<nome do elemento>" o valor "<valor>"
[Então] será exibido o valor "<texto>" em "<nome do elemento>" referente a "<lista de parâmetros>"
[Dado que | Quando | Então] "<nome do elemento>" não está visível
[Dado que | Quando | Então] obtenho "<texto>" do campo "<nome do campo>"
[Dado que | Quando | Então] informo "<chave>" com valor "<nome do campo>"
[Quando] movo o mouse sobre "<elemento>"
[Quando] clico na linha da tabela "<tabela>" referente a "<texto>"
[Dado que | Quando | Então] confirmo a caixa de diálogo
[Dado que | Quando | Então] cancelo a caixa de diálogo
[Dado que | Quando | Então] informo na caixa de diálogo "<texto>"
[Então] será exibido na caixa de diálogo "<texto>"
[Dado que | Quando | Então] informo um número randomico com prefixo "<texto do prefixo>" no campo "<nome do campo>"
[Quando] informo um número randomico no campo "<nome do campo>"
[Dado que | Quando | Então] defino a variável "<nome da variável>" com valor "<texto>"
[Quando | Então] imprimo no console o valor da variável "<nome da variável>"
[Quando] seleciono "<registro do conjunto de dados>" do conjunto de dados "nome do conunto de dados"
[Então] não será exibido "<texto>"
[Então] não será exibido na "<elemento>" o valor "<texto>"
[Então] não será exibido no "<elemento>" o valor "<texto>"
[Então] não será exibido o valor "<texto>" em "<elemento>" referente a "<lista de parâmetros>"
[Dado que | Quando | Então] "<elemento>" referente a "<lista de parâmetros>" não está visível
[Então] "<elemento>" está visível
[Então] "<elemento>" está desabilitado
[Dado que | Quando | Então] aguardo o elemento "<elemento>" referente a "<lista de parâmetros>" estar visível, clicável e habilitado
[Dado que | Quando | Então] o elemento "<elemento>" referente a "<lista de parâmetros>" está visível e desabilitado
[Quando | Então] cancelo a seleção de arquivo
[Quando | Então] altero o diretório de abertura de arquivo para "<diretório>"
[Quando | Então] peço para abrir o arquivo "<arquivo>"
Dado que estou na tela "Login" Quando informo "demoiselle" no campo "Usuário:" E informo "behave" no campo "Senha:" Quando clico em "Entrar" Então será exibido "Seja bem vindo"
[Quando] armazeno a célula "<linha>","<coluna>" da tabela "<tabela>" em "<container>
[Quando] armazeno a coluna "<coluna>" da tabela "<tabela>" em "<container>"
[Quando] comparo o texto da célula "<linha>","<c>" da tabela "<tabela>" com "<container>"
[Quando] comparo o texto da coluna "<coluna>" da tabela "<tabela>" com "<container>"
[Quando] clico na célula "<linha>","<coluna>" da tabela "<tabela>"
[Quando] clico na coluna "<coluna>" da tabela "<tabela>"
[Quando] escolho a opção "<value>" na célula "<l>","<c>" da tabela "<tabela>"
[Quando] escolho a opção "<value>" na coluna "<c>" da tabela "<tabela>"
[Quando] informo o texto "<value>" na célula "<l>","<c>" da tabela "<tabela>"
[Quando] informo o texto "<value>" na coluna "<c>" da tabela "<tabela>"
As histórias escritas para o Behave devem estar em arquivos com a extensão ".story". Cada arquivo ".story" pode conter vários cenários de teste. Esta extensão pode ser alterada modificando o valor da chave "behave.parser.story.extension.converted" no arquivo behave.properties. Os termos aceitos pelo framework devem sempre estar no início das frases, mesmo que precedidas por espaços. As frases descritas nos cenários devem estar cada uma em uma linha diferente. O cenário é, por padrão, iniciado com o termo "Cenário:", no caso da história estar no idioma português. Este termo pode ser alterado modificando o valor da chave "behave.parser.identification.scenario.pattern.<idioma>" no arquivo behave.properties.
Cenário: Acessar o sistema com usuário demoiselle e senha behave Dado que estou na página "Login" Quando informo "demoiselle" no campo "Usuário:" E informo "behave" no campo "Senha:" Quando clico em "Entrar" Então será exibido "Seja bem vindo"
Parâmetros devem ser utilizados nos cenários quando os dados utilizados nos testes não forem constantes. A sintaxe de um parâmetro é "{nome_do_parametro}".
Cenário: Acessar o sistema com usuário "{usuario}" e senha "{senha}" Dado que estou na página "Login" Quando informo "{usuario}" no campo "Usuário:" E informo "{senha}" no campo "Senha:" Quando clico em "Entrar" Então será exibido "Seja bem vindo"
Para que o reúso ocorra é necessário, primeiramente, utilizar parâmetros no nome do cenário. Isto irá prevenir que o cenário seja "executado" pelo framework, mas, deste forma, ele poderá ser referenciado por outros cenários, diminuindo a quantidade de linhas escritas em todo o projeto de teste.
Cenário: Acessar o sistema com usuário "{usuario}" e senha "{senha}" Dado que estou na página "Login" Quando informo "{usuario}" no campo "Usuário:" E informo "{senha}" no campo "Senha:" Quando clico em "Entrar" Então será exibido "Seja bem vindo" Cenário: Sair do sistema Dado que vou para a página "Tela Principal" Quando clico em "Sair" Então será exibido "Usuário:" E será exibido "Senha:" Cenário: Teste com dados "{usuario}" e senha "{senha}" Acessar o sistema com usuário "{usuario}" e senha "{senha}" Sair do sistema
Para que o reúso de cenários ocorra em outras histórias é necessário, primeiramente, que a história seja adicionada no contexto do teste que será executado.
BehaveContext eng = BehaveContext.getInstance(); // Adiciona histórias que serão executadas eng.addStories("/stories/acesso.story"); eng.addStories("/stories/estou-com-sorte.story"); eng.addStories("/stories/pesquisa-simples.story"); // Roda as histórias incluída eng.run();
Assim a chamada ao cenário se dar através da utilização do título do cenário pretendido.
Em /stories/acesso.story:
Cenário: Acesso ao "{sistema}"
Dado que vou para a tela "Tela de Busca"
Então será exibido "{sistema}"
Em /stories/estou-com-sorte.story:
Cenário: Utilização da funcionalidade estou com sorte
Acesso ao "Google"
Quando clico em "Estou com sorte"
Então será exibido "Google"
Uma outra possibilidade seria adicionar a história somente para reúso.
BehaveContext eng = BehaveContext.getInstance(); // Adiciona história somente para reuso de cenários // Cenários que não reutilizados não serão executados eng.addStoriesReuse("/stories/acesso.story"); // Adiciona histórias que serão executadas eng.addStories("/stories/estou-com-sorte.story"); eng.addStories("/stories/pesquisa-simples.story"); // Roda as histórias incluída eng.run();
Desta maneira os cenários que não são parametrizados contidos nas histórias passadas no método "addStoriesReuse" não serão executados. Caso que não ocorre quando utilizado o método "addStories", onde todos os cenários que não são parametrizados serão executados.
Funcionalidades:
Requisitos:
O Plugin já foi testado nas versões Indigo (3.7) e Juno (4.2) do Eclipse.
Instalação usando o Eclipse:
Configuração: