Het is een dunne lijn tussen het kiezen van een Application Programming Interface (API) en beslissen of je ermee kunt werken of niet. De meeste REST-API's hebben een generieke architectuur en hebben een gemeenschappelijk verzoekpad. Maar sommige API's wijken af van de standaard. Daardoor worden ze moeilijk te gebruiken.
Dus voordat u uw volledige software op een API bouwt, moet u kwaliteitscontroles uitvoeren en ervoor zorgen dat het goed werkt. Dus wat is API-testen en hoe kunt u een API testen?
Wat is API-testen?
API-testen omvatten de eerste beoordeling van de functionaliteit, beveiliging, schaalbaarheid, snelheid en meer van een API om te zien of het ideaal is voor het programma dat het wil gebruiken. Maar oppervlakkig gezien kan het testen inhouden om te zien of het de juiste antwoorden verzendt wanneer u verzoeken doet via de verschillende eindpunten.
Afhankelijk van de structuur, doe je tijdens het testen van een API verzoeken (Get, Post, Update of Delete) naar de relevante eindpunten. Er zijn veel statistieken om te controleren tijdens API-tests. Maar op beginnersniveau wil je de integriteit van een API valideren aan de hand van de statuscode en ervoor zorgen dat deze de juiste gegevens ophaalt en accepteert.
Daartoe kan een API, zoals elk webverzoek, de 200, 400 of 500 statuscode of zelfs andere retourneren.
De meeste API's gebruiken JSON-reacties om hun payloads te bedienen. Afhankelijk van het doel kunnen anderen de payloads XML, multipart of HTML accepteren en erop reageren.
Een API testen met Python en JavaScript
Hoewel er veel grafische gebruikersinterface (GUI) API-testtools op internet zijn, kunt u een API kritischer beoordelen met geschreven scripts.
Een API vertelt in zijn documentatie het soort verzoeken dat het toestaat en biedt relevante eindpunten voor hen. U kunt ze dus pakken en testen met behulp van de juiste aanvraagmethoden.
Gerelateerd: Wat is REST API en hoe kunt u gegevens voor uw app of website verzamelen?
In tegenstelling tot de eigenlijke productiefase, is API-testen grof. U hebt dus niet zoveel specificiteit nodig als bij het uitvoeren van de API voor productie. Hoewel er verschillende soorten API-tests zijn, zullen we ons in dit artikel meer richten op responsvalidatietests.
We zullen een testen nep-winkel API in deze tutorial met behulp van JavaScript's te halen en Python's verzoeken bibliotheek. Terwijl we dit doen, testen we eindpunten voor het ophalen, plaatsen, bijwerken en verwijderen van gegevens.
Een Get API-eindpunt testen met JavaScript
Zoals u het in productie zou gebruiken, kunt u een API in JavaScript testen met behulp van Axios of de fetch- methode.
Om de antwoordstatus van de API op te halen met fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
Het bovenstaande verzoek retourneert een 200-status als het een geldig antwoord is. Nadat u een succesvolle aanvraag heeft gedaan, kunt u realtime gegevens opvragen bij de API.
Laten we de gegevens van deze API halen:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
Het antwoord op de bovenstaande ophaalcode ziet er als volgt uit:
Om de prijs van alle producten te krijgen, bijvoorbeeld, kunt u de te gebruiken kaart functie:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ response.map(data =>{ console.log(data.price) }) // console.log(response) }).catch(err => console.log(err))
Het bovenstaande logt de volgende uitvoer:
Een Get-eindpunt testen met Python
Zoals eerder vermeld, gebruikt Python ook de verzoekenbibliotheek om toegang te krijgen tot de gegevens van een API.
Om in dit geval de status van het antwoord te controleren:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
Het loggen van gegevens zoals we hierboven deden, retourneert een overeenkomstige status. In dit geval is het echter 200.
Laten we nu dezelfde gegevens met Python krijgen als tijdens het gebruik van JavaScript:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
Het resultaat van het bovenstaande ziet er als volgt uit:
U kunt specifieke gegevens krijgen met behulp van de for-lus .
Om productprijzen te krijgen, bijvoorbeeld:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() indexes = 0 for i in myData: goods = myData[indexes] indexes +=1 print(goods["price"])
Zo ziet de uitvoer eruit:
Een post-eindpunt testen met JavaScript
Nadat je hebt getest en hebt gezien dat het Get- verzoek werkt, wil je, afhankelijk van je doel en wat de API biedt, misschien controleren of je er ook gegevens in kunt invoegen.
In tegenstelling tot hoe u een Get- verzoek doet, accepteert een Post- verzoek een payload. Bovendien moet je specificeren dat het een Post-verzoek is:
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products', { method: "Post", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload to JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
De bovenstaande code registreert de reactiestatuscode en de nieuwe informatie die is ingevoegd wanneer u deze uitvoert. Dit vertelt u of uw verzoek is doorgekomen of niet. Als de statuscode 200 is, heeft uw API doorgaans een geldig eindpunt dat het juiste antwoord retourneert.
Postverzoek testen met Python
U kunt ook een post-eindpunt van een API testen met behulp van Python's requests.post . Zoals je deed tijdens het gebruik van JavaScript's fetch , moet je hier ook de payload specificeren:
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.post('https://fakestoreapi.com/products', data = payload ) print(Posted.status_code) print(Posted.json())
Net als JavaScript registreert de bovenstaande Python-code ook de responsstatuscode en de nieuwe gegevens die zijn opgegeven in de payload .
De put-eindpunten testen
Het bijwerken van API-gegevens vereist hetzelfde proces als het plaatsen en verkrijgen ervan in beide talen.
Om dit te doen met behulp van JavaScript's fetch , hoeft u alleen Post te vervangen door Put :
// Specify the payload let payload = { title: 'new product', price: 13.5, description: 'test description', image: '', category: 'electronic' } fetch('https://fakestoreapi.com/products/19', { method: "Put", headers:{ 'Content-Type': 'application/json' }, body: JSON.stringify(payload) //convert the payload into JSON } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Als u aandacht besteedt aan het API-eindpunt, ziet u dat het deze keer de product-ID bevat. Zo weet de API welke gegevens je in dit geval wilt updaten.
Desalniettemin kunnen sommige API's andere methoden gebruiken om hun eindpunten te maken. Dat is dus geen standaard.
Om API-gegevensupdate met Python te testen, gebruikt u in plaats daarvan verzoeken.put :
import requests payload = { 'title': 'new product', 'price': 13.5, 'description': 'test description', 'image': '', 'category': 'electronic' } Posted = requests.put('https://fakestoreapi.com/products/19', data = payload ) print(Posted.status_code) print(Posted.json())
De bovenstaande voorbeelden, indien succesvol, voeg de nieuwe gegevens in op positie 19 zoals aangegeven door het API-eindpunt.
Het verwijderverzoek testen
Het verwijderen van gegevens uit een API is net zo eenvoudig als het maken van een Get-verzoek. Dat komt omdat u, in tegenstelling tot Post en Put, geen payload hoeft op te geven. Het enige dat u nodig hebt, is het eindpunt voor verwijderen.
De hier gekozen API gebruikt de product-ID om zijn gegevens bij te houden. Een product verwijderen is dus eenvoudig:
fetch('https://fakestoreapi.com/products/19', { method: "Delete", headers:{ 'Content-Type': 'application/json' } } ).then(res =>{ if (res.ok){ console.log(res.status) return res.json() } }).then(response => { console.log(response) }).catch(err => console.log(err))
Je hebt maar een paar regels code nodig om hetzelfde te bereiken met Python:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Beide bovenstaande voorbeelden registreren de antwoordstatuscode en de gegevens die bij de opgevraagde id horen (19 in dit geval).
Zijn deze testmethoden algemeen?
Hoewel we ons in dit bericht slechts op één enkele API hebben gericht, zijn de methoden die worden gebruikt om de CRUD-eindpunten te testen niet anders bij het omgaan met andere API's. Het enige verschil kan natuurlijk zitten in de regels rond elke API-structuur en richtlijnen voor het opvragen van gegevens. Nadat u deze hebt ontcijferd voor een gekozen API, kunt u de juiste methode gebruiken, zoals hier beschreven, om de bijbehorende eindpunten te testen.
Aangezien elke API dus regels heeft om ermee te verbinden, kunnen sommige tijdens het testen aanvullende parameters bieden die u in uw aanvraagheaders kunt opnemen. Dergelijke parameters bevatten meestal een toegangstoken of andere zoals vermeld in de documentatie.