Processore dentro JMeter: Preprocessore e Postprocessore

⚡ Riepilogo intelligente

Processore dentro JMeter modifica le richieste del campionatore prima o dopo l'esecuzione. PreProcessor prepara i dati della richiesta, mentre PostProcessor eseguetracts definisce e controlla il flusso di test, consentendo la correlazione, la parametrizzazione dinamica e un comportamento affidabile nei test delle prestazioni.

  • ⚙️ Definizione di base: Un processore modifica il campionatore all'interno del proprio ambito, eseguendo l'operazione prima della richiesta o dopo la risposta.
  • 🔍 Ruolo del preprocessore: I preprocessori impostano le variabili, riscrivono URLanalizza i collegamenti HTML e applica i parametri utente prima dell'esecuzione di un Sampler.
  • 📤 Ruolo del post-processore: PostProcessori leggono le risposte, ad esempiotracassegna valori dinamici alle variabili e decide se il test in esecuzione deve continuare.
  • 🧩 ExtracSelezione del tor: Espressioni regolari, limiti, JSON, CSS/jQuery e XPathtracciascuno di essi richiede un formato di risposta diverso.
  • 🛑 Controllo del flusso: Il gestore delle azioni di stato dei risultati interrompe un thread o l'intero test quando un campionatore fallisce.
  • 🧪 Procedura dettagliata dell'applicazione: Sei passaggi per creare un piano che si arresta automaticamente quando un percorso non valido restituisce un errore del server.

Processore dentro JMeter

Un processore in Apache JMeter è un elemento del piano di test che modifica i Sampler all'interno del suo ambito. Viene eseguito automaticamente, appena prima che una richiesta parta JMeter o immediatamente dopo l'arrivo di una risposta, il che lo rende il meccanismo principale per la gestione dei dati dinamici durante un test della prestazione.

Esistono 2 tipi di processori:

  1. Pre-processore
  2. Post-processore

L'ambito determina la portata di un processore. Un processore posizionato direttamente sotto un Piano di test Un Thread Group si applica a tutti i Sampler sottostanti, mentre un processore annidato all'interno di un singolo Sampler influisce solo su quella specifica richiesta. Comprendere questa regola previene gli errori di configurazione descritti nella sezione di risoluzione dei problemi di questa pagina.

Pre-processore

Il preprocessore esegue alcune azioni prima effettuando una richiesta di campionamento.

Considera un semplice esempio: diciamo che volevi JMeter “spider” attraverso il sito web in prova, parse link(controlla tutti i link sulla pagina) e ritorno l'HTML. Dovresti aggiungere alcune azioni come "parser collegamento HTML" al controller prima di creare una richiesta HTTP.

Pre-processore

Il diagramma sopra mostra il pre-processore posizionato tra il controller e la richiesta in uscita. Poiché viene eseguito per primo, è il posto corretto per costruire i dati della richiesta: generare un timestamp, leggere un valore da una colonna CSV, riscrivere un identificatore di sessione nel URLoppure assegnando credenziali diverse a ciascun utente virtuale.

Post-processore

Il post-processore esegue alcune azioni dopo aver effettuato una richiesta di campionamento.

Considera un semplice esempio: JMeter invia una richiesta HTTP al server web sotto test (ecc www.google.com) e ottieni la risposta. Tu vuoi JMeter Per interrompere il test se la risposta del server è un errore, è possibile utilizzare il post-processore nel modo seguente:

Post-processore

Come illustrato nel secondo diagramma, il Post-processore legge la risposta dopo che il Campionatore ha completato. Questa è anche la risposta standard alla correlazione. Quando un server restituisce un token, un ID di sessione o un numero d'ordine che cambia ad ogni esecuzione, un Post-processore cattura quel valore in un JMeter variabile in modo che il campionatore successivo possa riutilizzarla.

Tipi di preprocessori in JMeter

Apache JMeter Viene fornito con un set compatto di preprocessori. Ciascuno prepara un campionatore in modo diverso, quindi la selezione dell'elemento corretto mantiene il piano di test leggibile e di facile manutenzione.

  • Timeout di esempio: Definisce la durata massima per una richiesta. Qualsiasi Sampler che rimanga in esecuzione per un periodo superiore al valore configurato viene contrassegnato come non riuscito.
  • Parametri utente: Assegna valori specifici alle variabili per ogni utente virtuale, in modo che ogni thread invii il proprio set di dati.
  • Analizzatore di link HTML: Il programma analizza la pagina da testare, esamina i link che trova e li inserisce nella successiva richiesta HTTP.
  • HTTP URL Modificatore di riscrittura: Inietta un identificatore di sessione nel URL per applicazioni che track sessioni senza cookie.
  • Parametri utente RegEx: Popola i parametri della richiesta utilizzando i valori acquisiti tramite un'espressione regolare da una risposta precedente.
  • Preprocessore JDBC: Esegue un'istruzione SQL prima del campionatore, utile per popolare o reimpostare i record del database.
  • Preprocessore JSR223: Esegue un Groovy or Java Script per qualsiasi logica di preparazione personalizzata. Sostituisce il precedente BeanShell PreProcessor e offre prestazioni nettamente superiori sotto carico.

