HTTP-proxyserver in JMeter: Voorbeeldscript opnemen

โšก Slimme samenvatting

JMeter De HTTP-proxyserver registreert browseractiviteit in een herbruikbaar testscript. De recorder bevindt zich tussen de browser en de website, legt elk verzoek vast in een opnamecontroller en het opgeslagen plan wordt vervolgens door meerdere virtuele gebruikers afgespeeld.

  • ๐ŸŽฌ Kerndoel: De proxy observeert en registreert de gebruikersactiviteit terwijl een normale browser door de te testen applicatie navigeert.
  • ๐Ÿงฑ Schets van het plan: Voordat de opname begint, worden de threadgroep, de standaardinstellingen voor HTTP-verzoeken en de opnamecontroller aangemaakt.
  • ๐ŸŽฏ Target controller: Deze instelling bepaalt waar vastgelegde samplers worden opgeslagen in de testplanstructuur.
  • ๐ŸŒ Browserinstellingen: De browser moet zijn HTTP-proxy naar de volgende locatie laten wijzen: JMeter Poort 8888 is standaard.
  • ๐Ÿ” HTTPS-opname: Apache importerenJMeterVoeg TemporaryRootCA.crt toe als een vertrouwde autoriteit en verwijder deze vervolgens weer.
  • ๐Ÿงน Maak het script schoon: Advertentie- en analyseverzoeken worden ook geregistreerd en moeten worden uitgesloten of verwijderd.
  • ๐Ÿ”— Correlatie bepalen vรณรณr schaling: Vervang opgenomen sessietokens door extracted-variabelen, anders mislukt de herhaling.
  • โš ๏ธ Versie-opmerking: De werkbank werd verwijderd in JMeter 5.0; het element is nu de HTTP(S) Test Script Recorder.

JMeter HTTP-proxyserver-opnamescript

Wat is het JMeter HTTP-proxyserver?

De JMeter De HTTP-proxyserver is een ingebouwde recorder die zich tussen de browser en de te testen website bevindt. Deze observeert en registreert gebruikersactiviteit terwijl de applicatie normaal wordt bezocht en zet elk vastgelegd verzoek om in een HTTP-verzoeksampler binnen het testplan. JMeter 3.0 Het element heeft de naam gekregen HTTP(S) testscriptrecorderEn beide namen beschrijven hetzelfde onderdeel.

Record het testen van Hiermee kan een tester activiteiten vastleggen en afspelen ten opzichte van een testdoelwit. Het is een vorm van geautomatiseerd testen, maar dan voor meerdere gebruikers tegelijk.

Waarom opnemen in plaats van het script met de hand te schrijven?

Een realistische gebruikerservaring op een moderne website genereert tientallen verzoeken, elk met zijn eigen headers, cookies en formulierparameters.ping Het handmatig invoeren van al die gegevens in samplers is traag en foutgevoelig. Opnemen legt het exacte verkeer vast dat de browser verstuurde, wat drie voordelen biedt:

  • Nauwkeurigheid: De volgorde van de headers, cookies en verborgen formuliervelden worden exact overgenomen zoals de server ze heeft ontvangen.
  • Snelheid: Een reisverslag van tien pagina's kost slechts enkele minuten om op te nemen en uren om handmatig uit te schrijven.
  • dekking: Achtergrond-AJAX-aanroepen die onzichtbaar zijn in de interface, verschijnen wel in de opname.

De opname is een beginpunt, geen afgeronde test. Deze moet nog worden opgeschoond, gecorreleerd en geparametriseerd voordat deze bruikbaar is voor belasting testenDe onderstaande secties beschrijven het volledige traject vanaf een lege pagina. JMeter Een venster naar een script dat betrouwbaar opnieuw wordt afgespeeld.

Hier is de roadmap van dit praktijkvoorbeeld

HTTP-proxyserver in JMeter

Hoe neem je een script op in JMeter 5.x

De huidige uitgave is Apache JMeter 5.6.3, gepubliceerd op 9 januari 2024, en het vereist Java 8 jaar of ouder, met Java 17 aanbevolen. Iedereen die de geรฏllustreerde handleiding verderop op deze pagina voor die release volgt, zal geen WorkBench-node vinden, omdat deze in versie 5.0 is verwijderd. De functionaliteit is niet verdwenen; deze is verplaatst. De recorder is nu direct toegevoegd aan het testplan en heet de HTTP(S) Test Script Recorder.

