Processor in JMeter: PreProcessor & PostProcessor

⚡ Smart sammanfattning

Processor in JMeter modifierar Sampler-förfrågningar före eller efter körning. PreProcessor förbereder förfrågningsdata, medan PostProcessor extracts-värden och styr testflödet, vilket möjliggör korrelation, dynamisk parametrisering och tillförlitligt prestandatestbeteende.

  • ⚙️ Kärndefinition: En processor modifierar samplaren inom sitt omfång och körs antingen före begäran eller efter svaret.
  • 🔍 Förprocessorroll: Förprocessorer ställer in variabler, skriver om URLs, analysera HTML-länkar och tillämpa användarparametrar innan en sampler körs.
  • 📤 Postprocessor-roll: Postprocessorer läser svar, t.ex.tract dynamiska värden till variabler och avgöra om det pågående testet fortsätter.
  • 🧩 Extractor-val: Reguljära uttryck, gränser, JSON, CSS/jQuery och XPath extractors passar alla för ett annat svarsformat.
  • 🛑 Flödeskontroll: Resultatstatus Åtgärdshanteraren stoppar en tråd eller hela testet när en samplare misslyckas.
  • 🧪 Tillämpad genomgång: Sex steg skapar en plan som stoppar automatiskt när en ogiltig sökväg returnerar ett serverfel.

Processor in JMeter

En processor i Apache JMeter är ett testplanelement som modifierar samplarna inom sitt omfång. Det körs automatiskt, antingen precis innan en begäran lämnar JMeter eller omedelbart efter att ett svar anländer, vilket gör det till den huvudsakliga mekanismen för att hantera dynamiska data under en utvärderingsprov.

Det finns 2 typer av processorer:

  1. Förprocessor
  2. Postprocessor

Omfattningen avgör hur långt en processor når. En processor placerad direkt under en Testplan eller en trådgrupp gäller för varje samplare under den, medan en processor som är kapslad inuti en enda samplare endast påverkar den begäran. Att förstå denna regel förhindrar konfigurationsfelen som tas upp i felsökningsavsnittet på den här sidan.

Förprocessor

Förbehandlare utför någon åtgärd innan gör en begäran om provtagare.

Tänk på ett enkelt exempel: låt oss säga att du ville JMeter att "spindel" genom webbplatsen som testas, parse länk (kolla alla länkar på sidan) och avkastning HTML. Du skulle lägga till någon åtgärd som "HTML-länkparser" till din kontroller innan du skapar en HTTP-förfrågan.

Pre-processor

Diagrammet ovan visar förprocessorn som sitter mellan styrenheten och den utgående begäran. Eftersom den körs först är det rätt plats att bygga begärandedata: generera en tidsstämpel, läsa ett värde från en CSV-kolumn, skriva om en sessionsidentifierare till URLeller tilldela olika inloggningsuppgifter till varje virtuell användare.

Postprocessor

Efterbehandlaren utför en åtgärd efter att ha gjort en Sampler-begäran.

Tänk på ett enkelt exempel: JMeter skickar en HTTP-förfrågan till webbservern som testas (etc www.google.com) och få svaret. Du vill JMeter för att stoppa testet om serverns svar är ett fel. Du kan använda postprocessorn för att utföra ovanstående uppgift enligt följande:

Efterbehandlare

Som det andra diagrammet illustrerar läser postprocessorn svaret efter att samplaren är klar. Detta är också standardsvaret på korrelation. När en server returnerar en token, ett sessions-ID eller ett ordernummer som ändras vid varje körning, lagrar en postprocessor det värdet i en JMeter variabel så att nästa samplare kan återanvända den.

Typer av förprocessorer i JMeter

Apache JMeter levereras med en kompakt uppsättning förprocessorer. Var och en förbereder en provtagare på olika sätt, så att välja rätt element gör testplanen läsbar och enkel att underhålla.

  • Exempel på tidsgräns: Definierar en maximal varaktighet för en begäran. Alla samplare som körs längre än det konfigurerade värdet markeras som misslyckade.
  • Användarparametrar: Tilldelar specifika värden till variabler per virtuell användare, så varje tråd skickar sin egen datamängd.
  • HTML-länkparser: Söker igenom sidan som testas, analyserar länkarna den hittar och matar in dem i följande HTTP-begäran.
  • HTTP URL Omskrivningsmodifierare: Injicerar en sessionsidentifierare i URL för applikationer som track-sessioner utan cookies.
  • RegEx-användarparametrar: Fyller i begärandeparametrar med hjälp av värden som samlats in av ett reguljärt uttryck från ett tidigare svar.
  • JDBC-förprocessor: Kör ett SQL-uttryck före samplaren, vilket är användbart för att seeda eller återställa databasposter.
  • JSR223 förprocessor: Utför en Groovy or Java skript för all anpassad förberedelselogik. Den ersätter den äldre BeanShell PreProcessor och presterar betydligt bättre under belastning.

💡 Tips: Föredra JSR223-förprocessorn med Groovy språk över BeanShell. Groovy skript kompileras och cachas, så de förbrukar mycket mindre CPU när tusentals trådar körs parallellt.

Typer av postprocessorer i JMeter

Postprocessorer delas in i två grupper: t.ex.tractorer som hämtar värden från ett svar, och hanterare som reagerar på resultatet av en sampler. Tabellen nedan mappar varje element till det svarsformat det passar bäst.

Postprocessor Bäst lämpad för Typisk användning
Reguljärt uttryck Exempeltractor Alla textsvar Hämta tokens eller ID:n från HTML och vanlig text
Gränsexempeltractor Alla textsvar Registrera ett värde med hjälp av en vänster- och högergräns istället för ett fullständigt reguljärt uttryck
JSON Extractor JSON-svar Läser fält från REST-nyttolaster under API-testning
CSS/jQuery Extractor HTML-svar Välja ett element med CSS-väljare
XPath Extractor XML- och XHTML-svar Navigera i ett strukturerat dokumentträd
JDBC Postprocessor Databasresultat Verifiera eller rensa rader efter en begäran
JSR223 Postprocessor Vilket svar som helst Anpassad skriptbaserad parsning och påståenden
Resultat Status Åtgärdshanterare Vilket svar som helst Slutaping en tråd eller hela testet när en sampler misslyckas

Gränsexettractor anlände till JMeter 4.0 och är ofta det snabbaste alternativet att skriva, eftersom det bara frågar efter texten omedelbart till vänster och höger om värdet. Det reguljära uttrycket Exempeltractor förblir det mer flexibla valet när den omgivande markupen varierar mellan svaren.

Skillnaden mellan förprocessor och efterprocessor

Båda elementen delar samma omfattningsregler, men de löser motsatta problem. Jämförelsen nedan sammanfattar skillnaden före det bearbetade exemplet.

Parameter Förprocessor Postprocessor
Utförande tid Körs innan samplaren skickar sin begäran Körs efter att samplaren har mottagit sitt svar
Huvudsakliga syfte Förbereder och ändrar förfrågningsdata Läser svarsdata och reagerar på den
Typiska element Användarparametrar, HTML-länkparser, JSR223-förprocessor Reguljärt uttryck Exempeltractor, JSON Extractor, Resultatstatus Åtgärdshanterare
Effekt på flödet Kan inte stoppa testet, det formar bara begäran Kan stoppa en tråd eller hela testkörningen
Gemensamt mål Parametrisering Korrelation och felhantering

I praktiken fungerar de två som ett par. En PostProcessor hämtar en sessionstoken från ett inloggningssvar, och en PreProcessor injicerar den token vid nästa begäran innan anropet skickas. Exemplet som följer demonstrerar PostProcessor-halvan av det mönstret.

Exempel på efterbehandlare

Denna handledning visar dig steg-för-steg-instruktioner om hur du använder Post-processor i JMeter. Låt oss börja med det enkla testskriptet.

  1. JMeter skickar en HTTP-förfrågan till webbservern som testas www.google.com.
  2. JMeter får svar från Google servern.
  3. Om serverns svar är ett fel, JMeter kommer stoppa testet.
  4. Om serversvar OK (inget fel), JMeter kommer fortsätta testet.

Här är färdplan av detta exempel:

Exempel på efterbehandlare

Förutsättning:

We återanvändning steg 1 och steg 2 i artikeln JMeter Prestandatester. Om JMeter inte är installerat än, följ instruktionerna JMeter installationsguide först.

Steg 1) Lägg till trådgrupp

Högerklicka på Testplan och lägg till en ny trådgrupp: Lägg till -> Trådar (användare) -> Trådgrupp

Men i Trådgruppens kontrollpanel anger du Trådegenskaper enligt följande:

Lägg till trådgrupp

Den här inställningen tillåter JMeter skapa 10 användarens begäran till http://www.google.com 10 gånger.

Steg 2) Lägg till JMeter element

  • Lägg till standard för HTTP-begäran
  • Lägg till HTTP-begäran

Vi gör fortfarande JMeter skicka förfrågan http://www.google.com till Google servern.

Steg 3) Lägg till Post-Processor Element

Högerklicka Trådgrupp -> Lägg till -> Postprocessor -> Resultat Status Åtgärdshanterare

Resultat Status Åtgärdshanterare tillåter användaren att stoppa tråden eller hela testet om användarens begäran misslyckades.

Lägg till Post-Processor Element

Välj i fönstret Resultatstatus Åtgärdshandtag Sluta testa nu. Detta val kommer att stoppa testet om JMeter få felet från serverns svar.

Lägg till Post-Processor Element

Steg 4) Konfigurera HTTP-förfrågan

Öppna HTTP-förfrågningspanelen. Stiga på "abc" till fältet Sökväg.

Konfigurera HTTP-förfrågan

När du går in "abc" till stigen, JMeter kommer att skapa en URL begära att Google server: http://www.google.com/abc. Detta URL finns inte på Google servern. Det är oförrätter URL begäran så Google servern kommer att returnera ett fel.

Steg 5) Lägg till vyresultatträd

Högerklicka Trådgrupp -> Lägg till -> Lyssnare -> Visa resultatträd

Lägg till vyresultatträd

Steg 6) Kör test

Välj Visa resultatträd, tryck på Kör-knappen på menyraden. Du kommer att se fel svar från Google servern och testet kommer att stoppas med ut slutföra 100 trådar.

Kör testet

Gå nu tillbaka till steg 4, öppna HTTP-begäran, ange "kalender” till rutan. Den gör JMeter skapa URL begära https://calendar.google.com/calendar/u/0/r till Google server. Detta är korrekt URL begäran så Google servern returnerar OK (inget fel).

Kör testet

Välj Visa resultatträd, tryck på Kör-knappen på menyraden. Du kommer att se OK svar från Google servern och testet fortsätter tills alla 100 trådar är klara.

Kör testet

Lägga till en påstående tillsammans med Result Status Action Handler gör kontrollen strängare, eftersom en assertion kan misslyckas med en samplare som returnerade HTTP 200 men levererade fel innehåll.

Felsökning

Om du stöter på problemet när du kör scenariot ovan ... gör följande:

  1. Kontrollera om du ansluter till internet via en proxy. Om ja, ta bort proxyn.
  2. Öppna en ny instans av Jmeter
  3. Öppna ProcessorTestPlan.jmx i Jmeter
  4. Double-klicka på Trådgrupp -> Visa resultatträd
  5. Kör testet

Om en postprocessor inte verkar göra någonting, kontrollera först dess position. En postprocessor som placeras utanför omfånget för den samplare den är riktad mot körs aldrig, vilket är den enskilt vanligaste orsaken till ett tomt ex.tracted variabel. Relaterade element som controllers och distribuerad testning följ samma omfattningslogik.

Vanliga frågor

En förprocessor ändrar innehållet i en begäran innan den skickas. En timer pausar bara tråden under ett definierat intervall. Båda körs före samplaren, men timern ändrar aldrig begärandedata.

Exettractor sparar värdet i en JMeter variabelnamnet du definierar. Alla senare samplare i samma tråd refererar till den med ${variableName}-syntaxen, i en sökväg, rubrik eller förfrågningstext.

Ja. Flera AI-assistenter läser nu ett inspelat svar och föreslår ett reguljärt uttryck eller gränspar för korrelation. Förslaget behöver fortfarande granskas, eftersom AI inte kan veta vilka värden som är genuint dynamiska.

Ja. AI-assistenter jämför det råa svaret med exet.tractor-uttryck och påpeka felmatchningar i escaping, grouping, eller omfång. Verifiera korrigeringen i Visa resultatträd innan du litar på den i en laddningskörning.

Processorer körs en gång för varje Sampler-körning inom deras scope. Med tio trådar looping fem gånger exekveras en processor ansluten till den samplaren femtio gånger, och varje tråd behåller sina egna variabelvärden.

Sammanfatta detta inlägg med: