Domanda

Ho un test JMeter con 2 gruppi di thread: il primo è un singolo thread (che crea un inventario) e il secondo ha più thread (che acquistano tutto l'inventario).Utilizzo BeanShell Assertions e XPath Extractors per analizzare il valore restituito (che è XML) e memorizzare le variabili (come gli ID degli articoli da acquistare).

Ma i valori che vengono creati nel primo gruppo di thread, siano essi estratti nello standard ${jmeter} variabili di tipo o ${__BeanShell(vars.get("jmeter"))} tipo vars, non sono disponibili nel secondo gruppo di thread.Esiste comunque la possibilità di creare una variabile nel primo gruppo di thread e renderla visibile al secondo?

È stato utile?

Soluzione

Non ero in grado di farlo con le variabili (dal momento che quelli sono locali rispetto a singoli thread). Tuttavia, sono stato in grado di risolvere questo problema con la proprietà!

Ancora una volta, il mio primo ThreadGroup fa tutto il set up, e ho bisogno di alcune informazioni da che lavoro per essere a disposizione di ciascuno dei fili nel secondo ThreadGroup. Ho un BeanShell Asserzione nella prima ThreadGroup con il seguente:

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

Il $ {} StoreID è stato estratto con un XPath estrattore. Il BeanShell Asserzione fa altre cose, come il controllo che StoreID è stato restituito dalla chiamata precedente, ecc.

In ogni caso, nel secondo ThreadGroup, posso usare il valore della proprietà "StoreID" in Campionatori con il seguente:

${__property(storeid)}

Funziona come un fascino!

Altri suggerimenti

Secondo la documentazione di JMeter:

16.12 Condivisione di variabili tra thread e gruppi di thread

Le variabili sono locali in un thread Una variabile impostata in un thread non può essere letta in un altro.Questo è previsto dalla progettazione.Per le variabili che possono essere determinate prima dell'inizio di un test, vedere i test di parametri (sopra).Se il valore non è noto fino all'inizio del test, ci sono varie opzioni:

  1. Memorizzare la variabile come proprietà: le proprietà sono globali per l'istanza JMeter
  2. Scrivere variabili in un file e rileggerle.
  3. Usa lo spazio dei nomi bsh.shared - vedi 16.8.2 Condivisione di variabili
  4. Scrivi le tue classi Java

Un altro modo per passare la variabile tra i thread è utilizzare jmeter-plugins as menzionato da Andrey Botalov di seguito.

Ma ho scoperto che è un po' confuso usarlo la prima volta, ma dà il pieno controllo della variabile durante il passaggio da un thread all'altro.Segui il mio esempio con l'utilizzo di BeanShell e vedrai quanto è facile:

Project stuctureSuccessivamente si fa riferimento alle sezioni nell'immagine seguente:

(1.1) Qui ho creato una variabile personalizzata in Variabili definite dall'utente (oppure puoi farlo con BSF Proccessor - disabilitato in questo esempio (1.2))

(2.1)(2.4)Ho utilizzato con successo la variabile nel primo thread - niente di speciale :)

(2.2) Aggiunto BeanShell PostProcessor e personalizzato la mia variabile

(2.3)Aggiunto alla coda

(3.1) Nel secondo thread - la variabile viene presa dalla coda - con qualsiasi nome tu voglia.Ma fai attenzione, usa saggiamente Timeout, perché questo thread attenderà fino al termine precedente in modo che possa essere modificato la variabile (sperimenta con qualche risposta lunga)

(3.2)(3.3)(3,4)Passaggi ripetuti di utilizzo e modifica della variabile

(3.5) La variabile viene inviata ancora una volta in una nuova coda, quindi forniscile un nuovo nome

(4.1)(4.2)(4.3) La variabile modificata catturata dalla nuova coda funziona a meraviglia

