top 15 popular specflow interview questions
Perguntas e respostas mais frequentes da entrevista de Specflow:
Nosso tutorial anterior do Specflow resumido em Como gerar relatórios de teste e executar testes seletivos .
Neste tutorial, daremos uma olhada nas perguntas da entrevista mais populares do Specflow junto com suas respostas.
Leia o Série completa de treinamento Specflow para uma fácil compreensão do conceito. Specflow é uma ferramenta de suporte às práticas de BDD na estrutura .NET. É uma estrutura de código aberto hospedada no GitHub. Auxilia no uso de ATDD (Desenvolvimento de Driver de Teste de Aceitação) para .NET.
Principais perguntas e respostas da entrevista do Specflow
Listados abaixo estão as perguntas da entrevista de Specflow mais populares com respostas e exemplos para seu fácil entendimento.
Q # 1) Qual é a diferença entre o arquivo de recurso e os arquivos de ligação?
Responda: Escrever testes BDD em Specflow tem 2 componentes principais, a saber
- Arquivos de recursos: Que contêm os testes escritos como Cenários em Linguagem Específica de Domínio (DSL) e são essencialmente arquivos em inglês simples que são adequados e compreensíveis para todos os envolvidos no projeto. Na realidade, eles são os arquivos de teste reais e são interpretados por meio de ligações ou definições de etapas.
- Vinculações de etapa: Esses arquivos de código são a verdadeira lógica de inteligência por trás da execução do teste. Cada etapa em um Cenário (que é uma parte do arquivo de recurso) liga-se a um arquivo de definição de Etapa que realmente é executado quando o teste é executado.
Portanto, uma combinação de arquivos de recurso e definição de etapa ou ligações tornam possível para Specflow (ou qualquer outra estrutura BDD) executar os testes.
P # 2) O que é BDD e como ele difere de TDD ou ATDD?
Responda: Todos esses três termos, ou seja, BDD, TDD e ATDD estão de alguma forma relacionados ao Desenvolvimento Orientado a Testes em geral, mas eles são realmente diferentes em muitos aspectos
perguntas e respostas da entrevista de teste de aplicativo da web
- TDD: TDD é basicamente criar testes a partir da perspectiva do desenvolvedor. Em palavras simples, é um conjunto de testes que um desenvolvedor escreve para fazer seu código passar (ou falhar). É essencialmente uma técnica para fazer seu código falhar até que todos os requisitos específicos sejam atendidos. Basicamente, segue um ciclo de refatoração do código até que todos os testes estejam verdes.
- BDD: O BDD está intimamente relacionado ao TDD, mas é mais relevante de uma perspectiva “de fora para dentro”, o que na verdade significa que os testes do BDD estão mais vinculados aos requisitos do negócio / produto e definem o comportamento desejado do sistema na forma de cenários. O TDD, em contraste, lida com um nível de testes de unidade mais granular. Além disso, as especificações do BDD são geralmente um texto simples em inglês, que é fácil de entender e permite maior colaboração entre todas as partes interessadas do projeto.
- ATDD: O foco do Desenvolvimento Orientado a Teste de Aceitação é mais da perspectiva de aceitação do usuário. Esses testes também definem o comportamento do cliente, mas do ponto de vista da integração ou do produto final, onde o caso de uso final de um cliente é convertido em um cenário de teste e todo o trabalho de desenvolvimento é focado para atender a esses requisitos.
P # 3) O que está contido no arquivo gerado automaticamente para o recurso Specflow?
Responda: Os arquivos code-behind Specflow são arquivos gerados automaticamente com uma extensão “.cs”. Esses arquivos têm a lógica de vinculação de etapas à definição de etapa real.
Alguns pontos sobre os arquivos gerados automaticamente são:
- Esses arquivos não devem ser modificados ou editados manualmente. Mesmo se você tentar fazer isso, as alterações não serão salvas.
- Depois de cada mudança no arquivo de recurso, o compilador gera novamente esse arquivo para capturar as atualizações.
P # 4) Como as step bindings são espalhadas pelos diferentes arquivos de origem acessados?
Responda: Os arquivos de associação de etapas podem ser reutilizados mesmo se existirem em arquivos de origem separados e a correspondência de associação ocorre por meio de um regex.
Os arquivos de step bindings são essencialmente classes parciais atribuídas por (Vinculativo) atributo. Isso garante que todas as ligações de etapas estejam disponíveis globalmente e possam ser usadas com as etapas do cenário em arquivos de recursos diferentes ou iguais.
P # 5) Como as implementações de step binding ambíguas podem ser resolvidas?
Responda: Specflow fornece um mecanismo para evitar a implementação ambígua de associação Step usando um conceito chamado Vinculações com escopo.
Isso é útil em cenários onde você tem etapas semelhantes em Cenários em arquivos de recursos iguais ou diferentes e se deseja tratar ambas as etapas de maneira diferente.
Em um cenário normal, como todas as etapas de correspondência acontecem por meio do Regex, e é uma correspondência gananciosa, você terá que garantir que escreveu um texto ligeiramente diferente (de modo que eles não correspondam à mesma implementação) para as etapas, mesmo que tenham impacto legibilidade.
Usando ligações com escopo, você pode especificar tags com uma implementação de ligação específica ou todo o arquivo de ligação e garantir que a correspondência também tenha um filtro adicional de categoria.
As etapas que precisam ser seguidas estão listadas abaixo:
para) Identifique o cenário com uma categoria usando sintaxe - @Marcação. Exemplo: Estamos marcando o cenário abaixo com a tag - @scopedBinding
@scopedBinding Scenario: Youtube should search for the given keyword and should navigate to search results page Given I have navigated to youtube website And I have entered India as search keyword When I press the search button Then I should be navigate to search results page
b) Agora use a mesma tag na vinculação da etapa, o que garantirá que, além da correspondência de regex, a correspondência de tag ou categoria também ocorra (e garante que outras etapas não correspondam a esta implementação, mesmo se a correspondência de regex for bem-sucedida)
No exemplo acima, queremos definir o escopo da ligação para a etapa. “ E eu inseri Índia como palavra-chave de pesquisa ”, Adicionaremos o atributo Scope com o parâmetro Scoping como tag.
(Given(@'I have entered (.*) as search keyword'), Scope(Tag ='scopedBinding')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { // step binding implementation }
Semelhante ao escopo com tag, também é possível ter vínculos de escopo com títulos de recurso e cenário.
P # 6) Como o contexto de teste pode ser armazenado durante a execução de diferentes cenários?
Responda: O contexto de teste pode ser armazenado usando diferentes abordagens durante a execução de testes de specflow e cada abordagem tem seus prós e contras.
- Usando ScenarioContext e FeatureContext: Pense em FeatureContext e ScenarioContext como um dicionário global de pares chave-valor e pode ser acessado durante a execução do recurso e do cenário, respectivamente. O campo de valor pode armazenar qualquer tipo de objeto e, durante a recuperação, ele precisa ser lançado no objeto conforme desejado.
- Usando campos em arquivos de ligação: Essa abordagem permite compartilhar o contexto entre as implementações de ligação no mesmo e / ou em arquivos de ligação diferentes no mesmo namespace. Não é diferente em manter o estado usando variáveis de classe e pode ser definido ou recuperado em implementações de ligação conforme necessário.
- Usando a própria estrutura de DI do Specflow: O Specflow fornece uma estrutura de injeção de contexto e pode ser usado para passar o contexto na forma de classes / objetos POCO simples. Os objetos / classes de contexto podem ser injetados por meio de campos do construtor e podem ser passados ao longo de diferentes arquivos de associação Step.
Veja um exemplo abaixo com 2 objetos injetados por injeção de construtor.
(Binding) public class StepImplementationClass { private readonly Context1 _context1; private readonly Context2 _context2; public YoutubeSearchFeatureSteps(Context1 context1, Context2 context2) { _context1 = context1; _context2 = context2; } }
P # 7) Quais são as limitações do Specflow ou BDD em geral?
Responda: O BDD, como o próprio nome indica, define o comportamento com o aplicativo que está essencialmente convertendo casos de uso em cenários de teste.
Conseqüentemente, a ausência de partes interessadas como um negócio, produto e / ou clientes pode impactar as especificações reais para as quais os desenvolvedores irão implementar testes de gravação e, portanto, pode resultar em não fornecer o valor real que poderia ter fornecido e teve todas as partes interessadas estavam disponíveis durante a definição dos cenários.
Dito isto, na maioria das vezes os prós superam os contras do BDD e é realmente uma técnica muito útil para testar / validar as especificações. Como é mais ou menos independente de linguagem, já que existem estruturas BDD disponíveis para quase todas as principais linguagens de programação, como Cucumber para Java, RSpec para Ruby e Specflow para .NET.
Q # 8) O que são transformações de argumento de etapa?
Responda: As transformações de argumento, como o nome indica, nada mais são do que transformar a etapa do cenário.
Pense nisso como uma camada extra de correspondência que ocorre antes que a correspondência de vinculação de etapa real aconteça e pode ser útil para transformar um tipo diferente de entrada do usuário em vez de ter diferentes implementações de etapas individuais para o mesmo tipo de entrada.
Para qualquer etapa de transformação, o atributo necessário é StepArgumentTransformation
Por exemplo, consulte o exemplo de código abaixo:
Given I have entered 50 days into the timestamp to minute converter Given I have entered 1 day, 2 hours, 3 minutes into the timestamp to minute converter Given I have entered 1 day, 1 hour, 1 minute, 30 seconds into the timestamp to minute converter
Referindo-se ao exemplo de código acima, todas as três etapas estão relacionadas. Mas, se tivesse passado pela correspondência normal de regex, você teria que escrever três implementações de etapas diferentes.
Com as transformações do argumento Step em vigor, é possível transformar os valores e criar um TimeStamp objeto a partir dos parâmetros especificados e retornar à implementação da etapa original.
Vejamos a implementação da transformação.
(StepArgumentTransformation(@'(?:(d*) day(?:s)?(?:, )?)?(?:(d*) hour(?:s)?(?:, )?)?(?:(d*) minute(?:s)?(?:, )?)?(?:(d*) second(?:s)?(?:, )?)?')) public TimeSpan convertToTimeSpan(String days, String hours, String minutes, String seconds) { // timestamp conversion logic }
Portanto, aqui estamos transformando a entrada do cenário em um valor intermediário (como TimeStamp) e retornando o valor transformado para a implementação de ligação real, conforme mostrado no exemplo abaixo.
(Given(@'I have entered (.*) into the timestamp to minute converter')) public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { // binding implementation }
Observe como o valor transformado do tipo TimeSpan agora é retornado ao método de implementação de vinculação Step real.
Q # 9) Quais são os diferentes tipos de ganchos fornecidos pelo Specflow?
Responda:
O Specflow fornece muitos Ganchos personalizados ou eventos especiais com os quais os manipuladores de eventos (essencialmente métodos / funções) podem ser obrigados a executar alguma lógica de configuração / desmontagem.
Specflow fornece os seguintes ganchos:
- BeforeFeature / AfterFeature: O evento gerado antes e depois do início do recurso e conclui a execução, respectivamente.
- BeforeScenario / AfterScenario: O evento gerado antes e depois do início e da conclusão de um cenário, respectivamente.
- BeforeScenarioBlock / AfterScenarioBlock: O evento gerado antes e depois de um bloco de cenário, ou seja, quando qualquer um dos blocos de cenário pertencentes a 'Dado', 'Quando' ou 'Então' começa ou termina.
- BeforeStep / AfterStep: O evento gerado antes e depois de cada etapa do cenário.
- BeforeTestRun / AfterTestRun: Este evento é gerado apenas uma vez durante toda a execução do teste e uma vez após a conclusão da execução do teste.
É importante observar aqui que esses eventos são gerados por padrão e são tratados se, e somente se, houver ligações fornecidas para esses ganchos. Além disso, não é obrigatório implementar esses ganchos em pares e cada gancho pode existir independentemente um do outro.
P # 10) Como ScenarioContext é diferente de FeatureContext?
Responda: Ambos ScenarioContext e FeatureContext são classes estáticas fornecidas pela estrutura Specflow e são realmente úteis para realizar tarefas como passar informações entre ligações, obter informações importantes como contexto de execução de recurso / cenário, etc.
Vamos ver como os dois diferem:
Como o nome indica, o ScenarioContext fornece dados ou informações no nível de execução do cenário, enquanto o FeatureContext lida com as coisas no nível do recurso.
Em termos simplistas, qualquer coisa armazenada em featureContext estará disponível para todos os cenários presentes naquele arquivo de recurso, enquanto ScenarioContext estará disponível apenas para as ligações até que a execução do cenário esteja em andamento.
Q # 11) Quão importante é a ordem de dados, quando e então?
Responda: Specflow não impõe nenhuma restrição na ordem de Dado, quando e então . É mais sobre o sequenciamento lógico de um cenário de teste e qualquer prática de teste em geral, ou seja, como em testes de unidade, normalmente seguimos três A's que representam ' Organizar, agir e afirmar ”.
Portanto, para cenários de specflow, não há restrição na solicitação e também não exige que todas as três seções estejam presentes.
Muitas vezes, a configuração pode ser minimalista e pode nem mesmo ser necessária. Portanto, para esses cenários, você pode simplesmente pular o “ Dado ”Bloqueie e comece o cenário com o“ Quando ' quadra.
P # 12) O que são ScenarioInfo e FeatureInfo?
Responda: SpecflowContext e FeatureContext fornecem ainda classes estáticas aninhadas, a saber, ScenarioInfo e FeatureInfo.
ScenarioInfo fornece acesso a informações sobre o cenário que está sendo executado no momento.
Algumas das coisas que você pode aprender com esta aula são fornecidas abaixo:
- Título: O título do cenário. Sintaxe: ScenarioContext.Current.ScenarioInfo.Title
- Tag: Lista de tags na forma de Fragmento(). Sintaxe: ScenarioContext.Current.ScenarioInfo.Tags
S semelhante a ScenarioInfo, FeatureInfo também fornece informações relativas ao recurso atual que está sendo executado.
Além de título e tags, ele também fornece outras coisas úteis, como qual é o idioma de destino para o qual o código de recurso por trás do arquivo está gerando código, os detalhes do idioma no qual o arquivo de recurso é escrito, etc.
A sintaxe para obter valores para FeatureInfo permanece a mesma que ScenarioInfo conforme abaixo:
FeatureContext.Current.FeatureInfo
Q # 13) Diferença entre as tabelas de esboço de cenário e Specflow.
Responda:
ScenarioOutline é basicamente uma maneira de executar cenários baseados em dados usando Specflow, onde uma lista de entradas é fornecida no Exemplos seção no cenário, e o cenário é executado uma vez cada, dependendo do número de exemplos fornecidos.
Veja um exemplo de código abaixo para entender mais claramente.
Scenario Outline: Youtube keyword search And I have entered as search keyword When I press the search button Then I should be navigate to search results page Examples: | searchTerm | | India | | America
As tabelas são apenas meios para fornecer dados tabulares com qualquer etapa do Cenário e são passadas como argumento da tabela Specflow na implementação da etapa que pode ser posteriormente analisado para o tipo de objeto desejado, conforme necessário.
Consulte a seção 'negrito' no exemplo de código abaixo para obter mais detalhes:
Scenario: Pass data through Specflow tables for StudentInfo object Given I have entered following info for Student | FirstName | LastName | Age | YearOfBirth | | test | student | 20 | 1995 | When I press add Then i student should get added to database and entered info should be displayed on the screen
Semelhante ao atributo Tags - você pode usar qualquer informação fornecida por ScenarioInfo para controlar o fluxo de execução de qualquer etapa de implementação.
Q # 14) Teste de controle em execução por meio de ScenarioInfo.
Semelhante às associações de escopo, que podem permitir a adição de um critério de filtro extra ao combinar a definição da etapa por meio de tags, você também pode aproveitar o controle da execução do teste por meio das informações fornecidas com ScenarioInfo.
Por exemplo, Você tem 2 cenários com tags, ou seja, @ tag1 e @ tag2 e ambos contêm a mesma definição de etapa. Agora você precisa adicionar lógica customizada dependendo das tags do cenário.
Assim, na implementação da definição da etapa, você pode simplesmente obter todas as tags associadas a um cenário usando ScenarioContext.Current.ScenarioInfo.Tags e verifique a presença de uma tag no cenário em execução e decida qual código deseja executar.
Consulte o exemplo de código abaixo para um melhor entendimento:
(When(@'I press add')) public void WhenIPressAdd() { String() tags = ScenarioContext.Current.ScenarioInfo.Tags; String expectedTag = 'tag1'; if(tags.Any(s => s == expectedTag)) { // do something } else { // do something else } }
Semelhante ao atributo Tags - você pode usar qualquer informação fornecida por ScenarioInfo para controlar o fluxo de execução de qualquer etapa de implementação.
P # 15) Como os testes de Specflow podem ser executados em um tipo de configuração de integração contínua?
Responda:
Com as modernas metodologias de desenvolvimento de software, a integração contínua é uma espécie de palavra da moda e geralmente é referida como um conjunto de práticas, em que todo compromisso com o código-fonte é considerado um candidato para lançamento de produção.
Portanto, cada confirmação aciona essencialmente diferentes tipos de testes como portas de qualidade para garantir que a mudança sendo confirmada não cause falha ou falha em nenhum teste.
Specflow - como sabemos, integra-se muito bem com estruturas conhecidas como NUnit e MSUnit e pode ser executado facilmente através dos aplicativos de console dessas estruturas de teste, dada a DLL do projeto compilado que tem recursos de Specflow e implementações de etapas.
Portanto, para obter testes de Specflow em execução como parte de uma configuração de integração contínua, a seguir está uma lista de etapas de alto nível que podem ser seguidas:
# 1) Compile o projeto que contém o recurso Specflow e a definição de etapa para obter uma DLL compilada.
#dois) Agora use os executores de console NUnit ou MSUnit e forneça a DLL compilada como a fonte de teste (essas estruturas fornecem outros recursos, bem como filtros de teste, dependendo das categorias, etc.).
Esta etapa pode ser integrada ao pipeline de integração contínua e pode ser executada por meio de shell ou script DOS com a ferramenta CI como Jenkins ou Bamboo etc.
# 3) Assim que a execução do teste for concluída, o relatório de saída gerado (que é específico para o executor do console usado) pode ser convertido em um relatório HTML mais legível usando Specrun executável está disponível como parte do NugetPackage.
Esta etapa também pode ser executada por meio da linha de comando fornecida por todas as principais estruturas de integração contínua.
# 4) Quando a etapa acima for concluída, estamos prontos com o relatório dos testes executados e métricas resumidas dos detalhes de execução do teste.
Esperamos que você tenha gostado de toda a gama de tutoriais nesta série de treinamento Specflow. Esta série de tutoriais seria de fato o melhor guia para qualquer iniciante ou pessoa experiente que deseja enriquecer seus conhecimentos no Specflow!
PREV Tutorial OUVolte para o PRIMEIRO Tutorial
Leitura recomendada
- Perguntas e respostas da entrevista
- Perguntas da entrevista de Spock com respostas (mais populares)
- Algumas perguntas interessantes da entrevista de teste de software
- 20 perguntas e respostas mais populares da entrevista TestNG
- Mais de 30 perguntas e respostas populares para entrevistas com pepinos
- As 50 perguntas e respostas mais populares da entrevista do CCNA
- As 40 perguntas e respostas mais populares da entrevista J2EE que você deve ler
- Mais de 25 perguntas e respostas mais populares da entrevista ADO.NET