Suggerimento: Preferisci il preprocessore JSR223 con il Groovy linguaggio su BeanShell. Groovy Gli script vengono compilati e memorizzati nella cache, quindi consumano molta meno CPU quando migliaia di thread vengono eseguiti in parallelo.

Tipi di post-processori in JMeter

I postprocessori si dividono in due gruppi: es.tracI campionatori estraggono valori da una risposta, mentre i gestori reagiscono al risultato di un campionatore. La tabella seguente associa ciascun elemento al formato di risposta più adatto.

Post-processore Adatto a Uso tipico
Espressione regolare Extractor Qualsiasi risposta testuale Acquisizione di token o ID da HTML e testo semplice
Esclusione di confinetractor Qualsiasi risposta testuale Acquisizione di un valore utilizzando un limite sinistro e destro anziché un'espressione regolare completa.
JSON Extractor Risposte JSON Lettura dei campi dai payload REST durante Test dell'API
CSS/jQuery Extractor risposte HTML Selezione di un elemento tramite selettore CSS
Xpath Extractor Risposte XML e XHTML Navigazione in una struttura ad albero di documenti
Post-processore JDBC Risultati del database Verifica o pulizia delle righe dopo una richiesta
Post-processore JSR223 Qualsiasi risposta Analisi e asserzioni personalizzate tramite script
Gestore dell'azione dello stato del risultato Qualsiasi risposta Fermareping un thread o l'intero test quando un campionatore fallisce

Il confine Extractor arrivò in JMeter 4.0 ed è spesso l'opzione più veloce da scrivere, perché richiede solo il testo immediatamente a sinistra e a destra del valore. L'espressione regolare ExtracTor rimane la scelta più flessibile quando il markup circostante varia tra le risposte.

Differenza tra pre-processore e post-processore

Entrambi gli elementi condividono le stesse regole di ambito, ma risolvono problemi opposti. Il confronto seguente riassume la distinzione prima dell'esempio pratico.

Parametro Preprocessore Post-processore
Tempo di esecuzione Viene eseguito prima che il campionatore invii la sua richiesta. Viene eseguito dopo che il campionatore ha ricevuto la sua risposta
Scopo principale Prepara e modifica i dati della richiesta Legge i dati di risposta e reagisce di conseguenza.
Elementi tipici Parametri utente, analizzatore di link HTML, preprocessore JSR223 Espressione regolare Extractor, JSON Extractor, Gestore azioni stato risultato
Effetto sul flusso Non è possibile interrompere il test, si può solo modellare la richiesta Può interrompere un thread o l'intera esecuzione del test
Obiettivo comune Parametrizzazione Correzione e gestione degli errori

In pratica, i due funzionano in coppia. Un PostProcessor cattura un token di sessione dalla risposta di login, e un PreProcessor, nella richiesta successiva, inserisce tale token prima che la chiamata venga inviata. L'esempio che segue illustra la parte PostProcessor di questo schema.

Esempio di post-processore

Questo tutorial ti mostrerà istruzioni passo passo su come utilizzare il post-processore in JMeter. Cominciamo con il semplice script di test.

  1. JMeter invia una richiesta HTTP al server web sotto test www.google.com.
  2. JMeter riceve una risposta dal Google server.
  3. Se la risposta del server è un errore, JMeter andrete a Fermati il test.
  4. Se la risposta del server OK (nessun errore), JMeter andrete a continua il test.

Ecco il tabella di marcia di questo esempio:

Esempio di post-processore

Condizione preliminare:

We riutilizzazione il Passaggio 1 e il Passaggio 2 nell'articolo JMeter Test di Performance. Se JMeter non è ancora installato, segui le istruzioni JMeter guida d'installazione prima.

Passaggio 1) Aggiungi gruppo di thread

Fare clic destro sul Piano di test e aggiungi un nuovo gruppo di thread: Aggiungi -> Discussioni (utenti) -> Gruppo discussione

Ma nel pannello di controllo del gruppo thread, inserisci Proprietà thread come segue:

Aggiungi gruppo di thread

Questa impostazione consente JMeter creare 10 richiesta dell'utente a http://www.google.com 10 volte.

