Em uma era de experiências, testar softwares apenas pela segurança não é suficiente, é preciso testá-los para também entender sua eficiência.

Aplicações que trabalham com grande volume de dados, múltiplos acessos simultâneos e que dependem de uma infra-estrutura íntegra, demandam a utilização de ferramentas que simulem e acompanhem os resultados esperados. Diante disso, o JMeter se destaca por sua facilidade de uso e versatilidade.
Quando se fala sobre testes não funcionais, além da preocupação com a performance, é essencial levar em consideração a segurança. Pensando nisso, este post irá ensinar como utilizar a ferramenta Jmeter com Basic Auth.
Recomenda-se as leituras abaixo para complementar o conhecimento:
O que é Jmeter?
O que é Basic Auth?
Nos exemplos apresentados a seguir, está sendo utilizado o Apache Jmeter 4.0 r1823414 que pode ser baixado
aqui.
1 - Crie seu Plano de Testes
O Plano de Teste é onde os N grupos de usuários são inseridos, nos quais executam diferentes testes, podendo acontecer simultaneamente, ou não.

2 - Crie um Grupo de Usuários
Abaixo do thread group é onde ficarão todos os controladores e testadores do nosso plano de testes. Através dele, é possível configurar o número de usuários, tempo de intervalo de cada um deles e o número de vezes que a requisição será executada.

Após criarmos um grupo, é preciso indicar o número de usuários virtuais, tempo de inicialização de cada um e a quantidade de interações.

3 - Insira uma Requisição HTTP
Logo em seguida, vamos inserir uma Requisição HTTP e informar os dados necessários para que a chamada seja realizada com sucesso.


Nome: Identificação da Requisição HTTP.
Protocolo[http]: Protocolo de comunicação.
Nome do Servidor ou IP: IP da máquina onde a aplicação será executada.
Número da Porta: Número da porta de acesso onde a aplicação será executada.
Método: Método de execução da API.
Caminho: Caminho de acesso para a chamada da API.
Observação: Nos parâmetros eu informei usuário, senha e grant_type para execução da requisição pois esses valores são exigidos pelo serviço.

4 - Adicione um Gerenciador de Cabeçalhos HTTP
O Gerenciador de Cabeçalhos HTTP armazena o cabeçalho da requisição. Neste cenário, iremos utilizá-lo para armazenar os dados básicos para realizar a autenticação da API nos campos Authorization e
Content-Type.


5 - Utilizando Extractor de Expressão Regular
Abaixo do Gerenciador de Cabeçalhos HTTP insira o relatório de resultados “Ver Árvore de Resultados”. Em seguida, clique em TestPlan e execute o teste clicando no ícone destacado na imagem a seguir.

Ao clicar na Árvore de Resultados e ir na aba Dados da Resposta, é possível ver a resolução do Json enviada pelo servidor. Neste cenário, o token é apresentado pela variável chamada 'access_token', conforme imagem abaixo:

Agora, vamos inserir o Extractor de Expressão Regular:

Nome de Referência: nome da variável que irá armazenar o valor extraído da requisição.
Expressão Regular: neste campo é informado uma expressão regular que é utilizado para encontrar determinadas combinações de caracteres, palavras ou padrões.
A expressão utilizada no exemplo, "access_token" : "\s*([^",\n\r]*)", significa que o Jmeter irá extrair tudo o que for encontrado para os dados de resposta 'access_token'.
Os demais campos podem ser preenchidos conforme exemplo:

6 - Executando a Requisição de Autenticação Auth
Após configurar o Extractor de Expressão Regular e executar o teste, é possível verificar na Árvore de Resultados se a requisição foi realizada com sucesso.

Para confirmar o sucesso da autenticação, é necessário acionar outra API que depende do token para ser executada:
A chamada é como a anterior. Incluímos uma Requisição HTTP e informamos os valores de acesso, o caminho da API e, logo abaixo, inserimos um Gerenciador de Cabeçalhos HTTP. Neste caso, a diferença é de que no Gerenciador de Cabeçalhos HTTP iremos informar uma variável com Bearer concatenado com o conteúdo extraído do 'access_token', conforme imagem abaixo:

Olhando para a Árvore de Resultados podemos ver que a API foi executada com sucesso.

IMPORTANTE: Repare que tanto a API que realiza a autenticação, quanto a que utiliza o token gerado, estão no mesmo Grupo de Usuários. Se colocarmos as requisições em grupos diferentes, a requisição que utiliza o token não irá funcionar, pois o Jmeter entende que cada thread funciona de forma independente.
Para garantir que os usuários tenham uma boa experiência ao navegar em uma aplicação, não tenham problemas de lentidão e, consequentemente, não saiam do site em busca de outras alternativas, é de extrema importância considerar nos planejamentos testes de performance.
Com este tipo de teste, submetemos a aplicação à condições específicas, com o objetivo de verificar comportamentos que podem ser causados no processo. Sendo assim, pode-se validar todos os aspectos do sistema, desde problemas de tempo de respostas inaceitáveis, inconsistência de dados, até dados corrompidos.
Saber utilizar o Jmeter com o Basic Auth é essencial, uma vez que esta é uma das possíveis formas de testar um software, pensando não só na segurança dos dados, mas também na experiência do usuário com a sua aplicação.