La ligne est mince entre choisir une interface de programmation d'applications (API) et décider si vous pouvez l'utiliser ou non. La plupart des API REST ont une architecture générique et un chemin de requête commun. Mais certaines API s'écartent de la norme. Par conséquent, ils deviennent difficiles à utiliser.
Ainsi, avant de construire l'intégralité de votre logiciel sur une API, vous devez effectuer des contrôles de qualité et vous assurer qu'il fonctionne correctement. Alors, qu'est-ce que le test d'API et comment pouvez-vous tester une API ?
Qu'est-ce que les tests d'API ?
Les tests d'API impliquent l'évaluation initiale des fonctionnalités, de la sécurité, de l'évolutivité, de la vitesse et plus encore d'une API pour voir si elle est idéale pour le programme qui souhaite l'utiliser. Mais superficiellement, cela peut impliquer des tests pour voir s'il envoie les réponses appropriées lorsque vous effectuez des demandes via ses différents points de terminaison.
En fonction de sa structure, lors du test d'une API, vous effectuerez des requêtes (Obtenir, Publier, Mettre à jour ou Supprimer) à ses points de terminaison pertinents. Il existe de nombreuses métriques à vérifier lors des tests d'API. Mais à un niveau débutant, vous souhaitez valider l'intégrité d'une API à partir de son code d'état et vous assurer qu'elle récupère et accepte les données correctes.
À cette fin, comme toute requête Web, une API peut renvoyer le code d'état 200, 400 ou 500 ou même d'autres.
La plupart des API utilisent des réponses JSON pour servir leurs charges utiles. Selon l'objectif, d'autres peuvent accepter et répondre avec des charges utiles XML, en plusieurs parties ou HTML.
Comment tester une API en utilisant Python et JavaScript
Bien qu'il existe de nombreux outils de test d'API d'interface utilisateur graphique (GUI) sur Internet, vous pouvez évaluer une API de manière plus critique avec des scripts écrits.
Une API indique dans sa documentation le type de requêtes qu'elle autorise et leur fournit des points de terminaison pertinents. Vous pouvez donc les récupérer et les tester en utilisant les méthodes de requête appropriées.
Connexes : Qu'est-ce que l'API REST et comment pouvez-vous récupérer des données pour votre application ou votre site Web ?
Contrairement à la phase de production réelle, les tests API sont bruts. Vous n'avez donc pas besoin d'autant de spécificité que lors de l'exécution de l'API pour la production. Bien qu'il existe différents types de tests d'API, nous nous concentrerons davantage sur les tests de validation de réponse dans cet article.
Nous allons tester une API de restauration de faux dans ce tutoriel en utilisant JavaScript de d' extraction et de Python demandes bibliothèque. Ce faisant, nous testerons les points de terminaison pour obtenir, publier, mettre à jour et supprimer des données.
Comment tester un point de terminaison d'API Get avec JavaScript
Comme vous l'utiliseriez en production, vous pouvez tester une API en JavaScript en utilisant Axios ou la méthode fetch .
Pour obtenir le statut de la réponse de l'API à l'aide de fetch :
fetch('https://fakestoreapi.com/products', ).then(res =>{ console.log(res) })
La requête ci-dessus renvoie un état 200 s'il s'agit d'une réponse valide. Une fois que vous avez fait une demande réussie, vous pouvez alors demander des données en temps réel à partir de l'API.
Récupérons les données de cette API :
fetch('https://fakestoreapi.com/products', ).then(res =>{ if (res.ok){ return res.json() } }).then(response=>{ console.log(response) }).catch(err => console.log(err))
La réponse au code de récupération ci-dessus ressemble à ceci :
Pour obtenir le prix de tous les produits, par exemple, vous pouvez utiliser la fonction carte :
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))
Ce qui précède enregistre la sortie suivante :
Tester un point de terminaison Get avec Python
Comme mentionné précédemment, Python utilise également la bibliothèque de requêtes pour accéder aux données d'une API.
Pour vérifier l'état de la réponse dans ce cas :
import requests data = requests.get('https://fakestoreapi.com/products') print(data.status_code)
L'enregistrement des données comme nous l'avons fait ci-dessus renvoie un statut correspondant. C'est 200 dans ce cas, cependant.
Maintenant, obtenons les mêmes données avec Python qu'en utilisant JavaScript :
import requests data = requests.get('https://fakestoreapi.com/products') myData = data.json() print(myData)
Le résultat de ce qui précède ressemble à ceci :
Vous pouvez obtenir des données spécifiques en utilisant la boucle for .
Pour obtenir les prix des produits, par exemple :
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"])
Voici à quoi ressemble la sortie :
Tester un point de terminaison de publication avec JavaScript
Après avoir testé et vérifié que la requête Get fonctionne, en fonction de votre objectif et de ce que propose l'API, vous voudrez peut-être vérifier si vous pouvez également y insérer des données.
Contrairement à la façon dont vous effectuez une demande Get , une demande Post accepte une charge utile. De plus, vous devrez spécifier qu'il s'agit d'une requête Post :
// 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))
Le code ci-dessus enregistre le code d'état de la réponse et les nouvelles informations insérées lorsque vous l'exécutez. Cela vous indique si votre demande a abouti ou non. En règle générale, si le code d'état est 200, votre API a un point de terminaison valide qui renvoie la réponse appropriée.
Tester la demande de publication avec Python
Vous pouvez également tester un point final post d'une API à l' aide de Python de requests.post . Comme vous l'avez fait lors de l'utilisation de fetch de JavaScript , vous devez également spécifier la charge utile ici :
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())
Comme JavaScript, le code Python ci-dessus enregistre également le code d'état de la réponse et les nouvelles données spécifiées dans la charge utile .
Test des points de terminaison de vente
La mise à jour des données de l'API nécessite le même processus que leur publication et leur obtention dans les deux langues.
Pour ce faire à l'aide du fetch de JavaScript , il vous suffit de remplacer Post par 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))
Si vous faites attention au point de terminaison de l'API, vous verrez qu'il inclut cette fois l'ID du produit. C'est ainsi que l'API sait quelles données vous souhaitez mettre à jour dans ce cas.
Néanmoins, certaines API peuvent utiliser d'autres méthodes pour créer leurs points de terminaison. Ce n'est donc pas une norme.
Pour tester la mise à jour des données de l'API à l'aide de Python, utilisez plutôt 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())
Les exemples ci-dessus, en cas de succès, insèrent les nouvelles données à la position 19 comme indiqué par le point de terminaison de l'API.
Test de la demande de suppression
Supprimer des données d'une API est aussi simple que de faire une requête Get. C'est parce que, contrairement à Post et Put, vous n'avez pas besoin de spécifier de charge utile. Tout ce dont vous avez besoin est le point de terminaison de suppression.
L'API que nous avons choisie utilise ici l'ID du produit pour suivre ses données. Ainsi, supprimer un produit est simple :
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))
Vous n'avez besoin que de quelques lignes de code pour obtenir la même chose en utilisant Python :
import requests Posted = requests.delete('https://fakestoreapi.com/products/19', ) print(Posted.status_code) print(Posted.json())
Les deux exemples ci-dessus enregistrent le code d'état de la réponse et les données appartenant à l'ID interrogé (19 dans ce cas).
Ces méthodes de test sont-elles génériques ?
Bien que nous ne nous soyons concentrés que sur une seule API dans cet article, les méthodes utilisées pour tester les points de terminaison CRUD ne sont pas différentes lorsqu'elles traitent avec d'autres API. La seule différence, bien sûr, pourrait résider dans les règles entourant chaque structure d'API et les directives pour la demande de données. Une fois que vous les avez déchiffrés pour une API choisie, vous pouvez ensuite utiliser la méthode appropriée, comme décrit ici, pour tester ses points de terminaison correspondants.
Ainsi, étant donné que chaque API a des règles pour s'y connecter, donc lors des tests, certaines peuvent fournir des paramètres supplémentaires à inclure dans vos en-têtes de requête. Ces paramètres incluent généralement un jeton d'accès ou d'autres, comme indiqué dans la documentation.