Passaggio 2) Aggiungi JMeter elementi

  • Aggiungi richiesta HTTP predefinita
  • Aggiungi richiesta HTTP

Facciamo ancora JMeter invia richiesta http://www.google.com a Google server.

Passaggio 3) Aggiungi elemento post-processore

Right Click Gruppo discussione -> Aggiungi -> Post Processore -> Gestore dell'azione dello stato del risultato

Gestore dell'azione dello stato del risultato consente all'utente di interrompere il thread o l'intero test se la richiesta dell'utente non è riuscita.

Aggiungi elemento post-processore

Nel riquadro Gestione azione stato risultato, scegliere Interrompi il test adesso. Questa selezione interromperà il test se JMeter ottenere l'errore dalla risposta del server.

Aggiungi elemento post-processore

Passaggio 4) Configura la richiesta HTTP

Apri il pannello delle richieste HTTP. accedere "abc" al campo Percorso.

Configura la richiesta HTTP

Quando entri "abc" al sentiero, JMeter creerà un file URL richiesta a Google server: http://www.google.com/abc. Questo URL non esiste su Google server. È Wrongs URL richiesta quindi Google Il server restituirà un errore.

Passaggio 5) Aggiungi Visualizza albero dei risultati

Right Click Gruppo discussione -> Aggiungi -> Ascoltatore -> Visualizza albero dei risultati

Aggiungi Visualizza albero dei risultati

Passaggio 6) Eseguire il test

Selezionare Visualizza albero dei risultati, premere il pulsante Esegui sulla barra dei menu. Vedrai il errore risposta da Google server e il test si interromperà senza completando 100 thread.

Esegui il test

Ora torna al passaggio 4, apri il riquadro Richiesta HTTP, inserisci "calendario" al riquadro. Esso rende JMeter creare URL richiesta https://calendar.google.com/calendar/u/0/r ai Google server. Questo è correggere URL richiesta quindi Google Il server restituirà OK (nessun errore).

Esegui il test

Selezionare Visualizza albero dei risultati, premere il pulsante Esegui sulla barra dei menu. Vedrai il OK risposta da Google server e il test continuerà fino al completamento di tutti i 100 thread.

Esegui il test

Aggiunta di un asserzione Insieme al gestore delle azioni di stato dei risultati, il controllo diventa più rigoroso, perché un'asserzione può far fallire un campionatore che ha restituito HTTP 200 ma ha consegnato il contenuto errato.

Troubleshooting

Se riscontri il problema durante l'esecuzione dello scenario sopra descritto, procedi come segue:

  1. Controlla se ti stai connettendo a Internet tramite un proxy. Se sì, rimuovi il proxy.
  2. Apri una nuova istanza di Jmeter
  3. Aprire il ProcessorTestPlan.jmx in Jmetro
  4. Double-fai clic su Gruppo di thread -> Visualizza albero dei risultati
  5. Esegui il test

Se un Post-processore sembra non fare nulla, controlla prima la sua posizione. Un Post-processore posizionato al di fuori dell'ambito del Sampler a cui è destinato non viene mai eseguito, che è la causa più frequente di un output vuoto.tracvariabile ted. Elementi correlati come controllori and test distribuito seguire la stessa logica di ambito.

DOMANDE FREQUENTI

Un PreProcessor modifica il contenuto di una richiesta prima che venga inviata. Un Timer, invece, si limita a mettere in pausa il thread per un intervallo di tempo definito. Entrambi vengono eseguiti prima del Sampler, ma il Timer non modifica mai i dati della richiesta.

L'extractor salva il valore in un JMeter Nome della variabile che definisci. Qualsiasi Sampler successivo nello stesso thread vi farà riferimento con la sintassi ${nomevariabile}, in un percorso, un'intestazione o nel corpo della richiesta.

Sì. Diversi assistenti basati sull'IA ora leggono una risposta registrata e suggeriscono un'espressione regolare o una coppia di valori limite per la correlazione. Il suggerimento necessita ancora di revisione, perché l'IA non può sapere quali valori siano realmente dinamici.

Sì. Gli assistenti IA confrontano la risposta grezza con l'extracespressione tor e evidenziare le discrepanze in escaping, gruppoping, o ambito. Verifica la correzione all'interno di Visualizza albero dei risultati prima di utilizzarla in un'esecuzione di carico.

I processori vengono eseguiti una volta per ogni esecuzione del campionatore all'interno del loro ambito. Con dieci thread in esecuzioneping cinque volte, un processore collegato a quel campionatore esegue cinquanta esecuzioni, e ogni thread mantiene i propri valori di variabile.

Riassumi questo post con: