Usando Templates para Testes de Carregamento API
Tabela de conteúdos
intermediário - This article is part of a series.
Neste entr'do, discutimos o tópico de usar templates (templates) na etapa de teste de carga para APIs. Este blog é, em alguma medida, uma continuação da nossa blog do nosso post anterior onde propusmos os benefícios de alterar as scripts JMeter externamente e dinamicamente. Embora seja verdade que essa técnica possa ser complexa, é importante saber sobre ela e incorporá-la em seu conjunto de ferramentas.
Exemplo #
Como sabemos, os testes de carga de API geralmente exigem enviar um bloco de dados em formato JSON. (Nota: este bloco de dados é conhecido como payload em inglês.) Este bloco consiste em pares de nomes/valores como esta:
{
"Paciente":{
"Identificación": "123456789",
"Médico": "Dr. MataSanos",
"Hospital": "LaBuenaMuerte"
}
}
No nosso exemplo, o objetivo da testagem é criar pacientes em uma determinada aplicação. Para isso, incluímos um elemento Request de HTTP, onde adicionamos o payload no campo Dados do corpo da ordem:
A gráfica mostra como a variável Identificação é atribuída um número aleatório usando parte da variável __UUID. Também definimos as variáveis Médico e Hospital, cujos valores serão lidos usando o elemento [Configuração de Dados CSV]. Este é o processo padrão.
O Problema #
O problema ocorre quando as partes do API mudam, causando que precisemos editar o script (usando a interface gráfica) para alterar a estrutura JSON. Este problema é agravado ainda mais quando essa estrutura é usada por múltiplas scripts.
{
"Paciente":{
"Identificación": "LT${__substring(${__UUID()}, 0, 8)}",
"Médico": "${__eval(${MD_NAME})}",
"Hospital": "${__eval(${HOSPITAL_NAME})}"
}
}
É importante mencionar que este modelo contém apenas as referências às valores das variáveis. Atualmente, os dados (medicina e hospital) existem no arquivo CSV (como mencionamos anteriormente). Note que usamos a função JMeter __eval para forçar a avaliação das variáveis durante o tempo de execução.
Implementamos este método em três etapas:
Passo 1: #
Usando o elemento de Configuração Variáveis Personalizadas, criamos/atribuímos uma variável que contém a localização onde está o arquivo de modelo.
Passo 2: #
Usando o elemento Parâmetros do Usuário Pre-Processador, criamos/atribuímos um parâmetro (PATIENT_JSON) que durante a execução assume o valor da template, desta forma:
CASE_JSON={
"Paciente":{
"Identificación": "LT${__substring(${__UUID()}, 0, 8)}",
"Médico": "${__eval(${MD_NAME})}",
"Hospital": "${__eval(${HOSPITAL_NAME})}"
}
}
Passo 3: #
Finalmente, neste passo, adicionamos uma expressão ao Dados do corpo da Solicitação HTTP, que assegurará valores dinâmicos para as variáveis MD_NAME e HOSPITAL_NAME durante a execução. Estes valores são extraídos dos respectivos arquivos CSV.
Conclusão #
Usando templates em um script proporciona flexibilidade e produtividade que resultam em uma significativa aumento na eficiência das testes de scripts.