Pergunta

Eu tenho um teste JMeter com 2 grupos de Tópicos - o primeiro é um único segmento (que cria algum inventário) eo segundo tem vários segmentos (que compram todo o estoque). Eu uso Beanshell Afirmações e XPath Extratores para analisar o valor retornado (que é XML) e armazenar variáveis ??(como os IDs dos itens a serem comprados).

Mas, valores que são criados no primeiro grupo Thread, se extraído em variáveis ??do tipo ${jmeter} padrão, ou tipo ${__BeanShell(vars.get("jmeter"))} vars, não estão disponíveis no segundo segmento de Grupo. Existe uma maneira de criar uma variável no primeiro segmento do grupo e torná-lo visível para a segunda?

Foi útil?

Solução

Eu não era capaz de fazer isso com variáveis ??(desde aqueles são locais para tópicos individuais). No entanto, eu era capaz de resolver este problema com propriedades!

Mais uma vez, o meu primeiro ThreadGroup faz todo o conjunto para cima, e eu preciso de algumas informações de que o trabalho esteja disponível para cada um dos tópicos na segunda ThreadGroup. Eu tenho um BeanShell Assertion na primeira ThreadGroup com o seguinte:

${__setProperty(storeid, ${storeid})};

A $ {storeid} foi extraído com um XPath Extractor. O BeanShell Assertion faz outras coisas, como a verificação de que storeid foi retornado da chamada anterior, etc.

De qualquer forma, no segundo ThreadGroup, eu posso usar o valor da propriedade "storeid" em Samplers com o seguinte:

${__property(storeid)}

funciona como um encanto!

Outras dicas

De acordo com a documentação JMeter:

16.12 variáveis ??partilha entre linhas e grupos de thread

As variáveis ??são locais para um fio de um conjunto de variáveis ??em um segmento não pode ser lido em outro. Isso ocorre por design. Para as variáveis ??que pode ser determinado antes de um teste começa, consulte Parametrização testes (acima). Se o valor Não se sabe até do início do teste, há várias opções:

  1. Guarde a variável como uma propriedade - propriedades são globais para o instância JMeter
  2. Escrever variáveis ??para um arquivo e re-lê-los.
  3. Use o namespace bsh.shared - consulte Variáveis ?? 16.8.2 Compartilhamento
  4. Escreva suas próprias classes Java

Outra maneira de passar variável entre os fios é a utilização de JMeter-encaixes como mencionado por Andrey Botalov abaixo .

Mas eu achei que ele é um pouco confuso para usá-lo pela primeira vez, mas dá o controle total da variável durante a passagem do segmento para segmento. Siga o meu exemplo com o uso BeanShell e você vê como é fácil:

stucture projeto Próxima referindo-se a seções em imagem abaixo:

(1.1) Aqui eu criei variável personalizada em variáveis ??definidas pelo usuário (ou você pode fazê-lo com BSF proccessor - disabled neste exemplo (1.2))

(2.1) (2.4) I com sucesso variável utilizada no primeiro segmento - nada de especial:)

(2.2) Adicionado BeanShell pós-processador e personalizado minha variável

(2.3) Adicionado lo para a fila

(3,1) Em segundo segmento - variável é retirado da fila - com o nome que quiser. Mas cuidado, variável uso com sabedoria Timeout, porque este segmento vai esperar até acabamento anterior para que ele possa se modificado (experimento com alguma resposta de comprimento)

(3,2) (3,3) (3,4) que as etapas de uso e modificação variável repetido

(3.5) Variável é enviado mais uma vez em nova fila - para fornecer novo nome a ele

(4,1) (4,2) (4,3) Agarrou variável modificada a partir de novas obras de fila como charme

Atenção

  1. Se você adicionar mais threads, em seguida, adicione um pouco de Contador a Thread Grupo com variável e adicione o nome da variável para o nome da fila - fazer o mesmo em rosca Grupo onde você tenta fila de captura de modo fila terá nome único para cada thread (escreva um comentário se você precisar de alguma explenation mais clara)

  2. Se você tem mais de uma solicitação HTTP em um segmento Grupo seguida, adicione processador pré comunicação segmento como uma criança da última (ou outro se você quer conseguir alguma coisa personalizada) http Request

Play, modificar, personalizar para obter melhor resultado :) Adicionando mais tópicos pode resultar em comportamento indesejado por isso você precisa estar atento.

Informações sobre estrutura do projeto

Eu achei que eu acredito que é a maneira mais simples de conseguir este feito.

Use

Bean Shell PostProcessor

para definir a variável ( http://jmeter.apache.org/usermanual /best-practices.html#bsh_variables )

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", "value");

Ou se você está lendo a partir de uma variável

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", vars.get("Extracted_PC_CREATED_PROMO_CODE"));

E, em seguida, do outro grupo fio, lê-lo via ( http: // jmeter. apache.org/usermanual/functions.html#__property )

${__property(PC_CREATED_PROMO_CODE)}

JMeter Plugins tem Inter-Thread Comunicação para esta finalidade.

Existem 2 métodos para usá-lo:

  • Postprocessor / PreProcessor
  • Funções __fifoPut e __fifoPop

Na minha opinião Postprocessor / PreProcessor é mais fácil de usar.

Isto não é possível no JMeter, porque não é o comportamento do cliente normal (partilha de parâmetros entre threads). Em vez de este uso um Thread-Grupo com controladores:

Thread Group
+ Create inventory
+ + XPath
+ Loop
+ + Purchase inventory

Bem, esta é uma maneira de fazê-lo; siga estes passos e ele vai trabalhar, mais tarde você pode ajustá-lo às suas necessidades! As variáveis ??não são compartilhados entre threads (JMeter chama esse recurso a provavelmente :)). Mas propriedades são! Portanto, definir a variável como um propery assim:

1) Clique com o testplan e permitir que 'Run Grupos de Tópicos consecutivamente' -> isso faz com que os grupos de thread executar ordenada e não de forma aleatória. (Mais tarde pode ajustá-lo, mas por agora para obtê-lo para o trabalho ..)

2) criar um ThreadGroup chamado 'setup', por exemplo; nesse grupo rosca adicionar um BeanShell Sampler com o seguinte código:

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("theNameOfYourNewProperty", "theValueOfYourPropery");

Então, agora a propriedade foi definida! Se o valor que deseja armazenar como um propery é um allready variável (variável definded usuário ou variável reqex por exemplo) você pode fazer:

JMeterUtils.setProperty("theNameOfYourNewProperty", vars.get("theNameOfYourVariable"));

3) adicionar um TestGroup 'teste real', por exemplo com um número de fios maior do que 1; adicionar um teste e que o teste adicionar um BeanShell Preprocessor com o seguinte código:

import org.apache.jmeter.util.JMeterUtils;
vars.put("theNameOfYourNewProperty", JMeterUtils.getProperty("theNameOfYourNewProperty"));

Agora que você criou uma variável na esse segmento chamado theNameOfYourNewProperty que tem o valor de sua theNameOfYourNewProperty propriedade do sistema. Em seu teste agora você pode acessá-lo como:

${theNameOfYourNewProperty}

E ele vai trabalhar para cada segmento, não apenas o primeiro segmento ..

Let' dar um tópico uma segunda vida :) Mais uma maneira de variáveis ??de transferência entre linhas é de leitura / gravação para o arquivo. Passando variáveis ??entre tópicos

Outra solução é usar a Tabela de servidor simples para gerenciar o conjunto de dados. Este recurso foi adicionar os 1,2 JMeter Plugins.

"A idéia principal é usar um servidor http pequena em JMeter Plugins para gerenciar os arquivos do conjunto de dados com comandos simples para get / Adicionar linhas de dados em arquivos"

olhada na documentação: http://jmeter-plugins.org/wiki/HttpSimpleTableServer/

Cumprimentos.

JMeter feijão Shell Assertion

Basta adicionar um shell afirmação feijão usar uma função de propriedade para atribuir o valor de uma variável (como uma variável global), que vai conter o valor, mesmo depois ele vai para outro segmento.

grupo rosca >> Add >> Afirmações >> Feijão Shell Assertion

${__setProperty(Global_variable_Name,${Variable_name_whose_Value_to_be_Passed})}

e, em seguida, em outro tópico que você pode chamar esta variável global e pode usá-lo

abaixo é a função que você precisa usar para chamar o valor armazenado:

${__property(global_variable_name)}

https://medium.com/@priyank .it / jmeter-passing-variáveis ??entre-linhas-a4dc09903b59

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top