Es ist ein schmaler Grat zwischen der Auswahl einer Anwendungsprogrammierschnittstelle (API) und der Entscheidung, ob Sie damit arbeiten können oder nicht. Die meisten REST-APIs haben eine generische Architektur und einen gemeinsamen Anforderungspfad. Aber einige APIs da draußen weichen vom Standard ab. Folglich werden sie schwierig zu verwenden.
Bevor Sie Ihre gesamte Software auf einer API aufbauen, müssen Sie daher Qualitätsprüfungen durchführen und sicherstellen, dass sie einwandfrei funktioniert. Was sind API-Tests und wie können Sie eine API testen?
Was sind API-Tests?
API-Tests umfassen die anfängliche Bewertung der Funktionalität, Sicherheit, Skalierbarkeit, Geschwindigkeit und mehr einer API, um festzustellen, ob sie für das Programm, das sie verwenden möchte, ideal ist. Oberflächlich betrachtet kann es jedoch erforderlich sein, zu testen, ob die entsprechenden Antworten gesendet werden, wenn Sie Anfragen über die verschiedenen Endpunkte stellen.
Abhängig von ihrer Struktur stellen Sie beim Testen einer API Anfragen (Get, Post, Update oder Delete) an die entsprechenden Endpunkte. Es gibt viele Metriken, die während des API-Tests überprüft werden müssen. Als Anfänger möchten Sie jedoch die Integrität einer API anhand ihres Statuscodes überprüfen und sicherstellen, dass sie die richtigen Daten abruft und akzeptiert.
Zu diesem Zweck kann eine API wie jede Webanfrage den 200-, 400- oder 500-Statuscode oder sogar andere zurückgeben.
Die meisten APIs verwenden JSON-Antworten, um ihre Nutzlasten bereitzustellen. Je nach Ziel können andere XML-, Multipart- oder HTML-Nutzlasten akzeptieren und mit diesen antworten.
So testen Sie eine API mit Python und JavaScript
Obwohl es im Internet viele API-Testtools für grafische Benutzeroberflächen (GUI) gibt, können Sie eine API mit geschriebenen Skripten kritischer beurteilen.
Eine API teilt in ihrer Dokumentation mit, welche Art von Anfragen sie zulässt und stellt ihnen relevante Endpunkte zur Verfügung. Sie können sie also mit den entsprechenden Anforderungsmethoden abrufen und testen.
Verwandte: Was ist die REST-API und wie können Sie Daten für Ihre App oder Website erfassen?
Im Gegensatz zur eigentlichen Produktionsphase sind API-Tests roh. Sie benötigen also nicht so viel Spezifität wie beim Ausführen der API für die Produktion. Obwohl es verschiedene Arten von API-Tests gibt, konzentrieren wir uns in diesem Artikel mehr auf Antwortvalidierungstests.
Wir werden einen Test gefälschter Speicher - API in diesem Tutorial mit der JavaScript holen und die Python - Anfragen Bibliothek. Dabei testen wir Endpunkte zum Abrufen, Veröffentlichen, Aktualisieren und Löschen von Daten.
So testen Sie einen Get-API-Endpunkt mit JavaScript
Wie Sie es in der Produktion verwenden würden, können Sie eine API in JavaScript entweder mit Axios oder der fetch- Methode testen .
So rufen Sie den Antwortstatus von der API mit fetch ab :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
Die obige Anfrage gibt einen 200-Status zurück, wenn es sich um eine gültige Antwort handelt. Sobald Sie eine erfolgreiche Anfrage gestellt haben, können Sie Echtzeitdaten von der API anfordern.
Lassen Sie uns die Daten von dieser API abrufen:
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
Die Antwort auf den obigen Abrufcode sieht wie folgt aus:
Um beispielsweise den Preis aller Produkte zu erhalten, können Sie die Kartenfunktion nutzen :
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))
Das obige protokolliert die folgende Ausgabe:
Testen eines Get-Endpunkts mit Python
Wie bereits erwähnt, verwendet Python auch die Anforderungsbibliothek, um auf die Daten einer API zuzugreifen.
So überprüfen Sie den Status der Antwort in diesem Fall:
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
Das Protokollieren von Daten wie oben gibt einen entsprechenden Status zurück. In diesem Fall sind es jedoch 200.
Lassen Sie uns nun mit Python die gleichen Daten erhalten wie bei der Verwendung von JavaScript:
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
Das Ergebnis der obigen Ausführungen sieht wie folgt aus:
Sie können bestimmte Daten mit der for-Schleife abrufen .
Um zum Beispiel Produktpreise zu erhalten:
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"])
So sieht die Ausgabe aus:
Testen eines Post-Endpunkts mit JavaScript
Nachdem Sie getestet haben, ob die Get- Anfrage funktioniert, sollten Sie je nach Ziel und Angebot der API prüfen, ob Sie auch Daten einfügen können.
Im Gegensatz zu , wie man eine machen Get - Anfrage, ein Beitrag akzeptiert Anfrage eine Nutzlast. Außerdem müssen Sie angeben, dass es sich um eine Post-Anfrage handelt:
// 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))
Der obige Code protokolliert den Antwortstatuscode und die neuen Informationen, die beim Ausführen eingefügt werden. Hier erfahren Sie, ob Ihre Anfrage erfolgreich war oder nicht. Wenn der Statuscode 200 lautet, verfügt Ihre API normalerweise über einen gültigen Endpunkt, der die entsprechende Antwort zurückgibt.
Post-Request mit Python testen
Sie können einen Post-Endpunkt einer API auch mit der Datei " requests.post" von Python testen . Wie bei der Verwendung von JavaScripts fetch müssen Sie auch hier die Nutzlast angeben:
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())
Wie JavaScript protokolliert der obige Python-Code auch den Antwortstatuscode und die neuen Daten, die in der Nutzlast angegeben sind .
Testen der Put-Endpunkte
Das Aktualisieren von API-Daten erfolgt nach dem gleichen Verfahren wie das Posten und Abrufen in beiden Sprachen.
Um dies mit dem fetch von JavaScript zu tun , müssen Sie nur Post durch Put ersetzen :
// 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))
Wenn Sie auf den API-Endpunkt achten, sehen Sie, dass dieser diesmal die Produkt-ID enthält. So weiß die API, welche Daten Sie in diesem Fall aktualisieren möchten.
Nichtsdestotrotz verwenden einige APIs möglicherweise andere Methoden, um ihre Endpunkte zu erstellen. Das ist also kein Standard.
Um die API-Datenaktualisierung mit Python zu testen, verwenden Sie stattdessen request.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())
Wenn die obigen Beispiele erfolgreich sind, fügen Sie die neuen Daten in Position 19 ein, wie vom API-Endpunkt angegeben.
Testen der Löschanforderung
Das Löschen von Daten aus einer API ist so einfach wie eine Get-Anfrage. Das liegt daran, dass Sie im Gegensatz zu Post und Put keine Nutzlast angeben müssen. Sie benötigen lediglich den Löschendpunkt.
Unsere hier gewählte API verwendet die Produkt-ID, um ihre Daten zu verfolgen. Das Löschen eines Produkts ist also ganz einfach:
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))
Sie benötigen nur wenige Codezeilen, um dasselbe mit Python zu erreichen:
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Beide obigen Beispiele protokollieren den Antwortstatuscode und die zur abgefragten ID gehörenden Daten (in diesem Fall 19).
Sind diese Testmethoden generisch?
Obwohl wir uns in diesem Beitrag nur auf eine einzelne API konzentriert haben, unterscheiden sich die zum Testen der CRUD-Endpunkte verwendeten Methoden nicht bei anderen APIs. Der einzige Unterschied könnte natürlich in den Regeln für jede API-Struktur und den Richtlinien für das Anfordern von Daten liegen. Nachdem Sie diese für eine ausgewählte API entschlüsselt haben, können Sie die entsprechenden Endpunkte mit der entsprechenden Methode wie hier beschrieben testen.
Da jede API Regeln für die Verbindung mit ihr hat, können einige beim Testen zusätzliche Parameter bereitstellen, die Sie in Ihre Anforderungsheader aufnehmen können. Zu solchen Parametern gehören normalerweise ein Zugriffstoken oder andere, wie in der Dokumentation angegeben.