Test API automatique des sites WordPress avec codeception
Alternativement, la suite \
Dossier Bee. Un ensemble Yml est l’endroit où nous devons ajouter le module rest et le configurer avec l’URL de notre site. À cause de l’API delciousbrains. Puisque j’ajoute la chaîne de requête WC API = Delicious Brains à l’url du site WordPress basée sur woocommerce, le test utilisera par défaut l’url de l’api: acteur: module apitesteur: activé: – configuration rest: rest: URL: ‘% WP _ URL% \/? L’API WC = Delicious Brains dépend de: phpbrowser Writing test lorsque j’ai écrit le test pour le site principal, j’ai utilisé le format de procédure \
La base de la rédaction des tests API consiste à envoyer des demandes à l’API et à vérifier les réponses. Le module rest a des méthodes pour envoyer des demandes get, Post, put, delete et patch, et diverses méthodes pour tester les réponses aux demandes. Par exemple, vous pouvez vérifier que le paramètre renvoie une réponse avec le Code 200 contenant les données json: $I – > sendget (\
$I – > voir responsecontains json (array (‘success’ = > True)); Lorsque codeception a généré la suite de test \
Quiz Par exemple, notre API woocommerce n’est pas une API reposante, elle a un routage d’URL traditionnel avec des verbes comme Bees. Délicieux cerveau. Com \/ license \/ {Key} \/ activate, au lieu de passer les données à l’URL de base en utilisant les paramètres de la chaîne de requête:
https:\/\/deliciousbrains.com\/?wc API = Delicious Brains & request = activate _ license & license key = {Key} as described above, I set https:\/\/deliciousbrains.com\/?wc API = Delicious Brain comme URL de repos dans la configuration de l’API. Un ensemble Yml, donc je dois personnaliser l’URL passée aux méthodes sendget et sendpost avec d’autres données, mais d’une manière réutilisable afin qu’elle puisse être appelée plus d’une fois sur le même point d’extrémité pendant le test. J’ajoute cette méthode au fichier apitester. PHP: public function sendrequest ($$Endpoint, $args = array (), $$post _ args = array () {$args = array ()) {$args = array Merge (array (‘request’ = > $$Endpoint, $$args); $$args = http Build Query ($$args); if (! Empty ($$post args)) {$$$this – > sendpost (\
$args = array (‘license _ key’ = > ‘a9e82788 – 5b8d – 4b02 – 5f6a – 2f6a8aa3eed3’, ‘product’ = > ‘WP migration DB pro’, ‘site URL’ = > ‘example.com’ $ I – > sendrequest (‘activez _ license’, $args); Comme le test fonctionne à plusieurs reprises sur la même clé de licence et d’autres types de données, j’a i besoin d’un moyen de désabonner la clé au début de chaque test. Fichier apitesteur. PHP est également un bon endroit pour ce type de code: la fonction publique dontseactivationforlicencekey ($license _ key) {$Table = $this – > grabbprefixedtablenamefor (‘woocomberce Software licenses’); $this – > dontseeinabase ($table, array (‘ license key = > $license key);} J’a I également ajouté une déclaration personnalisée pour m’assurer que les licences et les abonnements sont actifs après l’exécution d’une demande d’api dans un test:
Fonction publique
Voir activactivationforlicenencencekey ($$license _ Key, $$site URL, $$check active = False) {$licenses table = $this – > grabbprefixtabletablenamefor (‘woocompomerce Software licenses’); $this – > seeinidatabase ($$licenses table, $$license Key, $$site URL, $$check active = False) {$licenses table = $this – > grabbprefixtabletablenamefor (‘ wooocommerce Software licenses’); $this – > seeinidatabase ($$licenses table, array ($$license key ‘= > $license key’ = ‘= > $check u key)); $Key \ \ id = $this – > grabbfromdatabase ($licenses \ \ table,’ key \ \ id ‘,’ license \ \ key ‘= > $license \ \ Key)); $args = array (‘key _ id’ = > $Key ID, ‘instance’ = > $site URL); Si ($check _ active) {$args [‘activation active’] = 1;} Activités _ table = $this – > grabbprefixedtablename for (‘woocomberce Software Activities’) $ Ceci – > voir la base de données ($activities _ table, $args);} Voici un exemple d’un cas d’essai du paramètre activeleccence qui a testé une demande invalide sans clé de licence et une activation de licence réussie:
Classclassclassactivatelicencececetest {protected $Endpoint = ‘activation _ license’ ‘; public funfunction nolicencencekekeyetest (apitester $i) {$I – >sendrequest ($$this – > Endpoint); $$I – > seeresponseisjson (); $I – > seeresponseresponseresponseisjson (); $$$I – > seeresponseresponsecontaainsjson (Arrays (‘ Errors’ = > array (‘no license Key ARG’ = ‘= > license’; license »; public funfunfunction nolicekeyetest (apitester $i) {$I – >sendrequest ($$this – > $this – > Endpoint); $$I – > seeresponseresponseresponseisjson ‘ukey Parameters’))} Validtest (apitesteur $i) {$args = array (‘license _ key = >’ a9e82788 – 5b8d – 4b02 – 5f6a – 2f6a8aa3eed3 ‘,’ product = > ‘WP migration DB Program’, ‘site URL = > example.com’,) $$I – >sendrequest (‘this – >endpoint, $$args) {$args = array (‘ license key = > ‘a9e82788 – 5b8d – 4b02 – 5f6a – 2f6a8aa3eed3’, ‘product = >’ WP migration DB Program ‘,’ site URL = > example.com ‘,) $$I – >sendrequessearesponsecodeis (200); $I – > searesponsecontainson (array (‘ email = > ‘ [protégé par courriel] ‘ ) ); $ I – > voir responsecontains json (array (‘is _ First activation’ = > ‘0’) $ I – > voir activation de la clé de licence ($args [‘license _ key’, $args [‘site url]);}} Comme pour les tests unitaires, la plupart des tests écrits ne comprennent que des tests de réussite et d’écriture pour couvrir tous les différents scénarios du Code.
En écrivant des tests couvrant tous les paramètres, j’ai rencontré quelque chose que je devrais partager avec n’importe qui dans le futur
Sinon, il ferait la même chose. Lors de la mise à l’essai du fichier zip responsable de la distribution des mises à jour du plug – in au paramètre de téléchargement du site Web du client, j’ai réalisé que les demandes de téléchargement réussies ne renvoyaient pas json, mais les données réelles du fichier. Je ne veux pas vérifier si les données du fichier sont 100% correctes, mais je veux au moins m’assurer que certaines données sont retournées. J’a i trouvé que la meilleure façon de vérifier n’était pas d’utiliser une assertion json, mais plutôt d’interroger l’en – tête http pour une réponse pour s’assurer que le fichier est du bon type et contient du contenu: $args = array (‘license _ key = \
Option _ tests else # Run specific suite Test script = ${script \/ # $prefix} script suite = \