Avvertimento

  1. Se aggiungi più thread, aggiungi un contatore al gruppo di thread con la variabile e aggiungi questo nome di variabile al nome della coda - fai lo stesso nel gruppo di thread dove provi a catturare la coda in modo che la coda abbia un nome univoco per ogni thread (scrivi un commento se vuoi ho bisogno di una spiegazione più chiara)

  2. Se hai più di una richiesta http in un gruppo di thread, aggiungi il pre processore di comunicazione del thread come figlio dell'ultima richiesta http (o altro se desideri ottenere qualcosa di personalizzato)

Gioca, modifica, personalizza per ottenere il miglior risultato :) L'aggiunta di più thread può provocare comportamenti indesiderati, quindi devi stare attento.

Information about project structure

Ho trovato che credo sia il modo più semplice per ottenere questo fatto.

Usa

Bean Shell PostProcessor

per impostare la variabile ( http://jmeter.apache.org/usermanual /best-practices.html#bsh_variables )

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

O se si sta leggendo da una variabile

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

E poi dall'altro gruppo di thread, leggerlo via ( http: // JMeter. apache.org/usermanual/functions.html#__property )

${__property(PC_CREATED_PROMO_CODE)}

Inter-Thread Communication per questo scopo.

Ci sono 2 metodi per usarlo:

  • PostProcessor / PreProcessor
  • Funzioni __fifoPut e __fifoPop

A mio parere PostProcessor / preprocessore è più facile da usare.

Questo non è possibile in JMeter, perché non è normale comportamento del client (condivisione di parametri tra i thread). Invece di questo uso un filo-Gruppo con i controller:

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

Bene, questo è un modo per farlo; attenersi alla seguente procedura e funzionerà, in seguito è possibile regolare alle vostre esigenze! Le variabili non sono condivise tra i thread (JMeter chiama questa una caratteristica probabilmente :)). Ma le proprietà sono! Quindi impostare la variabile come un propery in questo modo:

1) Fare clic sul testplan e attivare 'Gruppi discussione Run consecutivamente' -> questo rende i gruppi di thread corrono ordinato e non a caso. (In seguito sarà possibile regolarlo, ma per il momento per farlo funzionare ..)

2) creare un ThreadGroup chiamato 'setup', per esempio; in quel gruppo filo aggiungere un BeanShell Campionatore con il seguente codice:

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

Così ora la proprietà è stata impostata! Se il valore che si desidera memorizzare come propery è una variabile giá (User definded variabile variabile o reqex per esempio) si può fare:

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

3) aggiungere un TestGroup 'test vero' per esempio con un numero di fili superiori all'1;    aggiungi un test e per quella prova aggiungere un BeanShell preprocessore con il seguente codice:

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

Quindi, ora che hai creato una variabile in quel filo chiamato theNameOfYourNewProperty che ha il valore della vostra theNameOfYourNewProperty proprietà di sistema. Nel test è ora possibile accedervi come:

${theNameOfYourNewProperty}

E si lavorerà per ogni thread, non solo solo il primo filo ..

Let' dare un argomento una seconda vita :) Un altro modo per trasferire le variabili tra i thread è quello di scrivere / leggere file. Passare variabili tra le discussioni

Un'altra soluzione è quella di utilizzare la tabella Server semplice per gestire il set di dati. Questa caratteristica è stata aggiungere il 1,2 JMeter Plugin.

"L'idea principale è quella di utilizzare un piccolo server HTTP in JMeter Plugin per gestire i file del set di dati con semplici comandi per / Aggiungi righe di dati nel file"

Guardate la documentazione: http://jmeter-plugins.org/wiki/HttpSimpleTableServer/

Saluti.

JMeter Bean Shell Asserzione

Basta aggiungere un fagiolo shell asserzione utilizzare una funzione di proprietà per assegnare il valore di una variabile (come una variabile globale) per serrare il valore anche dopo va a altro thread.

  

gruppo di thread >> Aggiungi >> >> Le asserzioni Bean Shell Asserzione

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

e poi in altro thread si può chiamare questa variabile globale e può essere utilizzato

di seguito è la funzione è necessario utilizzare per richiamare il valore memorizzato:

${__property(global_variable_name)}

https://medium.com/@priyank .it / JMeter-passing-variabili-tra-thread-a4dc09903b59

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top