BDD (Cucumber): Uma equipe de automação de testes está utilizando o Cucumber para testar um sistema bancário que envolve transferências de dinheiro entre contas de diferentes bancos. Durante os testes em ambientes de integração contínua (CI), o comportamento intermitente ocorre devido ao processamento assíncrono das transações pela API de backend. O time decide melhorar a robustez dos testes, mas com um foco em soluções mais sofisticadas, que envolvem técnicas adequadas de sincronização de testes em ambientes de CI. Com relação a este contexto e sobre o conteúdo estudado, analise as asserções a seguir e a relação proposta entre elas: I. O uso de hooks no Cucumber (como @Before ou @After) pode ser útil para preparar o ambiente de teste e limpar o estado entre execuções, mas a falha persistente nos testes é causada pela dependência da execução assíncrona da API, que não garante que as transações sejam processadas antes da validação. Portanto, o uso de hooks não resolve o problema de sincronização entre os passos do teste e a execução da API. PORQUE II. A solução mais apropriada seria implementar um mecanismo de espera explícita utilizando WebDriverWait ou uma abordagem customizada para aguardar a confirmação de que a transação foi processada, como uma chamada assíncrona que verifique o status da transação antes de continuar com o passo de validação. Além disso, a utilização de práticas como Thread.sleep() é desaconselhada, pois introduz incertezas no tempo de execução dos testes, além de não escalar bem em ambientes de CI. Com base nas asserções acima, assinale a alternativa correta:
Uma equipe de automação de testes está utilizando o Cucumber para testar um sistema bancário que envolve transferências de dinheiro entre contas de diferentes bancos. Durante os testes em ambientes de integração contínua (CI), o comportamento intermitente ocorre devido ao processamento assíncrono das transações pela API de backend. O time decide melhorar a robustez dos testes, mas com um foco em soluções mais sofisticadas, que envolvem técnicas adequadas de sincronização de testes em ambientes de CI.
Com relação a este contexto e sobre o conteúdo estudado, analise as asserções a seguir e a relação proposta entre elas:
I. O uso de hooks no Cucumber (como @Before ou @After) pode ser útil para preparar o ambiente de teste e limpar o estado entre execuções, mas a falha persistente nos testes é causada pela dependência da execução assíncrona da API, que não garante que as transações sejam processadas antes da validação. Portanto, o uso de hooks não resolve o problema de sincronização entre os passos do teste e a execução da API.
PORQUE
II. A solução mais apropriada seria implementar um mecanismo de espera explícita utilizando WebDriverWait ou uma abordagem customizada para aguardar a confirmação de que a transação foi processada, como uma chamada assíncrona que verifique o status da transação antes de continuar com o passo de validação. Além disso, a utilização de práticas como Thread.sleep() é desaconselhada, pois introduz incertezas no tempo de execução dos testes, além de não escalar bem em ambientes de CI.
Com base nas asserções acima, assinale a alternativa correta:
a. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
b. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
c. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
d. As asserções I e II são falsas
e. A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
Vamos avaliar cada asserção e depois a relação de causa (PORQUE).
I. Hooks do Cucumber como @Before e @After são úteis para:
- preparar massa/estado inicial,
- isolar cenários,
- limpar efeitos colaterais (dados, sessão, arquivos, etc.).
Porém, o problema descrito é intermitência causada por processamento assíncrono: o teste valida um resultado antes do backend concluir a transferência. Hooks não sincronizam automaticamente o momento entre “ação” e “efeito” no backend; eles executam apenas antes/depois de cenários (ou steps), não “esperam” a transação finalizar. Logo, a conclusão de que hooks não resolvem o problema de sincronização está correta. I é verdadeira.
II. Para lidar com assincronia, o correto é usar uma estratégia de sincronização, por exemplo:
- espera explícita/polling até uma condição ser verdadeira (ex.: status da transação = “CONFIRMADA”),
- implementação customizada de retry com timeout,
- em UI, esperas explícitas do Selenium (ex.: WebDriverWait) para aguardar uma condição observável.
E de fato Thread.sleep() é desaconselhado porque:
- fixa o tempo (pode ser curto demais → flakiness; longo demais → testes lentos),
- piora o tempo total e a variabilidade em CI,
- não reage ao momento real em que a condição fica pronta.
Logo, II é verdadeira.
Relação (II justifica I): II explica por que hooks não resolvem o problema: o que falta é sincronização baseada em condição/estado (espera explícita/polling), não apenas preparação/limpeza do ambiente. Portanto, a II funciona como justificativa da I.
Alternativa correta: (a).