De snelste route is de gebundelde sjabloon. Kies Dien in > Templates > Opnemen en JMeter Genereert een compleet plan met een threadgroep, standaardinstellingen voor HTTP-verzoeken, een opnamecontroller en de recorder zelf, die al met elkaar zijn verbonden. Het handmatig bouwen van dezelfde structuur vereist de onderstaande stappen.

  1. Bouw het basisframe van het plan. Voeg een threadgroep toe en plaats daaronder een opnamecontroller. Hier komen de opgenomen samples terecht.
  2. Voeg de recorder toe aan het testplan. Klik met de rechtermuisknop op het knooppunt Testplan en kies Toevoegen > Niet-testelementen > HTTP(S) testscriptrecorderHet is een zustergroep van de Thread Group, geen dochtergroep.
  3. Stel de poort in. De standaardpoort is 8888. Elke vrije poort werkt, mits de browser correct is geconfigureerd.
  4. Kies de Target Controller. Selecteer de opnamecontroller die in stap รฉรฉn is gemaakt, zodat de aanvragen worden gegroepeerd waar u dat verwacht, in plaats van verspreid te staan โ€‹โ€‹in de hoofdmap van het plan.
  5. Toevoegen URL Uitsluitingspatronen. Op het tabblad 'Verzoeken filteren' kunt u statische bronnen uitsluiten met een patroon zoals bijvoorbeeld: .*\.(bmp|css|js|gif|ico|jpe?g|png|svg|woff2?)Dit maakt het handmatige opruimwerk dat later wordt beschreven grotendeels overbodig.
  6. Start de recorder. Klik Start bovenaan het bedieningspaneel van de recorder. JMeter schrijft ApacheJMeterHet bestand TemporaryRootCA.crt wordt momenteel in de bin-map geplaatst, waardoor HTTPS-opname mogelijk wordt.
  7. Richt de browser op de proxy. Gebruik localhost en de gekozen poort, en navigeer vervolgens normaal door de applicatie.
  8. Stop en ruim op. Druk op Stop, verwijder alle resterende oproepen van derden en sla het abonnement op.
  9. Valideer voordat u opschaalt. Klik met de rechtermuisknop op de draadgroep en kies BevestigenHierdoor wordt het plan eenmaal uitgevoerd met รฉรฉn enkele thread, waardoor fouten aan het licht komen voordat er enige belasting op wordt toegepast.

Nog een gewoonte onderscheidt een werkend script van een betrouwbaar script. Gebruik de grafische interface alleen voor het bouwen en debuggen, en voer de echte test vervolgens uit vanaf de commandoregel. jmeter -n -t plan.jmx -l results.jtl -e -o report, wat ook een HTML-dashboard genereert. Dezelfde opdracht vormt de basis van gedistribueerd testen over meerdere belastingsgeneratoren. De installatie wordt beschreven in de JMeter installatie gidsen de volledige procedure is gedocumenteerd op de Apache JMeter recorder pagina.

โš ๏ธ Versie-opmerking: De schermafbeeldingen in de onderstaande handleiding zijn gemaakt op een ouder apparaat. JMeter release die nog steeds de WorkBench-node bevatte. WorkBench werd verwijderd in JMeter 5.0. Alle concepten blijven van toepassing; alleen de locatie van de recorder verandert, en de huidige procedure is de hierboven beschreven procedure.

Stap 1) De HTTP-proxyserver instellen

Dit is een stapsgewijze handleiding voor het instellen van een proxy

  1. Start JMeter
  2. Selecteren Testplan op de boom
  3. Toevoegen DiscussiegroepKlik met de rechtermuisknop op de Testplan en voeg een nieuwe threadgroep toe: Toevoegen > Onderwerpen (gebruikers) > Discussiegroep

De HTTP-proxyserver instellen

  1. Toevoegen HTTP-verzoekSelecteer de draadgroep; klik met de rechtermuisknop. Toevoegen > Configuratie-element > Standaardinstellingen voor HTTP-aanvragen

De HTTP-proxyserver instellen

In het nieuwe HTTP Request Defaults-element: Voer bij Servernaam of IP โ€œgoogle.comโ€ in. De overige velden moet u leeg laten

De HTTP-proxyserver instellen

  1. Toevoegen OpnamecontrollerKlik met de rechtermuisknop op de "Thread Group" en voeg een opnamecontroller toe: Toevoegen > Logische controller > Opnamecontroller

De HTTP-proxyserver instellen

  1. Toevoegen proxy-server Ga naar WorkBench. Klik met de rechtermuisknop op WorkBench en voeg de HTTP-proxy toe: Toevoegen > Niet-testelementen > HTTP-proxyserver. Op JMeter 5.x, klik met de rechtermuisknop op de Testplan node in plaats daarvan kiezen HTTP(S) testscriptrecorder.

De HTTP-proxyserver instellen

  1. Set Target Controller waar uw opgenomen scripts worden toegevoegd

