Se stai pensando a te stesso: “Hmm… con quale linguaggio di programmazione dovrei iniziare il mio viaggio nei test? – Python è la vostra risposta. Ma non è solo per i principianti! In un recente sondaggio che ho fatto su LinkedIn, possiamo vedere che anche tra i programmatori esperti, quasi il 35% ha votato che Python è il loro linguaggio di programmazione preferito (anche se non troppo lontano dal preferito di sempre, Java, che è arrivato al secondo posto con il 32%).
Nel corso degli anni, Python ha effettivamente guadagnato slancio sia tra i tester che tra gli sviluppatori ed è il linguaggio di programmazione in più rapida crescita là fuori (come possiamo vedere nel grafico Stack Overflow Trends qui sotto), e tutti sappiamo cosa significa… Popolarità = rilevanza!
Per la fine di questo articolo, il mio obiettivo è quello di aiutarvi a vedere quanto sia potente il linguaggio di programmazione Python, e quale framework di test Python sia il più adatto alle esigenze del vostro progetto.
Cosa c’è di così grande in Python per l’automazione dei test?
Python è un linguaggio di programmazione open-source che è stato rilasciato per la prima volta nel 1991 con l’intento di fornire un linguaggio di programmazione intuitivo, semplice, leggibile dall’uomo, elegante e meno ingombrante con cui lavorare. E quando si tratta di test, tali qualità sono un must, specialmente quando abbiamo tester manuali nel team (che non hanno necessariamente competenze di programmazione) che stanno passando all’automazione e possono godere della veloce curva di apprendimento di Python per scrivere script velocemente.
Ci sono parecchie ragioni per cui la popolarità di Python è aumentata nel campo dell’automazione dei test e perché è considerato una delle migliori scelte per l’automazione dei test. Tra queste ragioni troverete: Lo Zen di Python (19 principi guida per la filosofia di progettazione di Python), amichevole per i principianti ma anche potente per gli esperti, è sia orientato agli oggetti che funzionale, ha una ricca libreria di pacchetti per i test, una forte comunità mondiale, e molto altro! Vi consiglio di leggerne di più sul fantastico blog di AutomationPanda.
Il giusto Python Testing Framework per voi
Con l’aumento dell’uso di Python, anche la popolarità dei framework di test basati su Python sta aumentando. All’inizio, può essere un po’ confuso sapere quale scegliere tra tutta la ricchezza di strumenti là fuori, poiché ognuno ha i suoi pro e contro. Detto questo, ogni progetto e organizzazione ha diversi requisiti e limitazioni, quindi abbiamo bisogno di prenderli tutti in considerazione quando si seleziona uno strumento che sarà il migliore per noi. Ti consiglio di leggere questi ottimi articoli su come scegliere lo strumento giusto per te:
- Come selezionare lo strumento giusto per l’automazione dei test
- Come selezionare lo strumento migliore – processo di ricerca
- Criteri per selezionare gli strumenti giusti per i test funzionali
E naturalmente – perché esistono liste di pro e contro, se non per aiutarci a ottenere ulteriori indicazioni sui nostri strumenti preferiti, tutto in un posto! 😉 Quindi, immergiamoci in profondità nei migliori 8 framework di test Python là fuori, ed esploriamo sia i loro benefici che le loro carenze, in modo che tu possa essere molto più vicino a selezionare il framework di test Python ideale per le tue esigenze.
Pro e contro dei primi 8 framework di test Python
- Robot Framework
- Pytest
- TestProject
- PyUnit (Unittest)
- Nose2
- Behave
- Lettuce
- Testify
- Conclusion
Robot Framework (RF)
Robot Framework (RF) è un framework di automazione di test open source per test di accettazione, lo sviluppo guidato dai test di accettazione (ATDD) e l’automazione dei processi robotici (RPA). Il suo nucleo è implementato in Python, ma può anche funzionare su Jython (implementazione Java di Python) e IronPython (Python per .NET framework). Per eseguirlo è necessario installare Python versione 2.7.14 o superiore.
Pros
- Basato sull’approccio Keyword-driven testing (KDT), che ci permette di creare facilmente casi di test usando parole chiave leggibili dall’uomo (non è richiesta alcuna esperienza di codifica).
- Supporta tutti i sistemi operativi (Windows, Linux o MacOS), e tutte le applicazioni (web, mobile e desktop apps).
- Fornisce dati di reporting HTML chiari e facili da usare (inclusi gli screenshot).
- Ricco ecosistema con molte API che lo rendono un framework altamente estensibile e permettono l’integrazione con qualsiasi altro strumento di terze parti.
- Grande supporto della comunità e risorse online.
Cons
- I test paralleli non sono supportati out of the box, ma possono essere ottenuti tramite Selenium Grid o tramite Pabot (un eseguitore parallelo per RF).
- Per bene e per male ti costringe a lavorare secondo una metodologia predefinita, la curva di apprendimento iniziale potrebbe essere un po’ più lunga del solito per i principianti
- Creare parole chiave generiche potrebbe richiedere più tempo che scrivere semplicemente test codificati
- Non è facile personalizzare i rapporti.
- Non ha un vero e proprio costrutto if/else, ma ci sono diversi modi per ottenere lo stesso effetto (come può essere esplorato nella loro documentazione ufficiale)
In fondo: Se state cercando di implementare un approccio di framework basato su parole chiave che permetterà a tester manuali e analisti di business di creare test di automazione, RF è la soluzione per voi, fornendo una varietà di estensioni & librerie e facile da usare. Tuttavia, se siete alla ricerca per lo sviluppo di scenari complessi, come avrete bisogno di fare alcune personalizzazioni che non sono integrate nel framework.
Pytest
Pytest è un framework di test open-source che è probabilmente uno dei framework di test Python più utilizzati là fuori. Pytest supporta i test unitari, i test funzionali e anche i test API. Per eseguirlo è necessaria la versione 3.5 o superiore di Python.
Pros
- Consente suite di test compatte e semplici.
- È altamente estensibile utilizzando plugin, come: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
- Puoi anche aggiungere il plugin pytest html al tuo progetto per stampare rapporti HTML con una semplice opzione da riga di comando.
- Puoi eseguire test in parallelo usando il plugin pytest-xdist di Pytest. Puoi leggerne di più anche qui.
- Ha una comunità molto grande.
- Supporta le fixture che ti aiutano a coprire tutte le combinazioni di parametri senza riscrivere i casi di test, e sono un ottimo modo per gestire il contesto tra i passi.
Cons
- La compatibilità non è fondamentale per Pytest, poiché anche se potete facilmente scrivere casi di test con Pytest, non sarete in grado di usarli in qualsiasi altro framework di test a causa dell’uso delle routine uniche di Pytest.
TestProject
TestProject è un framework di automazione completo e gratuito al 100% con rapporti cloud. Usando TestProject, si può facilmente sviluppare l’automazione dei test per scopi mobili, web o generici con l’SDK open source di Python. Supporta Python versione 3.6 o superiore, e supporta entrambi i framework Pytest e Unittest. TestProject include tutte le dipendenze necessarie come parte del singolo agente eseguibile multipiattaforma (puoi guardare la registrazione di questo webinar per iniziare).
Pros
- Singolo agente eseguibile che include tutte le librerie di terze parti necessarie per eseguire e sviluppare test di automazione per test mobili, web e generici.
- Rapporti automatici basati su cloud in formato HTML/PDF (inclusi screenshot).
- Storia dell’esecuzione accessibile tramite API RESTful.
- Sempre aggiornato con le ultime e stabili versioni dei driver Selenium/Appium.
- Singolo SDK per test Web, Android, iOS e generici.
- Completo di test runner e funzionalità di reporting.
- Supporto trasversale per Mac, Windows, Linux e Docker.
- Grande comunità e supporto: forum, blog e chat live integrata.
Cons
- L’agente può eseguire i test un test alla volta, quindi per test paralleli è necessario utilizzare Docker Agents.
- I rapporti sono disponibili solo sulla nuvola di TestProject, per memorizzarli localmente è necessario scaricare un rapporto PDF o utilizzare l’API RESTful.
- L’agente ha bisogno di una connessione internet per eseguire i test.
In fondo: Se state cercando un singolo framework che copra tutti i vostri sforzi di automazione dall’inizio alla fine, allora TestProject è sicuramente quello che fa per voi ed è perfetto per team con competenze miste, dai principianti agli esperti di automazione.
PyUnit (Unittest)
PyUnit (Unittest) è un framework di test unitari per Python che è stato ispirato da JUnit. È il framework di test Python predefinito che esce dalla scatola con il pacchetto Python, e quindi quello con cui la maggior parte degli sviluppatori inizia i propri test.
Pros
- Facendo parte della libreria Python standard non ci sono moduli aggiuntivi da installare – esce dalla scatola con il pacchetto Python.
- Offre un’esecuzione semplice e flessibile dei test case.
- Generazione rapida di rapporti di test, sia rapporti XML che unittest-sml-reporting.
Cons
- L’intento del codice di test a volte diventa poco chiaro, poiché supporta l’astrazione.
- È richiesta un’enorme quantità di codice boilerplate.
- Siccome è basato su Junit, il metodo di denominazione camelCase è in uso, invece della convenzione di denominazione snake_case di Python.
Nose2
Nose2 è un successore di Nose ed è fondamentalmente PyUnit (Unittest), ma con plugin. Nose2 estende PyUnit oltre le sue funzionalità con vari plugin che aggiungono il supporto per l’esecuzione dei test, la scoperta dei test, i decoratori, le fixture, la parametrizzazione, ecc.
Pros
- Facile da iniziare perché estende il framework PyUnit (Unittest) che viene fornito con la libreria Python.
- Include un gran numero di plugin integrati che possono rendere i tuoi test più veloci e facili.
- Abilita i test in parallelo usando il plugin mp.
- Raccoglie automaticamente i test, purché si seguano alcune semplici linee guida per organizzare la libreria e il codice dei test.
Cons
- Mancanza di un’ampia documentazione che può trattenervi se avete appena iniziato.
- Non è attivamente mantenuto rispetto ad altri framework.
In fondo: Se state già usando PyUnit, potreste anche provare Nose2 ed esplorare come estende PyUnit.
Behave
Behave è uno dei più popolari framework di test BDD (behavior-driven development) di Python. Anche se non fa ufficialmente parte del progetto Cucumber, funziona in modo molto simile ai framework Cucumber.
Pro
- Permette di scrivere casi di test in un linguaggio leggibile, portando ad una facile collaborazione tra team con caratteristiche simili.
- Una grande quantità di documentazione e supporto sono disponibili per aiutare ad iniziare.
- Supporta pienamente il linguaggio Gherkin – quindi la creazione di file di funzionalità non richiede alcuna conoscenza tecnica.
- Ha integrazioni con Django e Flask.
Cons
- Non c’è supporto per l’esecuzione parallela.
- Solo per i test black box.
In fondo: Se il vostro team segue un approccio BDD, avete conoscenze BDD precedenti (come Cucumber, SpecFlow, ecc.) e siete alla ricerca di test in scatola nera – dovreste assolutamente controllare Behave. Dovresti anche esplorare altri framework Python BDD come: Pytest-bdd, Lettuce (da descrivere più avanti), Radish e altri in questo articolo di confronto dei framework di test BDD di Python. Se hai bisogno di qualcosa di più del test della scatola nera, allora dovresti guardare altrove.
Lettuce
Lettuce è un altro framework Python BDD ed è basato su Cucumber. Richiede Python 2.7.14 o superiore.
Pros
- Supporta il linguaggio Gherkin, quindi permette anche ai membri non tecnici del team di creare facilmente test usando il linguaggio naturale.
- Simile a Behave, è usato principalmente per test black-box ma può essere usato per più tipi di test. Per esempio, Lettuce può testare vari comportamenti e interazioni di server e database.
Cons
- Mancano alcune delle caratteristiche di altri framework, quindi è più adatto a piccoli progetti.
- Il suo supporto e la sua documentazione non sembrano essere mantenuti.
- Richiede una comunicazione dedicata tra tutti gli attori del progetto: dev, QA e manager per assicurarsi che l’implementazione abbia successo.
Linea di fondo: Se avete un piccolo progetto BDD, Lattuga è una grande opzione per la creazione di test facili e in linguaggio naturale tra tutti i membri del team.
Testify
Testify è progettato per sostituire i comuni framework Unittest e Nose e ha caratteristiche avanzate rispetto allo standard Unittest.
Pros
- Usato per test di unità, test di integrazione e test di sistema.
- Per coloro che hanno familiarità con Unittest, Testify è molto facile da iniziare.
- Ha estesi plugin.
- Simile a Nose2, Testify permette il test discovery.
- Sintassi semplice per il metodo fixture.
Cons
- Mancanza di ampia documentazione, quindi i principianti potrebbero aver bisogno di investire nella ricerca di risorse rilevanti.
- I test paralleli non sono facili da realizzare.
In fondo: Se avete esperienza precedente con Unittest, sarà abbastanza facile per voi adattare i vostri test esistenti per lavorare con Testify, quindi vale sicuramente la pena controllare.
Conclusione
Siamo giunti alla fine di questa lista di confronto di framework di test python, e ora è il momento di scegliere quello che si adatta meglio alle vostre esigenze.
State cercando più di un approccio BDD? State cercando di ottenere un test unitario o più di un test funzionale? Il tuo team ha esperienza tecnica o di codifica, o è composto per lo più da principianti? Queste domande e molte altre sono quelle che dovete prendere in considerazione mentre cercate di prendere una decisione. Ognuno dei framework di cui sopra ha i suoi vantaggi così come gli svantaggi, e non esiste una cosa come buono o cattivo, ma piuttosto adatto. Adatto alle vostre esigenze e ai requisiti del vostro prodotto.
Spero che questo articolo sia stato in grado di aiutarvi non solo a capire quanto Python sia fantastico per i test di automazione, ma anche di aiutarvi nel vostro viaggio verso un facile test Python!