In een multi-step API monitoring set-up worden variabelen meestal gebruikt om waarden uit uw HTTP-responsen te extraheren en ze tijdelijk op te slaan, zodat u ze opnieuw kunt gebruiken in een latere stap. Hiermee kunt u in feite stappen aan elkaar koppelen: elke keer dat u een stukje informatie uit een HTTP-respons wilt halen en die informatie wilt gebruiken om de volgende HTTP-request uit te voeren, hebt u een variabele nodig. Simpel gezegd: Stap 1 ontvangt een waarde van uw server en slaat deze op in een variabele. Stap 2 neemt dan de waarde die we zojuist hebben opgeslagen en gebruikt deze om een nieuwe request op te bouwen. U kunt zoveel variabelen gebruiken als u wilt en ze in zoveel stappen gebruiken als u nodig hebt.

Een tweede reden om variabelen te gebruiken, is om bepaalde waarden slechts eenmaal te definiëren en ze in verschillende stappen opnieuw te gebruiken. Normaal gesproken voegt u deze waarden toe in het gedeelte Voorgedefinieerde variabelen: die variabelen zijn in elke stap beschikbaar gedurende het gehele meerstapsscenario. Zie het gedeelte Voorgedefinieerde variabelen voor meer informatie.

Alle variabelen die u in een stap definieert worden geëvalueerd zodra de HTTP-request is uitgevoerd en de respons is verwerkt. Op dat moment, als een variabele al bestond (ofwel door een vorige stap, of omdat u deze vooraf hebt gedefinieerd), wordt de bestaande waarde ervan overschreven. Anders wordt een nieuwe variabele gemaakt en aan de lijst toegevoegd. Deze lijst met variabelen en bijbehorende waarden wordt vervolgens meegenomen naar de volgende stap.

Variabelen definiëren

Als u variabelen wilt gebruiken, moet u ons vertellen welke waarde we in die variabele moeten opslaan. Vergelijkbaar met het patroon dat wordt gebruikt om assertions te definiëren, worden variabelen op de volgende manier gedefinieerd:

Source property variable name
bijvoorbeeld:
Response body as JSON access_token access_token
  • De variable source: dit veld definieert welk kenmerk van de HTTP respons u wilt extraheren. Alle beschikbare opties worden in dit artikel beschreven.
  • De variable property: sommige source-opties (met name de contentextractie en header-gerelateerde opties) vereisen dat u verder specificeert welke content of header moet worden gecontroleerd. Dit wordt uitgebreider uitgelegd voor elk geschikte sourcetype.
  • De variable name:dit is de identifier die in de volgende stappen zal worden gebruikt om terug te verwijzen naar deze variabele, met behulp van een speciale notatie.

Als er een probleem optreedt tijdens de evaluatie van een variabele (bijvoorbeeld omdat u probeert een waarde te extraheren die niet aanwezig is in de responscontent), zal de de stap mislukken en zal er een fout worden gerapporteerd.

Verwijzen naar variabelen in andere stappen

Nadat een variabele met succes is geëvalueerd, kan de waarde ervan opnieuw worden gebruikt in de requestdefinitie van volgende stappen. Refereer altijd naar een variabele door de variabelenaam tussen dubbele accolades te plaatsen: {{variable-name}}.

  • In de URL van een stap: https://myapi.customer.com/ProductInfo/{{ProductId}}
  • In een Request header: Authorization: Bearer {{access_token}}
  • In Request Body content:

    { "ProductId": "{{ProductId}}", "Code": "P123456" }
  • In de doelwaarde van een assertion. Bijvoorbeeld als u een variabele{{ProductId}} hebt (in een vorige stap ingevuld, of als een vooraf gedefinieerde waarde), kunt u die gebruiken om te verifiëren dat een respons de feitelijke waarde in die variabele bevat:

    Response body as JSONProducts [0].Id Equals {{ProductId}}
  • In de propertywaarde van een assertion. Als u een variabele{{ProductId}} hebt, kunt u naar die variabele verwijzen in een JSON expression of XPath query om de inhoud te selecteren die u wilt verifiëren:

    Response body as XML //Product[@Id="{{ProductId}}"]/Name/text() Equals Chocolate chip cookie

Voorgedefinieerde variabelen

Onder de step-editor vindt u een extra gedeelte waarin u meer variabelen kunt specificeren. Deze variabelen zijn beschikbaar aan het begin van het hele scenario. Als u een bepaalde waarde meerdere keren nodig hebt, kunt u die waarde van tevoren definiëren en in verschillende stappen gebruiken. Dit kan een product-id zijn die u in uw hele scenario wilt gebruiken, een API-sleutel of andere speciale waarden die uw API nodig heeft.

Eén specifiek geval is het gebruik van een variabele die de domeinnaam voor elke API bevat. Door die variabele als onderdeel van elke URL te gebruiken, hoeft u deze niet in elke stap te herhalen, waardoor u deze heel gemakkelijk voor het hele scenario kunt wijzigen.

Om dit te doen creëert u een variabele genaamd BaseUrl met waarde https://test.yourapi.com. Met behulp van een verwijzing naar die variabele kan de URL voor elke API-stap deze vorm aannemen: {{BaseURL}}/UserService/GetUserInfo. Met deze aanpak kunt u uw meerstapsscenario wijzigen en naar een andere omgeving laten verwijzen (bijvoorbeeld een staging-omgeving versus een productieomgeving) zonder dat elke stap gewijzigd hoeft te worden. It's important to use the name BaseUrl, because we need to treat it a little differently from other variables, as explained below.

Het is belangrijk de naam BaseUrl te gebruiken, omdat we het een beetje anders moeten behandelen dan andere variabelen, zoals hieronder wordt uitgelegd.

Codering van waarden van variabelen

Afhankelijk van waar u uw variabelen gebruikt, moeten we enkele coderingsregels toepassen op de bijbehorende waarden. Codering betekent dat we speciale tekens zullen converteren naar een formaat dat geschikt is voor een HTTP-request. Bijvoorbeeld: als u een variabele hebt genaamd CompanyName met een waarde Ben & Jerry's, zullen we deze zonodig automatisch converteren naar Ben+%26+Jerry's.

  We volgen deze regels:

  • Variabelen die in het URL-veld van een stap worden gebruikt worden URL-gecodeerd.
  • Variabelen die in het veld Request Body van een stap worden gebruikt worden alleen URL-gecodeerd als een Content Type header is gespecificeerd met de waarde application/x-www-form-urlencoded.
  • De variabele genaamd BaseUrl wordt NIET URL-gecodeerd, omdat het domeinnaamgedeelte van een URL niet gecodeerd mag zijn.

De laatste regel verklaart waarom ons BaseUrl-voorbeeld speciaal is: de tekens dubbelepunt en forward slash in een waarde https://test.yourapi.com/Products nooit mogen worden gecodeerd.

Automatische variabelen

Afgezien van de variabelen die u in uw controleregelinstellingen definieert, hebt u ook toegang tot een aantal automatische variabelen die wij voor u maken. De meeste hiervan zijn feitelijk functies die een waarde genereren die u kunt gebruiken in uw HTTP requests en tijdens de evaluatie van uw HTTP responses met behulp van assertions.

De volgende automatische variabelen zijn beschikbaar:

  • @DateTime(format,offset): De variabele @DateTime genereert dynamische datum- en/of tijdwaarden, in overeenstemming met het formaat dat u specificeert. De datum/tijd is altijd de huidige tijd uitgedrukt in de UTC-tijdzone. Het is mogelijk om datums/tijden/tijdzones te genereren door de optionele verschuivingsparameter te specificeren, die het opgegeven aantal seconden optelt/aftrekt. Om bijvoorbeeld de huidige UTC-tijd om te zetten naar Eastern Standard Time (UTC-5) specificeert u -18000 (-5 * 60 * 60) als de verschuiving. 'Deze tijd/dit tijdstip morgen' berekent u op dezelfde manier: specificeer 86400 (24 * 60 * 60). Als u de geen verschuivingswaarde opgeeft, wordt er geen verschuiving toegepast. Bijvoorbeeld: als het nu 24 februari 2018 22:30 UTC is, leveren de volgende expressies deze resultaten op:
    {{@DateTime(dd-MM-yyyy HH:mm)}} 24-02-2018 22:30
    Nu
    {{@DateTime(ISO)}} 2018-02-24T22:30:00.0000000Z
    ISO 8601 formaat
    {{@DateTime(UNIX)}} 1519511400
    Unix epoch time
    {{@DateTime(MM/dd/yyyy,-86400)}} 02/23/2018
    Gisteren
    {{@DateTime(MM/dd/yyyy,86400)}} 02/25/2018
    Morgen
  • Random-Guid: Deze variabele produceert een willekeurige waarde in de vorm AB0AD14D-9611-41A8-9C25-7D94B895CFF1. U kunt deze variabele gebruiken als u een willekeurige waarde wilt opnemen in uw URL, POST data of HTTP header.
    Als u de Random-Guid variabele in meerdere stappen gebruikt, krijgt elke stap een andere willekeurige waarde. Elke keer dat de controleregel wordt uitgevoerd, krijgt u volledig nieuwe willekeurige waarden.
  • Checkpoint-Server-Id:ijdens de uitvoering van een Multi-step API controleregel, voert deze variabele een numerieke waarde uit die de locatie van het Uptrends-controlestation identificeert die deze controle uitvoert.
    Als de controle bijvoorbeeld wordt uitgevoerd op ons controlestation in Sydney, Australië, wordt de variabele 30. uitgevoerd. De lijst met controlestationservers en hun corresponderende Server IDs is middels de Uptrends API verkrijgbaar op de Checkpointservers endpoint.
  • RedirectUrl:In het geval dat een van de stappen in uw controleregel naar verwachting een redirect code retourneert en u wilt die redirectrespons vastleggen en testen in plaats van deze automatisch te volgen, bevat deze automatische variabele de URL waarnaar de redirect verwijst.
    Dit gebeurt alleen als u ervoor kiest om niet automatisch redirects te volgen, maar een Assertion instelt die controleert op de juiste redirectcode. Deze procedure wordt hier gedetaileerder uitgelegd: Omgaan met redirects in multi-step monitoring.

Een automatisch gegenereerde waarde meerdere keren gebruiken

Sommige van deze variabele functies (met name de functies die willekeurige en datum/tijd-variabelen produceren) worden telkens wanneer u ze gebruikt opnieuw beoordeeld en zullen elke keer een nieuwe waarde genereren. Als u een bepaalde waarde wilt genereren en deze meerdere keren wilt gebruiken in uw meerstapsscenario, kunt u een vooraf gedefinieerde variabele definiëren (zoals in een van de eerdere delen is besproken) en als zijn waarde een automatische variabele gebruiken.

Voorbeelden van vooraf gedefinieerde variabelen met automatische variabelen

Naam Waarde Gebruik
SearchDate {{@DateTime(dd-MM-yyyy)}} Gebruik een datumwaarde als input voor een zoekopdracht.
UniqueEmail {{@RandomGuid}}@mycompany.com Gebruik een willekeurige guid-waarde in combinatie met vaste tekst om een e-mailadres te genereren dat elke keer anders is.
OrderAmount {{@RandomInt(1, 10)}} Gebruik een willekeurig getal tussen 1 en 10 als het aantal te bestellen producten. In een volgende call kunt u deze variabele opnieuw gebruiken om de inhoud van een winkelwagen te controleren en te kijken of deze inderdaad de bestelde hoeveelheid bevat.