Medindo performance de uma API REST

Plataform_API (1)Será que em um momento de pico uma API REST aguentará inúmeras requisições? Como testar a performance de uma API REST? Que ferramentas podemos usar para medir o desempenho?

Existem algumas ferramentas no mercado que podem ser usadas para validar a performance de uma API, uma dessas ferramentas é o JMeter. É uma ferramenta open source voltada para testes de performance de softwares. Para fazer download basta acessar esse link.

Neste post vou mostrar como é simples criar um projeto no JMeter para realizar testes de requisições em serviços REST para medir o desempenho. Vou usar como exemplo um serviço que usa o método GET, porém a ferramenta permite que sejam construídos testes para todos os outros métodos HTTP como POST, PUT e DELETE. A ferramenta permite também usar javascript para manipular os dados de uma requisição, o que facilita a variação de cenários. Mais esse será um assunto para o próximo post 😉

A API que vou usar como exemplo neste post retorna uma lista de pessoas no formato JSON conforme imagem abaixo:

8Figura 1 – Serviço que retorna lista de pessoas

Com o JMeter aberto, o primeiro passo é clicar com o botão direito em cima do plano de teste e adicionar uma estrutura chamada “HTTP Header Manager” que fica no menu “Add > Config Element”.

Nesta estrutura devemos apenas informar que o formato da requisição da nossa API que é JSON. Para isso aperte “Add” e informe que a propriedade “Content-Type” é igual a “application/json”, conforme imagem abaixo:

2

Figura 2 – Elemento HTTP Header Manager

Depois adicione um elemento chamando “Thread Group” através da opção “Add > Threads (Users)”. Nessa janela vamos configurar qual será o número de iterações. Para isso preencha os seguintes campos:

“Number of threads (users)”: coloque o valor 10. Isso indica que vamos simular 10 usuários acessando a mesma API.

“Ramp-Up period (in seconds)”: coloque também o valor 10. Esse valor indica o tempo de intervalo de acesso de um usuário para o outro.

“Loop count”: coloque o valor 100. Esse o número indica quantas requisições serão feitas da API por um usuário.

Com essas configurações teremos o seguinte cenário de performance: O software simulará 10 usuários realizando 100 requisições cada da API em um intervalo de 10 segundos cada, o que resulta em um total de 1000 requisições.

3Figura 3 – Elemento Thread Group

O próximo elemento a ser adicionado é um “HTTP Request Defaults“. Para adicioná-lo clique com o botão direito em “Thread Group” e selecione o menu “Config Elements”.

Nesta janela configuramos a porta, o nome do servidor e o path do serviço. A ideia é que se houver vários serviços para o mesmo path, por exemplo, um serviço para consultar lista de pessoas, outro para cadastrar pessoas e outro para excluir pessoas, não seria necessário ficar repetindo essas configurações para cada um desses serviços. Configure os campos da seguinte forma:

Server Name”: coloque o endereço do servidor. No exemplo, como o serviço está rodando local, o nome fica sendo localhost.

Port Number”: informe a porta onde o servidor está rodando.

Path”: coloque qual o URI do serviço.

4

Figura 4: Elemento HTTP Request Defaults

Depois de configurado os dados do servidor onde está rodando o serviço, devemos criar um elemento para chamar a API em si. Para isso clique com o botão direito em “Thread Group” e adicione um elemento chamado “HTTP Request” contido no menu “Sampler”.

No campo “Name” você pode colocar um nome que identifique o serviço que será testado.

Além disso, basta configurar qual o método utilizado pelo serviço, no nosso exemplo, o método é GET. Caso fossemos executar mais serviços com outros métodos, seria necessário criar um elemento do tipo HTTP Request para cada um dos serviços.

5

Figura 5: Elemento HTTP Request

Até aqui criamos toda a estrutura para executar um serviço REST pelo JMeter.

Agora vamos adicionar mais dois elementos que serão responsáveis por exibir os resultados obtidos durante a execução.

Primeiro vamos adicionar o elemento “View Results Tree”. Para acrescentar ao projeto, clique com o botão direito e selecione o menu “Listeners”.

Não é necessário realizar nenhuma configuração neste elemento. Ele irá apenas exibir os resultados de cada chamada da API, como por exemplo, a latência de cada requisição.

6

Figura 6: Elemento View Results Tree

E por último adicione o elemento “View Results in the Table”. Com esse componente podemos ver os resultados de cada requisição listados em uma tabela.

7

Figura 7: Elemento View Results in the Table

Analisando os resultados, podemos criar novos testes aumentando o número de threads e loops, para medir o desempenho e tempo médio de resposta das APIs em diversos cenários.

Simples né?! 🙂 Com o JMeter podemos explorar diversos cenários tanto de performance como de carga de uma API.

É possível fazer download do plano de teste do JMeter por esse link. Esse arquivo contém a estrutura que foi usada como exemplo no post 🙂

 

Por MONISE COSTA

Formada em Sistemas de Informação pela PUC Campinas, MATERANA desde 2011. Apaixonada pela área de TI, Analista de Requisitos na maior parte do tempo e desenvolvedora Java/Android por lazer.

Postado em: 21 de fevereiro de 2017

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário