Posted on julho 10, 2020
Criando testes de carga no Visual Studio (com Selenium)
Olar!
Há algum tempo atrás, no meu trabalho, fiquei responsável por criar testes automatizados e de carga para o sistema que desenvolvemos. Em relação à testes automatizados, eu já tinha alguma ideia de como me virar – apesar de eu (ainda!) não ter nenhum conhecimento formal sobre o assunto. Agora, em relação à testes de carga… o conhecimento era zero mesmo! Eu nem imaginava que fossem possíveis de uma forma tão fácil pelo Visual Studio. E bem… digamos que EU CONSEGUI:
Mas antes de mais nada, para você é que é júnior do júnior e chegou no mundo da TI agora: o que é um teste de carga?
Os testes de carga testam se o aplicativo pode tratar de uma carga especificada de usuários para um determinado cenário e ainda atender à meta de resposta. O aplicativo é executado sob condições normais.
Testes de carga (e testes de estresse) são importantes para garantir que um aplicativo Web seja eficaz e escalonável. – Documentação da Microsoft
Estamos entendidos até aqui? Então bora: vamos montar o seu primeiro teste de carga no Visual Studio!
⚠️ Esse “tutorial” tem um pré-requisito: precisamos de um projeto de testes automatizados e de pelo menos um teste. Aqui, vou usar um projeto de testes com Selenium que eu já tenho montado; caso você tenha interesse nele, fique à vontade para conferir a parte um e dois do tutorial que eu fiz!
Instalando a componente de teste de carga
A primeira coisa que te aconselho fazer é: instalar a componente de teste de carga do Visual Studio, caso você ainda não tenha. É fácil e não é para ser demorado (aí depende um pouquinho da sua conexão hehe).
Aqui estou usando o Visual Studio 2017, mas é para ser a mesma coisa no 2019. (E, infelizmente, o VS2019 vai ser o último com recursos de teste de carga 😟)
Caso seu Visual Studio esteja aberto, feche. É sempre melhor. Depois, você vai abrir o seu instalador do VS (e atualizá-lo, caso seja necessário). Encontre o VS no qual você deseja instalar a componente de testes de carga (caso você tenha mais de um) e escolha a opção More (Mais¹) > Modify (Modificar).
Vai surgir a janela de Modifying. Na aba Individual componentes (Componentes individuais), você procura pela seção Debugging and Testing (Depuração e testes) e seleciona a opção Web performance and load testing tools (Ferramentas de teste de carga e desempenho Web). Depois, só pressionar o botão Modify (Modificar). E esperar a instalação ser concluída.

Adicionando e configurando o projeto de teste de carga
Antes de criar o teste em si, vamos adicionar um projeto de testes de carga à nossa solução. Clique com o botão direito na solução e vá até Add (Adicionar) > New Project… (Novo Projeto…). Uma popup vai aparecer para que possamos selecionar o tipo de projeto que queremos. Dentro do menu do Visual C#, vamos até a opção Tests (Testes) e selecionamos o Web Performance and Load Test Project (Desempenho da Web e Projeto de Teste de Carga). Escolha um nome para o seu projeto (deixei o meu como TesteDeCarga) e clique em OK.

Projeto criado! De princípio, ele já contém um arquivo de teste chamado WebTest1, mas nós não vamos usá-lo. Vamos criar/configurar nosso teste de carga do zero.
Antes de adicionar o nosso primeiro teste, temos que fazer uma modificação nas referências dos dois projetos. Não me pergunte o porquê, eu realmente não sei e não encontrei resposta na internet, mas essa foi a única maneira que consegui fazer os dois projetos “conversarem”: no seu projeto de testes automatizados, você vai apagar as referências ao TestFramework e TestAdapter e vai adicionar a seguinte: Microsoft.VisualStudio.QualityTools.UnitTestFramework. Não vai haver nenhuma alteração significativa no seu projeto, fique tranquilo. No teste de carga, você só vai adicionar essa referência relacionada ao UnitTestFramework. Já peço desculpas aqui por não saber explicar certinho a causa disso. Caso você saiba, POR FAVOR, entra em contato comigo e me conta.

Você também vai precisar instalar os pacotes do Selenium no seu projeto de testes de carga. É só ir lá no NuGet e baixar o Selenium.WebDriver e o Selenium.Support. Eu já deixei isso bem detalhadinho nesse post aqui, na seção Instalando o Selenium via NuGet.
Criando seu primeiro teste de carga
⚠️ Preciso alertar uma coisa: tem algumas opções dentro do wizard de criação de testes de carga que eu não sei exatamente como funcionam e ainda não tive tempo de estudar isso. Então esse vai ser meio que um tutorial de “início rápido”. Eu prometo um dia sentar e estudar e aprender essas diferenças com calma e voltar e escrever sobre isso, OK? 😊
Para objetivos de conferência, se você seguiu todos os passos que eu expliquei, o seu Solution Explorer (Explorador de Soluções) deve estar mais ou menos assim:

E agora vamos, de fato, criar o seu primeiro teste!
Clique com o botão direito no seu projeto de testes de carga, vá em Add (Adicionar) > Load Test… (Teste de carga…). Vai aparecer para você a janela do wizard de criação e configuração de testes de carga. É bem parecido com um instalador. Nessa janela, vamos selecionar a opção On-premises Load test (Teste de Carga no Local), que é para justamente usarmos o projeto de testes automatizados que já criamos previamente. Em seguida, clique em Next (Avançar).

A próxima janela pede para que decidamos como nosso teste de carga vai correr: por tempo ou por iterações (que nada mais é, no nosso caso, do que o número de navegadores que serão abertos ao mesmo tempo rodando o mesmo teste automatizado). Essa parte vai realmente depender do que você está testando e quais seus objetivos. Por aqui, vou deixar na opção Test Iterations (Número de Iterações), com 5 iterações; ou seja: quando eu rodar meu teste, vão ser abertos 5 navegadores ao mesmo tempo e vão executar o mesmo teste.

A terceira janela vai pedir um nome para o seu cenário. Eu já falei nos posts de testes automatizados com Selenium que nomes são importantes. Aqui nos testes de carga, gosto de colocar o nome da classe e/ou método que vamos rodar e a característica do teste de carga (se é por tempo ou por iterações — e quanto tempo ou iterações vão ser rodadas). Deixei o nome do meu cenário nesse caso como BuscaGoogle_5Iteracoes.

As próximas duas janelas você pode avançar sem pensar muito. Elas falam sobre o padrão de carga do seu teste. Até onde eu tenha investigado, isso é mais usado quando vamos colocar mais de um teste automatizado no mesmo cenário.
Eventualmente, você vai chegar na janela que diz Add tests to a load test scenario and edit the text mix (Adicionar testes a um cenário de teste de carga e editar a combinação de testes). Clique no botão Add… (Adicionar…).
Dentro da janela de Add Tests (Adicionar testes), vão aparecer dois testes: o WebTest1 (que foi criado automaticamente quando adicionamos o projeto de testes de carga) e o teste automatizado que criamos no outro projeto. Selecione o nosso, clique na setinha (>) e confirme clicando em OK.

Pode avançar até a janela final e clicar em Finish (Concluir). Temos nosso teste de carga prontinho pra ser rodado!
✅ Assim que seu teste é criado, ele fica com um nome bem genérico, LoadTest1. Mude-o para algum nome significativo, OK? Aqui, vou deixar com o mesmo nome do cenário, BuscaGoogle_5Iteracoes.

Bora rodar?
Atenção, é agora! Segura na mão da sua RAM e confia!
Calma, brincadeira! Aqui estamos começando, com 5 IE só e um teste simples. Depois você vai brincando aí até seu computador pegar fogo, beleza?
Vai lá no primeiro botão dentro da aba do teste de carga, o erlenmeyer com um símbolo play verdinho do lado, e clica nele. E assista a magia!

Logo depois de rodados os testes, o Visual Studio te mostra um relatóriozinho. Tirei um print dos meus e marquei os detalhes e indicadores que sempre olho:

Lá em cima, do lado do nome do teste, vai sempre aparecer o horário em que ele começou a ser rodado. Mais embaixo, dentro da seção Test Run Information (Informações da Execução do Teste), também vai aparecer a data e o horário em que o teste começou e terminou, assim como a duração.
Dentro da seção de Test Results (Resultados dos Testes), você também pode ver quantos testes foram executados, quantos falharam (e a porcentagem entre parênteses) e o tempo médio dos testes.
Caso tenha acontecido algum erro, vai aparecer mais abaixo, na seção Errors.
Voilá, testes de carga construídos! Agora é sair testando o mundão afora conforme a sua necessidade! Espero que tenha gostado e que te ajude. Qualquer feedback é sempre muito bem vindo!

EDIT: Deixei em um repositório do GitHub o projeto completo! Ele engloba as partes 1 e 2 do tutorial de testes automatizados, assim como a parte deste tutorial aqui!
Posts relacionados
Testes automatizados com C# e Selenium – parte 1
Testes automatizados com C# e Selenium – parte 2
Como mudar o número de usuários máximo do seu teste de carga de maneira fácil
¹ Meu Visual Studio e instalador estão em inglês. Peguei algumas traduções para o português da documentação da Microsoft, outras traduzi no freestyle.