Funções Nativas de JMeter (Parte 1)
Tabela de conteúdos
intermediário - This article is part of a series.
I decidiu deixar a tradução literária nesse caso porque acredito que a ideia original permanece intacta. No entanto, em algumas partes, adicionei mais informações que eu obtive desde que este artigo foi publicado quase um ano atrás. Aqui você pode ver versão original do post no inglês.
A alguns tempos atrás, quando eu estava começando com o JMeter, pensei que deveria escrever minhas próprias funções para todos os recursos necessários para desenvolver em meus scripts. Eu encontrava-me desenvolvendo funções Beanshell para cada desafio enfrentado, porque as funções do JMeter não eram tão populares ou “bons” para tarefas básicas. Mas versão após versão, essas funções cresceram em número e capacidade, se tornando soluções compreensíveis para uma ampla variedade de requisitos de teste.
Estas dias, eu não posso criar um script JMeter sem usar pelo menos algumas funções nativas. São tão populares que também são usadas em perguntas de emprego ou entrevistas técnicas. Neste post, espero poder descrever alguns dos seus principais usos e como aproveitar ao máximo.
O que é uma função do JMeter? #
Uma função do JMeter é um cálculo que retorna um valor ou resultado. Essas funções podem abranger várias necessidades, como informações de teste, lógica, variáveis e/ou propriedades, entre outras.
Quais são as funções de JMeter? #
As funções de JMeter podem ser usadas em qualquer componente do plano de teste, que segue a ordem de execução execução da ordem. Ou seja, a ordem de execução de JMeter deve passar por aquele componente para executar a função.
Primeiro, precisamos agrupar as funções por tipo de função ou funcionalidade. Isso nos dará uma ideia melhor de onde usá-las. Também forneceremos alguns exemplos que revelarão como usar essas funções e complementar sua aprendizagem.
Aqui estão os funções do JMeter que abordaremos neste post:
1.- Funções de Informação #
As funções de informação são particularmente úteis para identificar dados sobre o thread em execução ou grupo de threads, o endereço IP do gerador de carga ou seu nome da máquina, ou obter a hora local em múltiplas formatos. Eu diria que essas funções são a lei quando se debuga um script. Por exemplo, a função log permite enviar dados de qualquer nível de detalhes para o arquivo jmeter.log via mensagens.
Os dados retornados por muitas funções são obtidos diretamente do serviço de contexto JMeter, que é como uma API contendo todos os testes e informações sobre as threads. Se você quiser obter um valor específico de uma thread ou grupo de threads, pode acessar a informação dela, cada uma delas contém sua própria context onde todas suas informações estão armazenadas.
Exemplos de funções de informações:
Função | Exemplo | Resultado esperado |
---|---|---|
threadNum | ${__threadNum} | Número numérico para o ID da thread em execução |
threadGroupName | ${__threadGroupName} | String para o nome do grupo de threads em execução |
samplerName | ${__samplerName} | Nome da sampler em execução |
machineIP | ${__machineIP} | Endereço IP do gerador de carga ou computador |
machineName | ${__machineName} | Nome do gerador de carga ou computador |
time | ${__time} | Exibe a hora local do gerador de carga ou computador em formato EPOCH |
time | ${__time(dd-MM-YYYY,)} | Exibe a hora local do equipamento ou gerador de carga na forma dd-MM-YYYY |
timeShift | ${__timeShift(dd-MM-YYYY,,P4D,,)} | Baseado no horário local do equipamento, 4 dias são adicionados, em formato dd-MM-YYYY |
timeShift | ${__timeShift(dd-MM-YYYY,,P-6D,,)} | Baseado no horário local do equipamento, 6 dias são subtraídos, em formato dd-MM-YYYY |
log | ${__log(Hello World)} | Exibe “Hello World” na escala de INFO definida |
logn | ${__logn(${TESTSTART.MS},ERR)} | Exibe o início do teste, na escala ERR |
Nós incluímos imagens dos exemplos e você pode baixar o arquivo abaixo:
O script de JMeter com exemplos de funções de informações requer Java 1.8+, JMeter 5+ e plugins de JMeter.
2.- Funções de Arquivo de Entrada #
Quando lidamos com volumes grandes de dados, é sempre recomendável usar arquivos estáticos. Esses valores podem ser entregues a JMeter via arquivos CSV; cada linha será lida e segmentada para salvar os valores em variáveis. Não sou um fã de usar arquivos CSV ou similares para scripts; prefero gerar minhas próprias informações aleatórias.
Talvez haja situações em que não temos outra opção ou estamos limitados a usar entradas externas. No entanto, devemos evitar o uso excessivo desses soluções porque se o input for grande, pode consumir muitos recursos, particularmente RAM. Por outro lado, você pode acessá-los linha por linha com as funções CSVRead ou todo o arquivo com a função StringFromFile.
Exemplos de funções do arquivo de entrada:
Função | Exemplo | Resultado Esperado |
---|---|---|
StringFromFile | ${__StringFromFile(file.txt,RowAsString,,)} | Lê o arquivo file.txt e salva a primeira linha na variável RowAsString, incrementada por iteração |
FileToString | ${__FileToString(filex.txt,FileAsString,,)} | Lê o arquivo file.txt e salva sua totalidade em uma variável chamada FileAsString |
CSVRead | ${__CSVRead(file.csv,0)} | Retorna a coluna 0 do primeiro linha da tabela file.csv, incrementada por iteração |
XPath | ${__XPath(file.xml,..//[@id=book]/div/a)} | Retorna o valor da avaliação do Xpath na estrutura de arquivo file.xml |
StringToFile | ${__StringToFile(file.out,“Hello World”)} | Escreve “Hello World” no arquivo file.out, variáveis também podem ser escritas |
3.- Funções de Cálculo #
Cálculos matemáticos ou valores aleatórios são frequentemente necessários para nosso lógica de negócios. Por exemplo, pense em quantas passarelas ou ingressos de concerto vamos comprar. Isso poderia facilmente ser resolvido gerando um valor aleatório entre 1 e 10. No entanto, essa função tem suas limitações; eu não recomendo fortemente para a geração de um número de cartão de crédito de 16 dígitos. Há outras funções que faria isso muito mais facilmente e eficientemente, como RandomString.
Se você está lidando com datas ou eventualmente precisar calcular uma data no futuro dentro de um período de tempo, mas dentro de um intervalo de 10 a 60 dias, a função RandomDate é a solução ideal. Eu pessoalmente uso essa função em conjunto com a função timeShift para calcular uma data dentro do intervalo de 10 a 60 dias no futuro e seria algo assim.
${__RandomDate(MM/dd/YYYY,${__timeShift(MM/dd/YYYY,,P10D,,)},${__timeShift(MM/dd/YYYY,,P60D,,)},,)}
Adicionalmente, se você precisar acompanhar um número específico de iterações ou solicitações para um serviço ou produto, o contador pode ser usado dentro da requisição para manter uma contagem sequencial dos ocorrencias ou invocações. Este variável pode crescer por meio de threads ou grupos de threads, dependendo das nossas necessidades.
Exemplos de funções de cálculo:
Função | Exemplo | Resultado Esperado |
---|---|---|
Contador | ${__counter(TRUE,C1)} | Contagem de execução por thread |
Contador | ${__counter(FALSE,C2)} | Contagem de execução por grupo de threads, opcional definido |
Digesto | ${__digest(MD5,Test1234,,,)} | Digesto da texto “Test1234” usando MD5 |
Digesto | ${__digest(SHA-256,Test1234,mysalt,,)} | Digesto do texto “Test1234” usando SHA-256 com um sal |
Soma de inteiros | ${__intSum(10,20,IntSum)} | Exibe a soma de dois números inteiros, também salva o resultado na variável IntSum |
Soma de longos | ${__longSum(65535,65535,LongSum)} | Exibe a soma de dois números inteiros, também salva o resultado na variável LongSum |
Data aleatória | ${__RandomDate(,,2021-01-01,,)} | Gera uma data aleatória entre hoje e 2021-01-01 |
Valor aleatório múltiplos de variáveis | ${__RandomFromMultipleVars(Var1|Var2,)} | Escolhe um valor aleatório e exibe o resultado |
String aleatória | ${__RandomString(16,1234567890,)} | Gera uma string de 16 caracteres, com um valor aleatório escolhido em cada posição |
String aleatória | ${__RandomString(16,abcdefghijkl,)} | Gera uma string de 16 caracteres, com um valor aleatório escolhido em cada posição |
UUID | ${__UUID()} | Gera um UUID aleatório, seja 16 bytes ou 128 bits |
Nós incluímos imagens dos exemplos e você pode baixar o arquivo abaixo:
O script de JMeter com exemplos de funções de cálculo requer Java 1.8+, JMeter 5+ e plugins de JMeter.