De HTTP-proxyserver instellen

  1. Start Proxyserver. Ga terug naar HTTP-proxyserver en klik op de Start knop onderaan. Nu jij JMeter proxyserver starten

De HTTP-proxyserver instellen

  1. Start uw browser (ik gebruikte Firefox), Kiezen Gereedschap > Keuze > Geavanceerd > Netwerk > omgeving > Voer de HTTP-proxy in zoals in de onderstaande afbeelding. In de huidige Firefox releases hetzelfde dialoogvenster wordt bereikt via settings > Algemeen > Netwerkinstellingen.

De HTTP-proxyserver instellen

Stap 2) Registreer uw activiteit

  1. Nu starten http://www.google.com in uw webbrowser (JMeter nog steeds open)
  2. Zoeken activiteiten op het trefwoord โ€œguru99'.
  3. Keer terug naar JMeter, klik in HTTP-proxyserver op stop wanneer je klaar bent

Activiteit registreren

  1. Nadat u klaar bent met opnemen, zult u het zien JMeter maakte automatisch een nieuw HTTP-verzoek aan, zoals in de onderstaande afbeelding

Activiteit registreren

JMeter heeft al een gebruikersverzoek geregistreerd de startpagina of Google website. http://www.google.com/

De andere HTTP-verzoeken worden in bovenstaande afbeelding weergegeven. U moet deze verwijderen. Want ooit JMeter registreert ook enkele advertentielinks terwijl u naar een zoekwoord zoekt. GoogleWe moeten ze in ons testplan negeren.

  1. Klik op Bestand > Uw testplan opslaan als

Activiteit registreren

  1. Er verschijnt een dialoogvenster > voer een naam voor uw testplan in bij het veld Bestandsnaam > Klik op Opslaan. Uw testplan is nu opgeslagen onder de naam RecordingTestPlan.jmx

Activiteit registreren

Stap 3) Voer uw testplan uit

  1. Selecteren Threadgroep > Toevoegen > Luisteraar > Samenvattend rapport

Testplan uitvoeren

  1. Het samenvattende rapport zal enkele basisstatistieken tonen

Testplan uitvoeren

  1. Selecteer Thread Group, voer informatie in zoals in de onderstaande afbeelding

Testplan uitvoeren

U kunt het artikel raadplegen. JMeter Performance Testing Om de details over het configureren van threadgroepen te weten te komen.

  1. Voordat je de test start, selecteer je 'Samenvattingsrapport'. Wanneer je klaar bent om een โ€‹โ€‹test uit te voeren, selecteer je Uitvoeren > Starten (Ctrl+R). JMeter Uw activiteit wordt 100 keer afgespeeld. Tijdens de test worden de statistieken bijgewerkt totdat de test is voltooid.

Testplan uitvoeren

Stap 4) Sla uw testresultaat op

  1. Klik Tabelgegevens opslaan om het testresultaat in een bestand op te slaan

Testresultaat opslaan

  1. Voer de naam van het testresultaat in en klik op Opslaan. Testresultaat binnen JMeter wordt standaard opgeslagen in *.csv-formaat

Testresultaat opslaan

Download het testplan voor bestandsopname

Download het bestand HTTP Proxy Server

Het vastleggen van HTTPS-verkeer en certificaten

Vrijwel elke website maakt tegenwoordig gebruik van HTTPS, iets wat de oorspronkelijke handleiding nog niet eens beschreven. Een proxy kan versleuteld verkeer niet lezen tenzij de browser deze vertrouwt, dus is er een extra stap nodig.

Wanneer de recorder start, JMeter genereert een tijdelijk rootcertificaat met de naam apacheJMeterTijdelijkeRootCA.crt in de bin-directory. Importeer dat bestand in de browser als een vertrouwde certificeringsinstantie en herstart vervolgens de browser. JMeter Het systeem kan nu voor elke site een eigen certificaat presenteren en de sessie decoderen voor opname.

Drie punten zijn het vermelden waard:

  • Het certificaat is zeven dagen geldig. Dit is opzettelijk. Verwijder het en laat het JMeter Een nieuwe genereren in plaats van de geldigheidsduur te verlengen.
  • Verwijder het wanneer u klaar bent. Het laten staan โ€‹โ€‹van een vertrouwd rootcertificaat op een werkende machine vormt een reรซel beveiligingsrisico, geen theoretisch risico.
  • Sommige applicaties weigeren dit. Sites die gebruikmaken van certificate pinning of mutual TLS kunnen helemaal niet via een proxy worden opgenomen, en het script moet in plaats daarvan handmatig worden gecompileerd met behulp van de ontwikkelaarstools van de browser.

Correlatie: Een opgenomen script opnieuw afspeelbaar maken

