10 strumenti di test PHP per plugin di WordPress
Pubblicato: 2022-08-05Nessun software è privo di bug. Questo è un assioma che si applica a ogni linguaggio di programmazione ea ogni applicazione.
Quando questi bug vengono distribuiti all'interno del tuo sito Web in produzione, puoi subire conseguenze negative di gravità variabile. Questi sono alcuni esempi, che vanno dal fastidioso all'economicamente dannoso:
- Lieve: un utente non è in grado di fare clic su un collegamento interrotto.
- Grave: il pulsante "Invia" di un modulo di contatto non funziona, che l'utente scopre solo dopo aver composto il messaggio.
- Grave: un gateway di pagamento non configurato correttamente, che impedisce agli utenti di acquistare prodotti nel tuo negozio di e-commerce, abbandonando così il sito.
Nessuno strumento unico è sufficiente per gestire tutti gli aspetti del test di un'applicazione da tutte le diverse angolazioni possibili. Infatti, oltre a trovare bug, è fondamentale eseguire test aggiuntivi per validare altre funzioni dell'applicazione, come ad esempio:
- Accessibilità e usabilità
- Prestazioni accettabili
- Movimentazione del traffico e del carico
In questo articolo, esamineremo 10 strumenti creati dalla comunità open source che possono aiutare a creare uno stack per testare il codice PHP nei plugin di WordPress. Alcuni di questi strumenti sono stati progettati specificamente per testare il codice PHP; altri sono pensati per testare il codice WordPress; e alcuni altri strumenti sono stati creati per gestire alcune funzionalità generiche utili per i test.
1. Dev Kinsta
DevKinsta è una suite di sviluppo locale per siti WordPress. Solo fornendo alcuni dettagli di base, un'istanza locale di un sito WordPress viene installata immediatamente e viene fornita in bundle con diversi strumenti di sviluppo utili come una casella di posta elettronica, un gestore di database e la registrazione per una più semplice risoluzione dei problemi.
DevKinsta è normalmente utilizzato da sviluppatori e designer durante la creazione di temi e plugin di WordPress. Ma può anche essere utilizzato come server Web locale per l'esecuzione di test di integrazione e funzionalità. Ciò viene realizzato in tandem con uno strumento HTTP che ti aiuta a verificare che il contenuto della risposta e le intestazioni siano corretti.
Le caratteristiche principali di DevKinsta sono:
- Facile creare un nuovo ambiente WordPress ed eliminarlo una volta che non è più necessario
- Consente di testare qualsiasi versione supportata di PHP e WordPress e qualsiasi combinazione di esse
- Si integra perfettamente con MyKinsta dove gli utenti possono creare un backup esterno dei propri siti e dati
2. Unità PHP
PHPUnit è un framework di test orientato ai programmatori per PHP. È il framework più popolare per l'esecuzione di unit test nel codice PHP, con l'obiettivo di convalidare singole unità di codice sorgente.
I test PHPUnit consentono agli sviluppatori di trovare i problemi il prima possibile all'interno del ciclo di sviluppo, aiutando a garantire che non siano state introdotte regressioni del codice (cioè le modifiche a qualche pezzo di codice non hanno causato problemi da qualche altra parte).
Le caratteristiche principali di PHPUnit sono:
- Test di nuove funzionalità
- Convalida del codice appena rifattorizzato
- Può essere completamente automatizzato ed eseguito all'interno del processo di integrazione continua di scelta
- Debug
- Documentazione automatica sull'uso previsto tramite richiamo di funzionalità e vincoli
- Consente l'approccio Test-Driven Development (TDD) in cui gli sviluppatori creano prima i test, quindi le funzionalità
3. Scimmia cerebrale
Brain Monkey è un'utilità di test per PHP e WordPress. Fornisce strumenti indipendenti dal framework che consentono di ridefinire i metodi PHP e testare il comportamento di qualsiasi applicazione PHP. Fornisce inoltre strumenti specifici per testare il codice WordPress.
Le caratteristiche principali di Brain Monkey sono:
- Consente agli unit test di interagire con librerie esterne scaricate
- Consente l'invocazione delle funzioni di WordPress senza la necessità di caricare l'ambiente WordPress
- Può affermare che le funzioni di WordPress (come
add_filter
odo_action
) richiamano la funzionalità come previsto
4. Falsificatore del cervello
Brain Faker utilizza Faker (una popolare libreria PHP per la generazione di dati falsi) e Brain Monkey per fornire una facile generazione di falsi oggetti WordPress e relative funzioni da testare, tra cui:
- istanze
WP_Post
e simulazioni di funzioni correlate comeget_post
eget_post_field
-
WP_User
e funzioni correlate fittizie comeget_userdata
,get_user_by
,user_can
e altro - istanze
WP_Term
e funzioni correlate fittizie comeget_term
eget_term_by
- Istanze
WP_Comment
- Istanze di
WP_Site
e simulazioni di funzioni correlate comeget_site
-
WP_Post_Type
e funzioni correlate fittizie comeget_post_type_object
epost_type_exists
- Istanze di
WP_Taxonomy
e finte funzioni correlate comeget_taxonomy
etaxonomy_exists
- Istanze
WP_Error
Le caratteristiche principali di Brain Faker sono:
- Inserisce dati WordPress falsi ma realistici nello unit test: l'accesso alla data modificata di un post falso si comporterà come una data (ad es
2022-04-17T13:06:58+00:00
), il nome di un utente sarà appropriato (ad es."John Smith"
), un'istanza di post falsa è creata da un'istanza utente falsa e così via - I dati falsi possono essere forniti in anticipo o generati casualmente
- Estensibile: gli sviluppatori possono deridere classi e funzioni dai propri plugin di WordPress
5. Presa in giro
Mockery è un framework di oggetti fittizi PHP semplice ma flessibile pensato per essere utilizzato insieme a PHPUnit, PHPSpec o qualsiasi altro framework di unit test. Offre un doppio framework di test in grado di definire tutte le possibili operazioni e interazioni con gli oggetti utilizzando un Domain Specific Language (DSL) leggibile dall'uomo.
Le caratteristiche principali di Mockery sono:
- Consente la generazione flessibile di oggetti fittizi e stub (che forniscono risposte predefinite predefinite a chiamate specifiche effettuate durante i test)
- Migliora le capacità di isolamento dei test di PHPUnit
- API flessibile per esprimere aspettative derise, imitando il più possibile una descrizione in linguaggio naturale (ad esempio
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Unit test che utilizzano oggetti fittizi in memoria per evitare la necessità di accedere a sistemi più lenti (come database, file system o servizi esterni)
- Può deridere comportamenti deterministici e non deterministici
6. Strumento di esportazione nativo di WordPress
Lo strumento di esportazione nativo di WordPress scarica i dati WordPress del sito sul tuo dispositivo come file XML, inclusi post, pagine, tipi di post personalizzati, commenti, campi personalizzati, categorie, tag, tassonomie personalizzate, utenti e media. Il file XML presenta un formato personalizzato (chiamato file WordPress eXtended RSS o WXR) che può essere importato in qualsiasi sito WordPress.
Questo strumento non è specificamente progettato per il test. Tuttavia, la sua utilità deriva dalla possibilità di creare snapshot del database di WordPress contenenti un set di dati adatto, che possono quindi essere utilizzati per i test. Ciò significa che il sito WordPress in produzione, che contiene dati reali, può essere esportato e importato in un'istanza di sviluppo o staging per testare nuove funzionalità.
Le funzionalità principali dello strumento di esportazione di WordPress sono:
- Creazione di dati di test utilizzando un vero sito WordPress
- File di esportazione condivisibile dell'intero database
- Utile sia per integrazione che per unit test
7. Guzzle
Guzzle è un client HTTP PHP che semplifica l'invio di richieste HTTP e l'integrazione con i servizi Web.
Guzzle è uno strumento generico, quindi il test è solo uno dei suoi possibili casi d'uso. Insieme a un server Web locale come DevKinsta, Guzzle consente di eseguire test di integrazione: puoi utilizzare Guzzle per inviare una richiesta HTTP al server Web di sviluppo, quindi passare la risposta a uno unit test in PHPUnit che verifica il contenuto e le intestazioni sono impostati come previsto.
Le caratteristiche principali di Guzzle sono:
- Soddisfa la raccomandazione dello standard PHP "PSR-7" (per interfacce di messaggi HTTP), precludendo il blocco del fornitore
- Semplice e veloce
- I test vengono eseguiti su un sito WordPress reale, aumentando l'affidabilità
- Può essere eseguito dall'interno di PHPUnit per facilità e velocità
- I test di integrazione possono essere automatizzati e aggiunti al processo di integrazione continua
8. WP-CLI
WP-CLI è l'interfaccia della riga di comando per WordPress. Con esso, puoi aggiornare plug-in, configurare installazioni multisito e molto altro, senza utilizzare un browser web.
WP-CLI non è specificamente uno strumento di test, ma il test è tra i suoi numerosi casi d'uso. Ad esempio, dopo aver avviato un nuovo server Web di sviluppo, è possibile eseguire uno script bash contenente i comandi WP-CLI per importare i dati di test nel sito WordPress, creare gli utenti con i ruoli e le capacità appropriati, installare i plug-in di terze parti necessari e altri compiti simili.
Poiché lo script con i comandi WP-CLI può essere archiviato nel tuo repository Git, il processo per eseguire i test di integrazione può quindi essere automatizzato e integrato all'interno del tuo processo di integrazione continua:
- Usa lo strumento di esportazione di WordPress per generare dati di test reali e archiviarli nel repository Git.
- Usa DevKinsta per avviare un server web con una nuova istanza di WordPress.
- Usa WP-CLI per importare i dati di test nel sito WordPress (DevKinsta può essere gestito tramite WP-CLI).
- Crea uno unit test in PHPUnit in modo che Guzzle esegua una richiesta HTTP sul server Web per verificare il contenuto e le intestazioni della risposta.
Le caratteristiche principali di WP-CLI sono:
- Consente l'esecuzione remota di comandi sull'istanza di WordPress tramite un'interfaccia a riga di comando
- Estensibile con altri strumenti
- Migliora le capacità dello stack di test
- Consente la completa automazione del processo
9. XDebug
XDebug è un'estensione per PHP che fornisce una gamma di funzionalità per migliorare l'esperienza di sviluppo di PHP, inclusi debugging, miglioramenti alla segnalazione degli errori di PHP, traccia, profilatura e analisi della copertura del codice.
XDebug non ti aiuterà a testare il tuo codice, ma ti aiuterà a scoprire dove si trova il bug. La combinazione di XDebug con PHPUnit è particolarmente efficace: se un test fallisce e non riesci a trovare l'origine del problema, puoi utilizzare XDebug per aggiungere punti di interruzione nel codice dello unit test. Quando si esegue nuovamente lo unit test, lo script PHP verrà messo in pausa in ciascuno di questi punti di interruzione, consentendo di ispezionare lo stato corrente dell'esecuzione (stack di chiamate, proprietà e valori degli oggetti, ecc.) e tentare di scoprire cosa c'è che non va.
Le caratteristiche principali di XDebug sono:
- Presenta integrazioni per i più diffusi editor PHP, inclusi VS Code, PHPStorm e Sublime
- Profila quanto tempo viene speso in ogni chiamata di funzione e quanta memoria consuma
- Molto più potente del semplice utilizzo di
var_dump
per eseguire il debug del codice - Consente la modifica al volo dei valori delle variabili durante la pausa sui punti di interruzione
10. PHP Stan
PHPStan è uno strumento di analisi statica per PHP, progettato per trovare bug nel codice anche prima di scrivere i test.
L'obiettivo di PHPStan è ridurre il numero di test che gli sviluppatori devono scrivere. Questo strumento è il primo eseguito nello stack di test, rilevando preventivamente il maggior numero di bug possibile. Solo i bug che non possono essere dedotti dall'analisi statica (ad esempio quelli con logica errata) devono essere validati tramite unit test.
PHPStan funziona scansionando l'intera codebase e cercando le discrepanze. Ad esempio, il valore di risposta di una funzione che restituisce un float non può essere assegnato a un parametro di funzione di tipo intero. Ogni volta che il codice contiene una tale occorrenza, si tratta di un potenziale bug e PHPStan ti avviserà durante la fase di sviluppo, proprio mentre stai scrivendo il codice dell'applicazione.
Le caratteristiche principali di PHPstan sono:
- Automazione e integrazione all'interno del processo di integrazione continua esistente
- Individua molti bug complicati, come le mancate corrispondenze di tipo
- Scansiona l'intera codebase, trovando bug in porzioni di codice eseguite raramente
- Organizzato in livelli di complessità crescente per consentire un'integrazione graduale
- Dispone di estensioni per i framework PHP e CMS più popolari, inclusi Symfony, Laravel, Doctrine, Nette e WordPress
Riepilogo
Il costo per cui i bug passano inosservati nell'applicazione in produzione può essere dannoso per la tua reputazione e il tuo reddito, quindi devi tentare di eliminarli prima che influiscano sui tuoi utenti.
In applicazioni complesse, è quasi impossibile avere la certezza al 100% che non conterrà bug. Per questo motivo, è necessario impostare un processo per trovare e rimuovere il maggior numero di bug possibile durante il ciclo di sviluppo iniziale.
Con un toolkit di test ben progettato, puoi ridurre notevolmente le possibilità che la tua applicazione si comporti in modi imprevisti. La comunità open source ha creato e reso disponibili numerosi strumenti per testare i diversi aspetti di un'applicazione, cosa che puoi e dovresti! — utilizzare per produrre uno stack di test completo.
In questo articolo, abbiamo esaminato 10 strumenti per aiutarti a raggiungere i tuoi obiettivi per testare il codice PHP in un plug-in di WordPress.
Quale di questi strumenti hai utilizzato per il tuo ultimo progetto? Facci sapere cosa hai costruito con esso nella sezione commenti qui sotto!