20. Funções e Variáveis ¶
As funções JMeter são valores especiais que podem preencher campos de qualquer Sampler ou outro elemento em uma árvore de teste. Uma chamada de função se parece com isso:
${__functionName(var1,var2,var3)}
Onde "__functionName" corresponde ao nome de uma função.
Os parênteses cercam os parâmetros enviados para a função, por exemplo ${__time(YMD)}
Os parâmetros reais variam de função para função. Funções que não requerem parâmetros podem deixar os parênteses, por exemplo ${__threadNum} .
Se um parâmetro de função contiver uma vírgula, certifique-se de escapar disso com " \ ", caso contrário, o JMeter o tratará como um delimitador de parâmetro. Por exemplo:
${__time(EEE\, d MMM aaaa)}Se a vírgula não for escapada - por exemplo, ${__javaScript(Math.max(2,5))} - você receberá um erro como:
ERRO - jmeter.functions.JavaScript: Erro ao processar Javascript: [Math.max(2] org.mozilla.javascript.EvaluatorException: faltando ) após a lista de argumentos (<cmd>#1)Isso ocorre porque a string " Math.max(2,5) " é tratada como sendo dois parâmetros para a função __javascript:
Math.max(2 e 5)
Outras mensagens de erro são possíveis.
As variáveis são referenciadas da seguinte forma:
${VARIÁVEL}
Se uma função ou variável indefinida for referenciada, o JMeter não relata/registra um erro - a referência é retornada inalterada. Por exemplo, se UNDEF não estiver definido como uma variável, o valor de ${UNDEF} será ${UNDEF} . Variáveis, funções (e propriedades) fazem distinção entre maiúsculas e minúsculas. O JMeter apara os espaços dos nomes das variáveis antes de usar, então, por exemplo, ${__Random(1,63, LOTTERY )} usará a variável ' LOTTERY ' em vez de ' LOTTERY '.
Como alternativa, use / em vez do separador de caminho - por exemplo, C:/test/${test} - as JVMs do Windows converterão os separadores conforme necessário.
Lista de funções, agrupadas vagamente em tipos.
Tipo de função | Nome | Comente | Desde |
---|---|---|---|
Em formação | threadNum | obter o número da linha | 1.X |
Em formação | threadGroupName | obter o nome do grupo de threads | 4.1 |
Em formação | samplerName | obter o nome do amostrador (rótulo) | 2,5 |
Em formação | IP da máquina | obter o endereço IP da máquina local | 2.6 |
Em formação | nome da maquina | obter o nome da máquina local | 1.X |
Em formação | Tempo | retornar a hora atual em vários formatos | 2.2 |
Em formação | Mudança de horário | retornar uma data em vários formatos com a quantidade especificada de segundos/minutos/horas/dias adicionados | 3.3 |
Em formação | registro | registrar (ou exibir) uma mensagem (e retornar o valor) | 2.2 |
Em formação | logar | registrar (ou exibir) uma mensagem (valor de retorno vazio) | 2.2 |
Entrada | StringFromFile | ler uma linha de um arquivo | 1,9 |
Entrada | FileToString | ler um arquivo inteiro | 2.4 |
Entrada | CSVRead | ler do arquivo delimitado por CSV | 1,9 |
Entrada | XPath | Use uma expressão XPath para ler de um arquivo | 2.0.3 |
Entrada | StringToFile | escrever uma string em um arquivo | 5.2 |
Cálculo | contador | gerar um número incrementado | 1.X |
Formatação | DateTimeConvert | Converter uma data ou hora do formato de origem para o formato de destino | 4,0 |
Cálculo | digerir | Gerar um resumo (SHA-1, SHA-256, MD5...) | 4,0 |
Cálculo | intSoma | adicionar números inteiros | 1.8.1 |
Cálculo | LongSoma | adicionar números longos | 2.3.2 |
Cálculo | Aleatório | gerar um número aleatório | 1,9 |
Cálculo | RandomDate | gerar data aleatória dentro de um intervalo de datas específico | 3.3 |
Cálculo | RandomFromMultipleVars | extrai um elemento dos valores de um conjunto de variáveis separadas por | | 3.1 |
Cálculo | RandomString | gerar uma string aleatória | 2.6 |
Cálculo | UUID | gerar um UUID tipo 4 aleatório | 2.9 |
Script | groovy | execute um script Apache Groovy | 3.1 |
Script | BeanShell | executar um script BeanShell | 1.X |
Script | JavaScript | processar JavaScript (Nashorn) | 1,9 |
Script | jexl2 | avaliar uma expressão Commons Jexl2 | jexl2(2.1.1) |
Script | jexl3 | avaliar uma expressão Commons Jexl3 | jexl3 (3.0) |
Propriedades | isPropDefined | Testar se existe uma propriedade | 4,0 |
Propriedades | propriedade | ler uma propriedade | 2,0 |
Propriedades | P | ler uma propriedade (método abreviado) | 2,0 |
Propriedades | setProperty | definir uma propriedade JMeter | 2.1 |
Variáveis | dividir | Dividir uma string em variáveis | 2.0.2 |
Variáveis | avaliação | avaliar uma expressão variável | 2.3.1 |
Variáveis | evalVar | avaliar uma expressão armazenada em uma variável | 2.3.1 |
Propriedades | isVarDefined | Testar se existe uma variável | 4,0 |
Variáveis | V | avaliar um nome de variável | 2.3RC3 |
Corda | Caracteres | gerar valores de caracteres Unicode a partir de uma lista de números | 2.3.3 |
Corda | changeCase | Alterar caso seguindo diferentes modos | 4,0 |
Corda | escapeHtml | Codifique strings usando codificação HTML | 2.3.3 |
Corda | escapeOroRegexpChars | aspas meta caracteres usados pela expressão regular ORO | 2.9 |
Corda | escapeXml | Codifique strings usando codificação XML | 3.2 |
Corda | Função regex | analisar a resposta anterior usando uma expressão regular | 1.X |
Corda | não escapar | Strings de processo contendo escapes Java (por exemplo, \n & \t) | 2.3.3 |
Corda | unescapeHtml | Decodificar strings codificadas em HTML | 2.3.3 |
Corda | urldecode | Decodificar uma string application/x-www-form-urlencoded | 2.10 |
Corda | código de URL | Codifique uma string para uma string application/x-www-form-urlencoded | 2.10 |
Corda | Nome do Plano de Teste | Retornar o nome do plano de teste atual | 2.6 |
20.1 O que as funções podem fazer ¶
Existem dois tipos de funções: valores estáticos definidos pelo usuário (ou variáveis) e funções internas.
Os valores estáticos definidos pelo usuário permitem que o usuário defina as variáveis a serem substituídas pelo seu valor estático quando uma árvore de teste é compilada e enviada para execução. Essa substituição ocorre uma vez no início da execução de teste. Isso pode ser usado para substituir o campo DOMAIN de todas as solicitações HTTP, por exemplo - tornando simples alterar um teste para direcionar um servidor diferente com o mesmo teste.
Observe que as variáveis não podem ser aninhadas no momento; ou seja, ${Var${N}} não funciona. A função __V (variável) pode ser usada para fazer isso: ${__V(Var${N})} . Você também pode usar ${__BeanShell(vars.get("Var${N}")} .
Este tipo de substituição é possível sem funções, mas foi menos conveniente e menos intuitivo. Ele exigia que os usuários criassem elementos de configuração padrão que preencheriam os valores em branco dos Samplers. As variáveis permitem substituir apenas parte de um determinado valor, não apenas preencher valores em branco.
Com funções integradas, os usuários podem calcular novos valores em tempo de execução com base nos dados de resposta anteriores, em qual encadeamento a função está, a hora e muitas outras fontes. Esses valores são gerados atualizados para cada solicitação ao longo do teste.
20.2 Onde as funções e variáveis podem ser usadas? ¶
Funções e variáveis podem ser escritas em qualquer campo de qualquer componente de teste (além do TestPlan - veja abaixo). Alguns campos não permitem strings aleatórias porque estão esperando números e, portanto, não aceitarão uma função. No entanto, a maioria dos campos permitirá funções.
As funções usadas no Plano de Teste têm algumas restrições. As variáveis de thread do JMeter não serão totalmente configuradas quando as funções forem processadas, portanto, os nomes de variáveis passados como parâmetros não serão configurados e as referências de variáveis não funcionarão, então split() e regex() e as funções de avaliação de variáveis não não funciona. A função threadNum() não funcionará (e não faz sentido no nível do plano de teste). As seguintes funções devem funcionar bem no plano de teste:
- intSoma
- LongSoma
- nome da maquina
- BeanShell
- groovy
- JavaScript
- jexl2/jexl3
- aleatória
- Tempo
- funções de propriedade
- funções de registro
Os elementos de configuração são processados por um thread separado. Portanto, funções como __threadNum não funcionam corretamente em elementos como variáveis definidas pelo usuário. Observe também que as variáveis definidas em um elemento UDV não estão disponíveis até que o elemento seja processado.
SELECT item da tabela onde name='${VAR}'não
SELECT item da tabela onde nome=${VAR}(a menos que o próprio VAR contenha as aspas)
20.3 Como referenciar variáveis e funções ¶
A referência de uma variável em um elemento de teste é feita colocando o nome da variável entre colchetes com ' ${ ' e ' } '.
As funções são referenciadas da mesma maneira, mas por convenção, os nomes das funções começam com " __ " para evitar conflito com nomes de valores de usuário * . Algumas funções recebem argumentos para configurá-las, e estes vão entre parênteses, delimitados por vírgulas. Se a função não receber argumentos, os parênteses podem ser omitidos.
Os valores de argumento que contêm vírgulas devem ser escapados conforme necessário. Se você precisar incluir uma vírgula no valor do seu parâmetro, escape-o assim: ' \, '. Isso se aplica, por exemplo, às funções de script - Javascript, Beanshell, Jexl, groovy - onde é necessário escapar de quaisquer vírgulas que possam ser necessárias em chamadas de métodos de script - por exemplo
${__BeanShell(vars.put("nome"\,"valor"))}
Alternativamente, você pode definir seu script como uma variável, por exemplo, no Plano de Teste:
SCRIPT vars.put("nome","valor")O script pode ser referenciado da seguinte forma:
${__BeanShell(${SCRIPT})}Não há necessidade de escapar vírgulas na variável SCRIPT porque a chamada da função é analisada antes que a variável seja substituída por seu valor. Isso funciona bem em conjunto com os Samplers JSR223 ou BeanShell, pois eles podem ser usados para testar scripts Javascript, Jexl e BeanShell.
As funções podem referenciar variáveis e outras funções, por exemplo ${__XPath(${__P(xpath.file),${XPATH})} usará a propriedade " xpath.file " como o nome do arquivo e o conteúdo da variável XPATH como a expressão a ser pesquisada.
O JMeter fornece uma ferramenta para ajudá-lo a construir chamadas de função para várias funções internas, que você pode copiar e colar. Ele não escapará automaticamente dos valores para você, pois as funções podem ser parâmetros para outras funções, e você deve apenas escapar dos valores que pretende como literais.
O valor de uma variável ou função pode ser informado usando a função __logn() . A referência da função __logn() pode ser usada em qualquer lugar no plano de teste após a definição da variável. Como alternativa, o amostrador Java Request pode ser usado para criar uma amostra contendo referências de variáveis; a saída será mostrada no Listener apropriado. Observe que há um Debug Sampler que pode ser usado para exibir os valores de variáveis etc. no Tree View Listener.
20.4 A Caixa de Diálogo do Auxiliar de Função ¶
A caixa de diálogo Function Helper está disponível no menu Tools do JMeter.
Usando o Function Helper, você pode selecionar uma função no menu suspenso e atribuir valores para seus argumentos. A coluna da esquerda na tabela fornece uma breve descrição do argumento e a coluna da direita é onde você escreve o valor desse argumento. Funções diferentes recebem argumentos diferentes.
Depois de fazer isso, clique no botão "gerar" e a string apropriada será gerada para você copiar e colar em seu plano de teste onde quiser.
20.5 Funções ¶
__regexFunction¶ _
A função Regex é usada para analisar a resposta anterior (ou o valor de uma variável) usando qualquer expressão regular (fornecida pelo usuário). A função retorna a string do modelo com os valores das variáveis preenchidos.
O __regexFunction também pode armazenar valores para uso futuro. No sexto parâmetro, você pode especificar um nome de referência. Depois que essa função for executada, os mesmos valores poderão ser recuperados posteriormente usando a sintaxe para valores definidos pelo usuário. Por exemplo, se você inserir " refName " como o sexto parâmetro, poderá usar:
- ${refName} para se referir ao resultado calculado do segundo parâmetro ("Modelo para a string de substituição") analisado por esta função
- ${refName_g0} para se referir a toda a correspondência analisada por esta função.
- ${refName_g1} para se referir ao primeiro grupo analisado por esta função.
- ${refName_g#} para se referir ao enésimo grupo analisado por esta função.
- ${refName_matchNr} para se referir ao número de grupos encontrados por esta função.
Parâmetros ¶
- Um inteiro - Diz ao JMeter para usar essa correspondência. ' 1 ' para a primeira correspondência encontrada, ' 2 ' para a segunda e assim por diante
- RAND - Diz ao JMeter para escolher uma correspondência aleatoriamente.
- ALL - Diz ao JMeter para usar todas as correspondências e criar uma string de modelo para cada uma e depois anexá-las todas. Esta opção é pouco utilizada.
- Um número flutuante entre 0 e 1 - diz ao JMeter para encontrar a X a correspondência usando a fórmula: (number_of_matches_found * float_number ) arredondado para o inteiro mais próximo.
Os valores armazenados são ${refName} (a string do modelo de substituição) e ${refName_g#} onde " # " é o número do grupo da expressão regular (" 0 " pode ser usado para se referir a toda a correspondência).
__contador¶ _
O contador gera um novo número cada vez que é chamado, começando com 1 e incrementando em +1 a cada vez. O contador pode ser configurado para manter os valores de cada usuário simulado separados ou para usar o mesmo contador para todos os usuários. Se os valores de cada usuário forem incrementados separadamente, é como contar o número de iterações por meio do plano de teste. Um contador global é como contar quantas vezes esse pedido foi executado.
O contador usa uma variável inteira para manter a contagem, que, portanto, tem um máximo de 2.147.483.647.
As instâncias da função de contador são completamente independentes. O contador global - " FALSE " - é mantido separadamente por cada instância do contador.
Várias chamadas de função
__counter na mesma iteração não incrementarão ainda mais o valor.
Se você quiser ter uma contagem que aumenta para cada amostra, use a função em um pré-processador, como User Parameters .
Parâmetros ¶
Os valores armazenados estão no formato ${refName} . Isso permite que você mantenha um contador e consulte seu valor em vários lugares.
__threadNum ¶
A função de número de encadeamento simplesmente retorna o número do encadeamento que está sendo executado no momento. Esses números são apenas localmente únicos em relação ao seu ThreadGroup, o que significa que o thread #1 em um threadgroup é indistinguível do thread #1 em outro threadgroup, do ponto de vista desta função.
ctx.getThreadNum()
Não há argumentos para esta função.
Exemplo de uso:
${__threadNum}retorna um número entre 1 e o número máximo de threads em execução configurados no grupo de threads que o contém
__threadGroupName ¶
A função de nome do grupo de threads simplesmente retorna o nome do grupo de threads que está sendo executado.
Não há argumentos para esta função.
Exemplo de uso:
${__threadGroupName}
__intSoma¶ _
A função intSum pode ser usada para calcular a soma de dois ou mais valores inteiros.
Parâmetros ¶
Exemplos:
${__intSum(2,5,MYVAR)}retornará 7 (2+5) e armazenará o resultado na variável MYVAR. Então ${MYVAR} será igual a 7.
${__intSoma(2,5,7)}retornará 14 (2+5+7) e armazenará o resultado na variável MYVAR.
${__intSum(1,2,5,${MYVAR})}retornará 16 se o valor MYVAR for igual a 8, 1+2+5+${MYVAR})
__longSoma¶ _
A função longSum pode ser usada para calcular a soma de dois ou mais valores longos, use isso em vez de __intSum sempre que você souber que seus valores não estarão no intervalo -2147483648 a 2147483647.
Parâmetros ¶
Exemplos:
${__longSum(2,5,MYVAR)}retornará 7 (2+5) e armazenará o resultado na variável MYVAR. Então ${MYVAR} será igual a 7.
${__longSum(2,5,7)}retornará 14 (2+5+7) e armazenará o resultado na variável MYVAR.
${__longSum(1,2,5,${MYVAR})}retornará 16 se o valor MYVAR for igual a 8, 1+2+5+${MYVAR})
__StringFromFile¶ _
A função StringFromFile pode ser usada para ler strings de um arquivo de texto. Isso é útil para executar testes que exigem muitos dados variáveis. Por exemplo, ao testar um aplicativo bancário, 100s ou 1000s de diferentes números de conta podem ser necessários.
Consulte também o elemento de teste CSV Data Set Config, que pode ser mais fácil de usar. No entanto, isso atualmente não oferece suporte a vários arquivos de entrada.
Cada vez que é chamado, ele lê a próxima linha do arquivo. Todos os encadeamentos compartilham a mesma instância, portanto, encadeamentos diferentes obterão linhas diferentes. Quando o final do arquivo for atingido, ele começará a ler novamente desde o início, a menos que a contagem máxima de loops tenha sido atingida. Se houver várias referências à função em um script de teste, cada uma abrirá o arquivo independentemente, mesmo que os nomes dos arquivos sejam os mesmos. [Se o valor for usado novamente em outro lugar, use nomes de variáveis diferentes para cada chamada de função.]
Se ocorrer um erro ao abrir ou ler o arquivo, a função retornará a string " **ERR** "
Parâmetros ¶
O parâmetro do nome do arquivo é resolvido quando o arquivo é aberto ou reaberto.
O parâmetro de nome de referência (se fornecido) é resolvido toda vez que a função é executada.
Usando números de sequência:
Ao usar os números de sequência opcionais, o nome do caminho é usado como a string de formato para java.text.DecimalFormat . O número de sequência atual é passado como o único parâmetro. Se o número inicial opcional não for especificado, o nome do caminho será usado como está. As sequências de formatação úteis são:
- #
- insira o número, sem zeros ou espaços à esquerda
- 000
- insira o número compactado em três dígitos com zeros à esquerda, se necessário
- pino#'.'dat
- Irá gerar os dígitos sem zeros à esquerda e tratar o ponto literalmente como
pin1.dat , …, pin9.dat , pin10.dat , …, pin9999.dat - pin000'.'dat
- Irá gerar zeros à esquerda enquanto mantém o ponto. Quando os números começarem a ter mais dígitos do que os três dígitos que este formato sugere, a sequência usará mais dígitos como pode ser visto em
pin001.dat , … pin099.dat , …, pin999.dat , …, pin9999.dat - pin'.'dat#
- Anexará dígitos sem zeros à esquerda enquanto mantém o ponto e gera
pin.dat1 , …, pin.dat9 , …, pin.dat999
Se forem necessários mais dígitos do que caracteres de formatação, o número será expandido conforme necessário.
Para evitar que um caractere de formatação seja interpretado, coloque-o entre aspas simples. Observe
que "
. _ _ _ _ _ _
_ _ _ é " , " - o que significa que " #. " se torna " nnn, ".
Consulte a documentação do DecimalFormat para obter detalhes completos.
Se o nome do caminho não contiver nenhum caractere de formatação especial, o número de sequência atual será anexado ao nome, caso contrário, o número será inserido de acordo com as instruções de formatação.
Se o número de sequência inicial for omitido e o número de sequência final for especificado, o número de sequência será interpretado como uma contagem de loops e o arquivo será usado no máximo " final " vezes. Nesse caso, o nome do arquivo não está formatado.
${__StringFromFile(PIN#'.'DAT,,1,2)} - lê PIN1.DAT , PIN2.DAT
${__StringFromFile(PIN.DAT,,,2)} - lê PIN.DAT duas vezes
Observe que o " . " no PIN.DAT acima devenão ser citado. Nesse caso, o número inicial é omitido, portanto, o nome do arquivo é usado exatamente como está.
__machineName¶ _
A função machineName retorna o nome do host local. Isso usa o método Java InetAddress.getLocalHost() e o passa para getHostName()
Parâmetros ¶
Exemplos:
${__machineName()}retornará o nome do host da máquina
${__machineName}retornará o nome do host da máquina
__machineIP¶ _
A função machineIP retorna o endereço IP local. Isso usa o método Java InetAddress.getLocalHost() e o passa para getHostAddress()
Parâmetros ¶
Exemplos:
${__machineIP()}retornará o endereço IP da máquina
${__machineIP}retornará o endereço IP da máquina
__javaScript¶ _
A função javaScript executa uma parte do código JavaScript (não Java!) e retorna seu valor
A função JMeter Javascript chama um interpretador JavaScript autônomo. Javascript é usado como uma linguagem de script, para que você possa fazer cálculos etc.
Para o motor Rhino, consulte Visão geral do Mozilla Rhino
As seguintes variáveis são disponibilizadas para o script:
- log - o Logger para a função
- ctx - objeto JMeterContext
- vars - objeto JMeterVariables
- threadName - String contendo o nome do thread atual
- sampler - objeto Sampler atual (se houver)
- sampleResult - objeto SampleResult anterior (se houver)
- props - objeto JMeterProperties (class java.util.Properties )
Rhinoscript permite acesso a métodos estáticos através de seu objeto Packages. Consulte a documentação Java de script . Por exemplo, pode-se acessar os métodos estáticos JMeterContextService assim: Java.type("org.apache.jmeter.threads.JMeterContextService").getTotalThreads()
Parâmetros ¶
- new Date() - retorna a data e hora atuais
- Math.floor(Math.random()*(${maxRandom}+1)) - um número aleatório entre 0 e a variável maxRandom
- ${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)) - um número aleatório entre as variáveis minRandom e maxRandom
- "${VAR}"=="abcd"
${__javaScript('${sp}'.slice(7\,99999))}a vírgula após 7 é escapada.
Exemplos:
${__javaScript(nova data())}retornará sab 09 de janeiro de 2016 16:22:15 GMT+0100 (CET)
${__javaScript(new Date(),MYDATE)}retornará sab 09 de janeiro de 2016 16:22:15 GMT+0100 (CET) e o armazenará na variável MYDATE
${__javaScript(Math.floor(Math.random()*(${maxRandom}+1)),MYRESULT)}usará a variável maxRandom, retornará um valor aleatório entre 0 e maxRandom e o armazenará em MYRESULT
${__javaScript(${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1)),MYRESULT)}usará as variáveis maxRandom e minRandom , retornará um valor aleatório entre maxRandom e minRandom e o armazenará na variável MYRESULT
${__javaScript("${VAR}"=="abcd",MYRESULT)}irá comparar o valor da variável VAR com abcd , retornar true ou false e armazenar o resultado em MYRESULT
__Aleatório¶ _
A função aleatória retorna um número aleatório que fica entre os valores mínimo e máximo fornecidos.
Parâmetros ¶
Exemplos:
${__Random(0,10)}retornará um número aleatório entre 0 e 10
${__Random(0,10, MYVAR)}retornará um número aleatório entre 0 e 10 e o armazenará em MYVAR . ${MYVAR} conterá o número aleatório
__RandomDate ¶
A função RandomDate retorna uma data aleatória que fica entre os valores de data de início e data de término fornecidos.
Parâmetros ¶
Exemplos:
${__RandomDate(,,2050-07-08,,)}retornará uma data aleatória entre agora e 2050-07-08 . Por exemplo 2039-06-21
${__RandomDate(dd MM aaaa,,08 07 2050,,)}retornará uma data aleatória com um formato personalizado como 04 03 2034
__RandomString¶ _
A função RandomString retorna uma String aleatória de comprimento usando caracteres em chars para usar.
Parâmetros ¶
Exemplos:
${__RandomString(5)}retornará uma string aleatória de 5 caracteres que pode ser legível ou não
${__RandomString(10,abcdefg)}retornará uma string aleatória de 10 caracteres escolhidos do conjunto abcdefg , como cdbgdbeebd ou adbfeggfad , …
${__RandomString(6,a12zeczclk, MYVAR)}retornará uma string aleatória de 6 caracteres escolhidos do conjunto a12zeczclk e armazenará o resultado em MYVAR , MYVAR conterá uma string como 2z22ak ou z11kce , …
__RandomFromMultipleVars ¶
A função RandomFromMultipleVars retorna um valor aleatório com base nos valores de variáveis fornecidos por Source Variables .
As variáveis podem ser simples ou multivaloradas, pois podem ser geradas pelos seguintes extratores:- Extrator de limite
- Extrator de Expressão Regular
- Extrator de seletor de CSS
- Extrator JSON
- Extrator XPath
- Extrator XPath2
Parâmetros ¶
Exemplos:
${__RandomFromMultipleVars(val)}irá devolver uma string aleatória baseada no conteúdo da variável val tendo em conta se são multivalores ou não
${__RandomFromMultipleVars(val1|val2)}irá devolver uma string aleatória baseada no conteúdo das variáveis val1 e val2 tendo em conta se são multivalores ou não
${__RandomFromMultipleVars(val1|val2, MYVAR)}retornará uma string aleatória baseada no conteúdo das variáveis val1 e val2 levando em consideração se são multivalores ou não e armazenará o resultado em MYVAR
__UUID¶ _
A função UUID retorna um tipo pseudo aleatório 4 Universally Unique IDentifier (UUID).
Parâmetros ¶
Exemplos:
${__UUID()}retornará UUIDs com este formato: c69e0dd1-ac6b-4f2b-8d59-5d4e8743eecd
__CSVRead¶ _
A função CSVRead retorna uma string de um arquivo CSV (cf StringFromFile )
NOTA: O JMeter suporta vários nomes de arquivo.
Na maioria dos casos, o elemento CSV Data Set Config mais recente é mais fácil de usar.
Quando um nome de arquivo é encontrado pela primeira vez, o arquivo é aberto e lido em uma matriz interna. Se uma linha em branco for detectada, isso será tratado como fim de arquivo - isso permite que comentários finais sejam usados.
Todas as referências subsequentes ao mesmo nome de arquivo usam a mesma matriz interna. NB o caso do nome do arquivo é significativo para a função, mesmo que o sistema operacional não se importe, então CSVRead(abc.txt,0) e CSVRead(aBc.txt,0) se refeririam a diferentes arrays internos.
O recurso *ALIAS permite que o mesmo arquivo seja aberto mais de uma vez e também permite nomes de arquivo mais curtos.
Cada thread tem seu próprio ponteiro interno para sua linha atual na matriz de arquivos. Quando um encadeamento se refere ao arquivo pela primeira vez, ele será alocado na próxima linha livre na matriz, de modo que cada encadeamento acessará uma linha diferente de todos os outros encadeamentos. [A menos que haja mais threads do que linhas na matriz.]
Parâmetros ¶
Por exemplo, você pode configurar algumas variáveis da seguinte forma:
- COL1a ${__CSVRead(random.txt,0)}
- COL2a ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}
- COL1b ${__CSVRead(random.txt,0)}
- COL2b ${__CSVRead(random.txt,1)}${__CSVRead(random.txt,next)}
__propriedade¶ _
A função de propriedade retorna o valor de uma propriedade JMeter. Se o valor da propriedade não puder ser encontrado e nenhum padrão tiver sido fornecido, ele retornará o nome da propriedade. Ao fornecer um valor padrão, não há necessidade de fornecer um nome de função - o parâmetro pode ser definido como nulo e será ignorado.
Por exemplo:
- ${__property(user.dir)} - valor de retorno de user.dir
- ${__property(user.dir,UDIR)} - retorna o valor de user.dir e salva em UDIR
- ${__property(abcd,ABCD,atod)} - retorna o valor da propriedade abcd (ou " atod " se não definido) e salva em ABCD
- ${__property(abcd,,atod)} - retorna o valor da propriedade abcd (ou " atod " se não estiver definida) mas não a salva
Parâmetros ¶
__P¶ _
Esta é uma função de propriedade simplificada que se destina ao uso com propriedades definidas na linha de comando. Ao contrário da função __property , não há opção para salvar o valor em uma variável e, se nenhum valor padrão for fornecido, assume-se que é 1. O valor 1 foi escolhido porque é válido para variáveis de teste comuns, como loops, contagem de threads, rampa acima etc.
Por exemplo:Defina o valor da propriedade:
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.eduBusque os valores:
${__P(group1.threads)} - retorna o valor de group1.threads
${__P(group1.loops)} - retorna o valor de group1.loops
${__P(hostname,www.dummy.org) } - retorna o valor da propriedade hostname ou www.dummy.org se não estiver definido
Nos exemplos acima, a primeira chamada de função retornaria 7 , a segunda retornaria 1 e a última retornaria www.dummy.org (a menos que essas propriedades fossem definidas em outro lugar!)
Parâmetros ¶
__log¶ _
A função log registra uma mensagem e retorna sua string de entrada
Parâmetros ¶
Os nomes de nível de log OUT e ERR são usados para direcionar a saída para System.out e System.err , respectivamente. Nesse caso, a saída é sempre impressa - não depende da configuração de log atual.
- ${__log(Mensagem)}
- escrito no arquivo de log como " … thread Name: Message "
- ${__log(Message,OUT)}
- escrito na janela do console
- ${__log(${VAR},,,VAR=)}
- escrito no arquivo de log como " … thread Name VAR=value "
__logn¶ _
A função logn registra uma mensagem e retorna a string vazia
Parâmetros ¶
Os nomes de nível de log OUT e ERR são usados para direcionar a saída para System.out e System.err , respectivamente. Nesse caso, a saída é sempre impressa - não depende da configuração de log atual.
- ${__logn(VAR1=${VAR1},OUT)}
- escreva o valor da variável na janela do console
__BeanShell¶ _
A função BeanShell avalia o script passado para ela e retorna o resultado.
Para obter detalhes completos sobre o uso do BeanShell, consulte o site do BeanShell em http://www.beanshell.org/
Uma única instância de uma função pode ser chamada de vários threads. No entanto, o método execute() da função é sincronizado.
Se a propriedade " beanshell.function.init " for definida, ela será passada para o Interpreter como o nome de um arquivo de origem. Isso pode ser usado para definir métodos e variáveis comuns. Há um arquivo init de amostra no diretório bin: BeanShellFunction.bshrc .
As seguintes variáveis são definidas antes da execução do script:
- log - o Logger para a função BeanShell (*)
- ctx - objeto JMeterContext
- vars - objeto JMeterVariables
- props - objeto JMeterProperties (class java.util.Properties )
- threadName - o threadName (String)
- Sampler - o Sampler atual , se houver
- SampleResult - o SampleResult atual , se houver
Parâmetros ¶
Exemplo:
- ${__BeanShell(123*456)}
- retorna 56088
- ${__BeanShell(source("function.bsh"))}
- processa o script em function.bsh
__groovy¶ _
A função __groovy avalia os scripts Apache Groovy passados para ela e retorna o resultado.
Se a propriedade " groovy.utilities " estiver definida, ela será carregada pelo ScriptEngine. Isso pode ser usado para definir métodos e variáveis comuns. Há um arquivo init de amostra no diretório bin : utility.groovy .
As seguintes variáveis são definidas antes da execução do script:
- log - o Logger para a função groovy (*)
- ctx - objeto JMeterContext
- vars - objeto JMeterVariables
- props - objeto JMeterProperties (class java.util.Properties )
- threadName - o threadName (String)
- sampler - o Sampler atual , se houver
- prev - o SampleResult anterior , se houver
- OUT - System.out
(*) significa que isso é definido antes do arquivo init, se houver, ser processado. Outras variáveis variam de invocação para invocação.
Por exemplo , não faça o seguinte:
${__groovy("${myVar}".substring(0\,2))}
Imagine que a variável myVar muda a cada transação, o Groovy acima não pode ser armazenado em cache, pois o script muda a cada vez.
Em vez disso, faça o seguinte, que pode ser armazenado em cache:
${__groovy(vars.get("myVar").substring(0\,2))}
Parâmetros ¶
Exemplo:
-
${__groovy(123*456)}
- retorna 56088
-
${__groovy(vars.get("myVar").substring(0\,2))}
- Se o valor de var for JMeter , ele retornará JM enquanto executa String.substring(0,2) . Observe que , foi escapado para \,
__dividir ¶
A função split divide a string passada a ela de acordo com o delimitador e retorna a string original. Se algum delimitador for adjacente, " ? " será retornado como o valor. As strings divididas são retornadas nas variáveis ${VAR_1} , ${VAR_2} etc. A contagem de variáveis é retornada em ${VAR_n} . Um delimitador à direita é tratado como uma variável ausente e " ? " é retornado. Além disso, para permitir que funcione melhor com o controlador ForEach, __split agora exclui a primeira variável não utilizada caso ela tenha sido definida por uma divisão anterior.
Exemplo:Defina VAR =" a||c| " no plano de teste.
${__split(${VAR},VAR,|)}
Isso retornará o conteúdo de VAR , ou seja, " a||c| " e definirá as seguintes variáveis:
VAR_n = 4
VAR_1 = a
VAR_2 = ?
VAR_3 = c
VAR_4 = ?
VAR_5 = nulo
Parâmetros ¶
__XPath¶ _
A função XPath lê um arquivo XML e corresponde ao XPath. Cada vez que a função é chamada, a próxima correspondência será retornada. No final do arquivo, ele será contornado até o início. Se nenhum nó corresponder, a função retornará a string vazia e uma mensagem de aviso será gravada no arquivo de log do JMeter.
${__XPath(/path/to/build.xml, //target/@name)}Isso corresponderá a todos os destinos em build.xml e retornará o conteúdo do atributo next name
Parâmetros ¶
__setProperty¶ _
A função setProperty configura o valor de uma propriedade JMeter. O valor de retorno padrão da função é a string vazia, portanto, a chamada da função pode ser usada em qualquer lugar em que as funções sejam válidas.
O valor original pode ser retornado configurando o 3º parâmetro opcional para " true ".
As propriedades são globais para o JMeter, portanto, podem ser usadas para comunicação entre threads e grupos de threads
Parâmetros ¶
__hora¶ _
A função time retorna a hora atual em vários formatos.
Parâmetros ¶
Se a string de formato for omitida, a função retornará a hora atual em milissegundos desde a época. Se o formato corresponder a " /ddd " (onde ddd são dígitos decimais), a função retornará a hora atual em milissegundos dividida pelo valor de ddd . Por exemplo, " /1000 " retorna a hora atual em segundos desde a época. Caso contrário, a hora atual é passada para SimpleDateFormat. Os seguintes aliases abreviados são fornecidos:
- YMD = aaaaMMdd
- HMS = HHmms
- YMDHMS = aaaaMMdd-HHmmss
- USER1 = o que estiver na propriedade JMeter time.USER1
- USER2 = o que estiver na propriedade JMeter time.USER2
Os padrões podem ser alterados definindo a propriedade JMeter apropriada, por exemplo, time.YMD=yyMMdd
${__time(dd/MM/aaaa,)}retornará 21/01/2018 se executado em 21 de janeiro de 2018
${__time(YMD,)}retornará 20180121 se executado em 21 de janeiro de 2018
${__time()}retornará o tempo em milissegundos 1516540541624
__jexl2 ¶
A função jexl retorna o resultado da avaliação de uma expressão Commons JEXL . Consulte os links abaixo para obter mais informações sobre expressões JEXL.
A função __jexl2 usa Commons JEXL 2
Parâmetros ¶
As seguintes variáveis são disponibilizadas para o script:
- log - o Logger para a função
- ctx - objeto JMeterContext
- vars - objeto JMeterVariables
- props - objeto JMeterProperties (class java.util.Properties )
- threadName - String contendo o nome do thread atual
- sampler - objeto Sampler atual (se houver)
- sampleResult - objeto SampleResult anterior (se houver)
- OUT - System.out - ex: OUT.println("message")
Jexl também pode criar classes e chamar métodos nelas, por exemplo:
Systemclass=log.class.forName("java.lang.System"); now=Systemclass.currentTimeMillis();Observe que a documentação do Jexl no site sugere erroneamente que " div " faz divisão inteira. Na verdade, " div " e " / " realizam a divisão normal. Pode-se obter o mesmo efeito da seguinte forma:
i= 5/2; i.intValue(); // ou use i.longValue()
__jexl3¶ _
A função jexl retorna o resultado da avaliação de uma expressão Commons JEXL . Consulte os links abaixo para obter mais informações sobre expressões JEXL.
A função __jexl3 usa Commons JEXL 3
Parâmetros ¶
As seguintes variáveis são disponibilizadas para o script:
- log - o Logger para a função
- ctx - objeto JMeterContext
- vars - objeto JMeterVariables
- props - objeto JMeterProperties (class java.util.Properties )
- threadName - String contendo o nome do thread atual
- sampler - objeto Sampler atual (se houver)
- sampleResult - objeto SampleResult anterior (se houver)
- OUT - System.out - ex: OUT.println("message")
Jexl também pode criar classes e chamar métodos nelas, por exemplo:
Systemclass=log.class.forName("java.lang.System"); now=Systemclass.currentTimeMillis();Observe que a documentação do Jexl no site sugere erroneamente que " div " faz divisão inteira. Na verdade, " div " e " / " realizam a divisão normal. Pode-se obter o mesmo efeito da seguinte forma:
i= 5/2; i.intValue(); // ou use i.longValue()
__V¶ _
A função V (variável) retorna o resultado da avaliação de uma expressão de nome de variável. Isso pode ser usado para avaliar referências de variáveis aninhadas (que não são suportadas no momento).
Por exemplo, se houver variáveis A1 , A2 e N = 1 :
- ${A1} - funciona bem
- ${A${N}} - não funciona (referência de variável aninhada)
- ${__V(A${N})} - funciona bem. A${N} se torna A1 e a função __V retorna o valor de A1
Parâmetros ¶
__evalVar¶ _
A função evalVar retorna o resultado da avaliação de uma expressão armazenada em uma variável.
Isso permite ler uma string de um arquivo e processar qualquer referência de variável nele. Por exemplo, se a variável " query " contiver " selecione ${column} de ${table} " e " column " e " table " contiver " name " e " clientes ", ${__evalVar(query)} será avaliado como " selecione o nome dos clientes ".
__eval¶ _
A função eval retorna o resultado da avaliação de uma expressão de string.
Isso permite interpolar referências de variáveis e funções em uma string que é armazenada em uma variável. Por exemplo, dadas as seguintes variáveis:
- nome = Smith
- coluna = idade
- mesa = aniversários
- SQL = selecione ${column} de ${table} onde name='${name}'
Isso pode ser usado em conjunto com CSV Dataset, por exemplo, onde as instruções SQL e os valores são definidos no arquivo de dados.
__char ¶
A função char retorna o resultado da avaliação de uma lista de números como caracteres Unicode. Veja também __unescape() , abaixo.
Isso permite adicionar valores de caracteres arbitrários em campos.
Parâmetros ¶
Exemplos:
${__char(13,10)} = ${__char(0xD,0xA)} = ${__char(015,012)} = CRLF
${__char(165)} = ¥ (ienes)
__unescapar ¶
A função unescape retorna o resultado da avaliação de uma string com escape Java. Veja também __char() acima.
Isso permite adicionar caracteres a campos que são complicados (ou impossíveis) de definir por meio da GUI.
Exemplos:
${__unescape(\r\n)} = CRLF
${__unescape(1\t2)} = 1 [tab] 2
__unescapeHtml¶ _
Função para liberar uma string contendo escapes de entidade HTML para uma string contendo os caracteres Unicode reais correspondentes aos escapes. Suporta entidades HTML 4.0.
Por exemplo, a cadeia
${__unescapeHtml(<Français>)}retornará <Français> .
Se uma entidade não for reconhecida, ela será deixada sozinha e inserida literalmente na string de resultado. por exemplo ${__unescapeHtml(>&zzzz;x)} retornará >&zzzz;x .
Usa StringEscapeUtils#unescapeHtml(String) do Commons Lang.
__escapeHtml ¶
Função que escapa os caracteres em uma String usando entidades HTML. Suporta entidades HTML 4.0.
Por exemplo,
${__escapeHtml("pão" & "manteiga")}return: "pão" & ?manteiga? .
Usa StringEscapeUtils#escapeHtml(String) do Commons Lang.
__urldecode¶ _
Função para decodificar uma string application/x-www-form-urlencoded . Nota: use UTF-8 como esquema de codificação.
Por exemplo, a cadeia
${__urldecode(Word+%22school%22+is+%22%C3%A9cole%22+in+francês)}retorna A palavra "escola" é "école" em francês .
Usa a classe Java URLDecoder .
Parâmetros ¶
__urlencode¶ _
Função para codificar uma string para uma string application/x-www-form-urlencoded .
Por exemplo, a cadeia
${__urlencode(A palavra "escola" é "école" em francês)}retorna Word+%22school%22+is+%22%C3%A9cole%22+in+francês .
Usa a classe Java URLEncoder .
Parâmetros ¶
__FileToString¶ _
A função FileToString pode ser usada para ler um arquivo inteiro. Cada vez que é chamado, ele lê o arquivo inteiro.
Se ocorrer um erro ao abrir ou ler o arquivo, a função retornará a string " **ERR** "
Parâmetros ¶
Os parâmetros de nome de arquivo, codificação e nome de referência são resolvidos toda vez que a função é executada.
__samplerName ¶
A função samplerName retorna o nome (ou seja, rótulo) do amostrador atual.
A função não funciona em elementos de teste que não possuem um amostrador associado. Por exemplo, o Plano de Teste. Os elementos de configuração também não têm um amostrador associado. No entanto, alguns elementos de configuração são referenciados diretamente pelos samplers, como o HTTP Header Manager e o Http Cookie Manager, e neste caso as funções são resolvidas no contexto do Http Sampler. Pré-processadores, Pós-Processadores e Asserções sempre têm um Sampler associado.
Exemplo:
${__samplerName()}
Parâmetros ¶
__TestPlanName¶ _
A função TestPlanName retorna o nome do plano de teste atual (pode ser usado em Incluindo Planos para saber o nome do plano de teste de chamada).
Exemplo:
${__TestPlanName}retornará o nome do arquivo do seu plano de teste, por exemplo, se o plano estiver em um arquivo chamado Demo.jmx, ele retornará " Demo.jmx
__escapeOroRegexpChars¶ _
Função que escapa dos metacaracteres ORO Regexp, é o equivalente a \Q \E no Java Regexp Engine.
Por exemplo,
${__escapeOroRegexpChars([^"].+?,)}retorna: \[\^\"\]\.\+\? .
Usa Perl5Compiler#quotemeta(String) do ORO.
Parâmetros ¶
__escapeXml ¶
Função que escapa os caracteres em uma String usando entidades XML 1.0.
Por exemplo,
${__escapeXml("pão" & 'manteiga')}retorna: "pão" & ?manteiga? .
Usa StringEscapeUtils#escapeXml10(String) do Commons Lang.
__timeShift¶ _
A função timeShift retorna uma data no formato fornecido com a quantidade especificada de segundos, minutos, horas, dias ou meses adicionados
Parâmetros ¶
- PT20.345S analisa como 20,345 segundos
- PT15M analisa como 15 minutos
- PT10H analisa como 10 horas
- P2D analisa como 2 dias
- -P6H3M analisa como -6 horas e -3 minutos
Exemplos:
${__timeShift(dd/MM/aaaa,21/01/2018,P2D,,)}retorna 23/01/2018
${__timeShift(dd MMMM aaaa,21 fevrier 2018,P2D,fr_FR,)}retorna em 23 de fevereiro de 2018
__digerir ¶
A função digest retorna um valor criptografado no algoritmo de hash específico com o salt opcional, maiúsculas e nome da variável.
Parâmetros ¶
- MD2
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
Exemplos:
${__digest(MD5,Errare humanum est,,,)}retorna c49f00b92667a35c63708933384dad52
${__digest(SHA-256,Felix qui potuit rerum cognoscere causas,mysalt,,)}retorna a3bc6900fe2b2fc5fa8a601a4a84e27a079bf2c581d485009bc5c00516729ac7
__dateTimeConvert ¶
A função __dateTimeConvert converte uma data que está no formato de origem em um formato de destino armazenando o resultado opcionalmente no nome da variável.
Parâmetros ¶
Exemplo:
${__dateTimeConvert(01212018,MMddyyyy,dd/MM/yyyy,)}retorna 21/01/2018
Com valor de tempo de época: 1526574881000,
${__dateTimeConvert(1526574881000,,dd/MM/aaaa HH:mm,)}retorna 17/05/2018 16:34 no horário UTC (-Duser.timezone=GMT)
__isPropDefined ¶
A função __isPropDefined retorna true se a propriedade existir ou false se não existir.
Parâmetros ¶
Exemplo:
${__isPropDefined(START.HMS)}retornará verdadeiro
__isVarDefined ¶
A função __isVarDefined retorna true se a variável existir ou false se não existir.
Parâmetros ¶
Exemplo:
${__isVarDefined(JMeterThread.last_sample_ok)}retornará verdadeiro
__changeCase¶ _
A função change case retorna um valor de string cujo case foi alterado seguindo um modo específico. O resultado pode opcionalmente ser salvo em uma variável JMeter.
Parâmetros ¶
- Resultado SUPERIOR como AB-CD EF
- LOWER resultado como ab-cd ed
- CAPITALIZE o resultado como Ab-CD eF
Exemplos:
${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}retornará AVARO OMNIA DESUNT, INOPI PAUCA, SAPIENTI NIHIL
${__changeCase(LABOR OMNIA VINCIT IMPROBUS,LOWER,)}vai devolver o trabalho omnia vincit improbus
${__changeCase(omnibus viis romam pervenitur,CAPITALIZE,)}retornará Omnibus viis romam pervenitur
__StringToFile¶ _
A função __StringToFile pode ser usada para gravar uma string em um arquivo. Cada vez que é chamado, ele grava uma string no arquivo anexando ou substituindo.
O valor de retorno padrão da função é a string vazia
Parâmetros ¶
Se você precisar inserir uma quebra de linha em seu conteúdo, use \n em sua string.
20.6 Variáveis Predefinidas ¶
A maioria das variáveis é definida por funções de chamada ou por elementos de teste, como Variáveis Definidas pelo Usuário; nesse caso, o usuário tem controle total sobre o nome da variável usada. No entanto, algumas variáveis são definidas internamente pelo JMeter. Estes estão listados abaixo.
- COOKIE_cookiename - contém o valor do cookie (consulte HTTP Cookie Manager )
- JMeterThread.last_sample_ok - se a última amostra foi ou não OK - true / false . Nota: isso é atualizado após a execução dos PostProcessors e Assertions.
- Variáveis START (veja a próxima seção)
20.6 Propriedades Predefinidas ¶
O conjunto de propriedades do JMeter é inicializado a partir das propriedades do sistema definidas quando o JMeter é iniciado; propriedades JMeter adicionais são definidas em jmeter.properties , user.properties ou na linha de comandos.
Algumas propriedades internas são definidas pelo JMeter. Estes estão listados abaixo. Por conveniência, as propriedades START também são copiadas para variáveis com os mesmos nomes.
- START.MS - Hora de início do JMeter em milissegundos
- START.YMD - hora de início do JMeter como aaaaMMdd
- START.HMS - hora de início do JMeter como HHmmss
- TESTSTART.MS - hora de início do teste em milissegundos
Observe que as variáveis/propriedades START representam o tempo de inicialização do JMeter, não o tempo de início do teste. Eles são destinados principalmente para uso em nomes de arquivos, etc.