Een opgenomen script reproduceert exact wat er de eerste keer is gebeurd, wat zelden overeenkomt met wat er de tweede keer gebeurt. Sessie-ID's, tokens en gegenereerde sleutels die tijdens de opname zijn vastgelegd, zijn verouderde waarden tegen de tijd dat het script opnieuw wordt afgespeeld, en de uitvoering mislukt op manieren die lijken op applicatiefouten.

Correlatie is de oplossing. naprocessor zoals de reguliere expressie Extractor of de JSON ExtracTor onderschept de actuele waarde uit het inlogantwoord, slaat deze op in een variabele, en latere verzoeken verwijzen naar die variabele in plaats van naar de opgeslagen waarde.

De workflow is kort:

  1. Speel het script eenmaal opnieuw af met een View Results Tree-listener en zoek het eerste mislukte verzoek.
  2. Vergelijk het mislukte verzoek met de opname. Elke waarde die tussen twee uitvoeringen verschilt, moet worden gecorreleerd.
  3. Voeg een ex toetracTor verwijst naar het antwoord dat de waarde heeft gegenereerd en vervangt vervolgens de vastgelegde waarde door de variabeleverwijzing.
  4. Voeg een toe bewering Een pagina die HTTP 200 met een foutmelding retourneert, slaagt dus nog steeds niet voor de test.

Pas na correlatie kan het script veilig worden opgeschaald. Het uitvoeren van een ongecorreleerde meting bij honderd gebruikers meet de foutafhandeling in plaats van de werkelijke situatie. prestatieVerdere elementen worden behandeld in de JMeter tutorials.

Problemen oplossen

Als je problemen ondervindt tijdens het uitvoeren van het bovenstaande scenario, doe dan het volgende:

  1. Controleer of u via een proxy verbinding maakt met internet. Zo ja, verwijder de proxy.
  2. Open een nieuw exemplaar van JMeter.
  3. Open het RecordingTestPlan.jmx-bestand in JMeter.
  4. Klik met de rechtermuisknop op Workbench > Samenvoegen > Selecteer HTTP Proxy Server.jmx. JMeter In versie 5.x moet je de gegevens samenvoegen met het Testplan-knooppunt, aangezien WorkBench niet meer bestaat.
  5. Klik op Threadgroep > Samenvattend rapport.
  6. Voer de test uit.

Twee andere symptomen verklaren de meeste resterende problemen. Als de browser meldt dat er geen verbinding kan worden gemaakt, de recorder nooit is gestart, of de poort die in de browser is ingesteld niet overeenkomt met de poort die in de recorder is ingesteld, dan is dat het geval. JMeterAls pagina's normaal laden maar er niets in de boomstructuur verschijnt, is het verkeer HTTPS en is het certificaat niet geรฏmporteerd.

Veelgestelde vragen

Het werd verwijderd in JMeter 5.0. Niet-testelementen zoals de HTTP(S) Test Script Recorder worden nu rechtstreeks onder het Testplan-knooppunt toegevoegd.

Toevoegen URL Patronen die moeten worden uitgesloten op het tabblad 'Verzoekfiltering' van de recorder. Een patroon dat veelvoorkomende statische bestandsextensies omvat, verwijdert het meeste ruis voordat het script wordt bereikt.

AI classificeert opgenomen samples in bedrijfsstappen en ruis van derden, en stelt vervolgens voor welke te verwijderen en welke waarden gecorreleerd moeten worden, waardoor een ruwe opname sneller wordt omgezet in een bruikbaar script.

Ja. Op basis van de responsbody en de te vangen waarde genereert de AI een reguliere expressie of een paar grenzen. Controleer dit in de resultatenboom, aangezien een patroon in de ene respons wel kan overeenkomen en in de andere niet.

De browser vertrouwt de niet. JMeter proxy. Importeer ApacheJMeterTemporaryRootCA.crt van de JMeter Stel de bin-map in als een vertrouwde instantie, herstart de browser en neem opnieuw op.

Ja. Stel de Wi-Fi-proxy van het apparaat in op het IP-adres en de poort van de opnamemachine en installeer vervolgens de JMeter certificaat op het apparaat. Applicaties die gebruikmaken van certificaatpinning kunnen nog steeds niet worden opgenomen.

Nee. De grafische interface is bedoeld voor het bouwen en debuggen. Voer de daadwerkelijke test uit in de opdrachtregelmodus; die gebruikt veel minder geheugen en genereert aan het einde een HTML-rapport.

Testplannen worden opgeslagen als .jmx, een XML-formaat dat goed werkt met versiebeheer. Resultaten worden opgeslagen als .jtl, wat standaard een CSV-bestand is, maar ook als XML kan worden opgeslagen.

Vat dit bericht samen met: