.NET 6 + Selenium + Azure DevOps: implementação e automação de testes de Web sites
Já abordei anteriormente neste blog o uso do Selenium WebDriver na implementação de testes de sites na Web, fazendo uso para isto do C# e de diferentes frameworks .NET (como SpecFlow e xUnit):
.NET 5 + Selenium WebDriver: implementando testes de Web sites,
Neste novo artigo trago um novo exemplo de implementação com Selenium WebDriver (uma atualização deste exemplo mencionado e que estava em .NET 5), utilizando agora recursos do .NET 6 e do C# 10 que simplificam consideravelmente a escrita de testes. Incluí aqui também um pipeline do Azure DevOps automatizando os testes, build e deployment da aplicação que estou validando.
O exemplo prático
O exemplo deste post foi demonstrado em detalhes em uma live recente do Canal .NET (a partir de 58:50), cujo conteúdo pode ser assistido gratuitamente no YouTube:
Recomendo fortemente que você assista a esse vídeo para ficar por dentro de todos os detalhes, já que este post resume tudo o que foi abordado durante a live.
O repositório com a aplicação e seus testes correspondentes já foi disponibilizado no GitHub:
A aplicação que será submetida a testes converte distâncias em milhas para o valor equivalente em quilômetros, estando inicialmente com um problema de arredondamento (parti do pressuposto que seriam utilizadas 3 casas decimais para se arredondar o resultado da conversão):
Este exemplo tomou como base o framework SpecFlow (em conjunto com xUnit e Fluent Assertions) para a implementação dos testes. Para saber mais sobre as principais novidades no uso do SpecFlow com .NET 6 e o Visual Studio recomendo que você acesse o artigo:
.NET 6 + SpecFlow: novidades na criação de projetos de testes
Foi necessário ainda adicionar o package Selenium.WebDriver ao projeto:
Na próxima imagem podemos observar o resultado da execução dos testes (com falhas) a partir do Visual Studio 2022:
A seguir temos a user story (um arquivo .feature) que serviu de base para a elaboração dos testes:
E na próxima listagem o conjunto de construções (Step Definitions) que mapeiam as sentenças da user story para instruções validando as funcionalidades do site:
A classe ConvDistanciasPageObject é uma implementação do padrão Page Object (catalogado por Martin Fowler), encapsulando as interações do Selenium WebDriver com a página de conversão de distâncias a partir do Google Chrome (via tipo ChromeDriver):
Esta classe faz uso ainda extensões definidas no tipo estático WebDriverExtensions:
O código do pipeline do Azure DevOps automatizando testes, build e deployment (com o push de uma imagem Docker no Azure Container Registry e publicação da aplicação no Azure Kubernetes Service) também está no GitHub:
Para efeitos de simplificação incluí na listagem a seguir apenas o stage com os testes, em que o uso do virtual environment ubuntu-latest com o Azure Pipelines traz como vantagem o fato do ChromeDriver vir pré-instalado: