Jos olet miettinyt itseksesi: ”Hmm… millä ohjelmointikielellä aloittaisin testaukseni?”. – Python on vastauksesi. Mutta se ei ole vain aloittelijoille! LinkedInissä hiljattain tekemässäni kyselyssä näemme, että jopa kokeneidenkin ohjelmoijien keskuudessa lähes 35 % äänesti Pythonin olevan heidän suosituin ohjelmointikielensä (tosin ei kovinkaan kaukana kaikkien aikojen suosikkikielestä Javasta, joka sijoittui kakkoseksi 32 %:lla).
Vuosien varrella Python on tosiaankin kasvattanut suosiotaan sekä testaajien että ohjelmistokehittäjien keskuudessa, ja se on nopeinta vauhtia kasvava ohjelmointikieli (kuten alla olevasta Stack Overflow Trends -kaaviosta nähdäänkin), ja tiedämme kyllä, mitä se tarkoittaa… Suosiota = ajankohtaisuutta!
Tämän artikkelin loppuun mennessä tavoitteeni on auttaa sinua näkemään, kuinka tehokas Python-ohjelmointikieli on ja mikä Python-testauskehys sopii parhaiten projektisi tarpeisiin.
Mitä niin hienoa Pythonissa on testausautomaation kannalta?
Python on avoimen lähdekoodin ohjelmointikieli, joka julkaistiin ensimmäisen kerran vuonna 1991 tarkoituksenaan tarjota intuitiivinen, yksinkertainen, ihmisten luettavissa oleva, tyylikäs ja vähemmän sekava ohjelmointikieli työskentelyyn. Ja kun kyse on testauksesta, tällaiset ominaisuudet ovat välttämättömiä, varsinkin kun tiimissä on manuaalisia testaajia (joilla ei välttämättä ole ohjelmointitaitoja), jotka ovat nyt siirtymässä automatisointiin ja voivat nauttia Pythonin nopeasta oppimiskäyrästä skriptien nopeaan kirjoittamiseen.
On aika monta syytä siihen, miksi Pythonin suosio on noussut testiautomaation alalla ja miksi sitä pidetään yhtenä parhaista vaihtoehdoista testiautomaation alalla. Näistä syistä löydät mm: Se on ystävällinen aloittelijoille, mutta myös tehokas asiantuntijoille, se on sekä olio- että funktiosuuntautunut, sillä on rikas pakettikirjasto testausta varten, maailmanlaajuinen vahva yhteisö ja paljon muuta! Suosittelen lukemaan siitä lisää mahtavasta AutomationPanda-blogista.
Oikea Python-testauskehys sinulle
Pythonin käytön lisääntyessä myös Pythoniin perustuvien testauskehysten suosio kasvaa. Aluksi voi olla hieman hämmentävää tietää, mikä niistä pitäisi valita kaikista runsaista työkaluista, sillä jokaisella on hyvät ja huonot puolensa. Tästä huolimatta jokaisella projektilla ja organisaatiolla on erilaiset vaatimukset ja rajoitukset, joten meidän on otettava ne kaikki huomioon valitessamme työkalua, joka sopii meille parhaiten. Suosittelen lukemaan nämä loistavat artikkelit siitä, miten voit valita itsellesi sopivan työkalun:
- Miten valita oikea testausautomaatiotyökalu
- Miten valita paras työkalu – tutkimusprosessi
- Kriteerit oikeiden toiminnallisen testaustyökalujen valintaan
Ja tietysti – miksi hyvät ja huonot puolet -luettelot ovat olemassa, jos ei siksi, että ne auttaisivat meitä saamaan lisäohjeita suosikkityökaluistamme, ja vieläpä kaikki yhdessä paikassa! 😉 Sukelletaan siis syvälle 8 parhaaseen Python-testauskehykseen ja tutkitaan sekä niiden hyötyjä että puutteita, jotta pääset paljon lähemmäksi ihanteellisen Python-testauskehyksen valitsemista tarpeisiisi.
Pros and Cons of Top 8 Python Testing Frameworks
- Robot Framework
- Pytest
- TestProject
- PyUnit (Unittest)
- Nose2
- Behave
- Lettuce
- Testify
- Conclusion
Robot Framework (RF)
Robot Framework (RF) on avoimen lähdekoodin testiautomaatiokehys hyväksymistestaukseen, testaukseen perustuvaan kehitykseen (ATDD) ja robottiprosessien automatisointiin (RPA). Sen ydin on toteutettu Pythonilla, mutta se voi toimia myös Jythonilla (Pythonin Java-toteutus) ja IronPythonilla (Python for .NET -kehys). Sen käyttäminen edellyttää Python-version 2.7.14 tai uudemman version asentamista.
Pros
- Perustuu avainsanalähtöiseen testaukseen (Keyword-driven testing, KDT) perustuvaan lähestymistapaan, minkä ansiosta testitapauksia on helppo luoda ihmiselle ymmärrettävien avainsanojen avulla (koodauskokemusta ei tarvita).
- Tukee kaikkia käyttöjärjestelmiä (Windows-, Linux- tai MacOS-käyttöjärjestelmää tai Mac-OS-käyttöjärjestelmää) ja kaikkia sovelluksia (verkko-, mobiililaitteisiin ja työpöytäsovelluksiin perustuvia).
- Tarjoaa selkeät ja käyttäjäystävälliset HTML-raportointitiedot (mukaan lukien kuvakaappaukset).
- Rikas ekosysteemi, jossa on paljon API-rajapintoja, mikä tekee siitä erittäin laajennettavissa olevan kehyksen ja mahdollistaa integroinnin mihin tahansa muuhun kolmannen osapuolen työkaluun.
- Loistava yhteisöllinen tuki ja online-resurssit.
Miinukset
- Rinnakkaista testausta ei tueta valmiiksi, mutta se voidaan toteuttaa Selenium Gridin tai Pabotin (rinnakkainen suoritin RF:lle) avulla.
- Hyvin ja huonosti se pakottaa työskentelemään ennalta määritellyn metodologian mukaan, Alkuvaiheen oppimiskäyrä saattaa olla hieman pidempi kuin tavallinen aloittelijoille
- Yleisten avainsanojen luominen saattaa viedä pidempään kuin pelkkien koodattujen testien kirjoittaminen
- Raporttien muokkaaminen ei ole helppoa.
- Ei ole varsinaista if/else-konstruktiota, mutta on useita tapoja saada sama vaikutus (kuten voi tutkia heidän virallisesta dokumentaatiostaan)
Pohjimmiltaan: Jos haluat toteuttaa avainsanapohjaisen kehyslähestymistavan, jonka avulla manuaaliset testaajat ja liiketoiminta-analyytikot voivat luoda automaatiotestejä, RF on sinulle sopiva ratkaisu, joka tarjoaa erilaisia laajennuksia & kirjastoja ja on helppokäyttöinen. Jos kuitenkin haluat kehittää monimutkaisia skenaarioita, koska sinun on tehtävä joitakin mukautuksia, joita ei ole sisäänrakennettu kehykseen.
Pytest
Pytest on avoimen lähdekoodin testauskehys, joka on mahdollisesti yksi käytetyimmistä Python-testauskehyksistä. Pytest tukee niin yksikkötestausta, toiminnallista testausta kuin API-testaustakin. Sen käyttämiseen tarvitset Python-version 3.5 tai uudemman.
Pros
- Mahdollistaa kompaktit ja yksinkertaiset testisarjat.
- On erittäin laajennettavissa käyttämällä liitännäisiä, kuten: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
- Voit myös lisätä projektiin pytest html -pluginin tulostaaksesi HTML-raportteja yhdellä yksinkertaisella komentorivivaihtoehdolla.
- Voi suorittaa testejä rinnakkain käyttämällä Pytest-pluginia pytest-xdist. Voit lukea siitä lisää myös täältä.
- Hänellä on erittäin suuri yhteisö.
- Tukee fixtuureja, jotka auttavat sinua kattamaan kaikki parametriyhdistelmät ilman testitapausten uudelleenkirjoittamista, ja ovat hyvä tapa hallita kontekstia vaiheiden välillä.
Miinukset
- Yhteensopivuus ei ole Pytestin kannalta avainasemassa, sillä vaikka voit helposti kirjoittaa testitapauksia Pytestillä, et pysty käyttämään niitä missään muussa testauskehyksessä Pytestin ainutlaatuisten rutiinien käytön vuoksi.
TestProject
TestProject on 100 %:sti ILMAINEN täydellinen automatisointikehys pilvipohjaisine raportteineen. TestProjectin avulla voit helposti kehittää testiautomaatiota mobiili-, web- tai yleisiin tarkoituksiin Pythonin avoimen lähdekoodin SDK:n avulla. Se tukee Python-versiota 3.6 tai uudempaa ja tukee sekä Pytest- että Unittest-kehyksiä. TestProject sisältää kaikki tarvittavat riippuvuudet osana yksittäistä cross-platform-agentin suoritettavaa tiedostoa (Voit katsoa tämän webinaaritallenteen päästäksesi alkuun).
Pros
- Yksittäinen agentin suoritettava tiedosto, joka sisältää kaikki kolmannen osapuolen kirjastot, joita tarvitaan testiautomaation suorittamiseen ja kehittämiseen mobiili-, verkko- ja yleistestejä varten.
- VAPAA Automaattiset pilvipohjaiset raportit HTML/PDF-muodossa (mukaan lukien kuvakaappaukset).
- Suoritushistoriaan pääsee käsiksi RESTful API:n kautta.
- Aina ajan tasalla viimeisimpien ja vakaiden Selenium/Appium-ajuriversioiden kanssa.
- Yksittäinen SDK web-, Android-, iOS- ja geneerisille testeille.
- Sisäänrakennettu testijuoksija ja raportointiominaisuudet.
- Alustarajat ylittävä tuki Macille, Windowsille, Linuxille ja Dockerille.
- Laaja yhteisö ja tuki: foorumi, blogi ja sisäänrakennettu live-chat.
Miinukset
- Agentti pystyy suorittamaan testejä yhden testin kerrallaan, joten rinnakkaista testausta varten pitäisi käyttää Docker-agentteja.
- Raportit ovat saatavilla vain TestProjectin pilvipalvelussa, tallentaaksesi ne paikallisesti sinun on ladattava PDF-raportti tai käytettävä RESTful API:ta.
- Agentti tarvitsee internetyhteyden testien suorittamiseen/suorittamiseen.
Pohjimmainen: Jos etsit yhtä kehystä, joka kattaa koko automatisointipyrkimyksesi päästä päähän, TestProject on ehdottomasti sinulle sopiva, ja se sopii täydellisesti tiimeille, joissa on vaihtelevia taitoja aloittelijoista kokeneisiin automaatioasiantuntijoihin.
PyUnit (Unittest)
PyUnit (Unittest) on yksikkötestauskehys Pythonille, joka on saanut inspiraationsa JUnitista. Se on oletusarvoinen Python-testauskehys, joka tulee ulos laatikosta Python-paketin mukana, ja siten se on se, jolla useimmat kehittäjät aloittavat testauksensa.
Pros
- Sen vuoksi, että se on osa Pythonin vakiokirjastoa, ei tarvita lisämoduuleja asennettavaksi – se tulee ulos laatikosta Python-paketin mukana.
- Tarjoaa yksinkertaisen ja joustavan testitapausten suorittamisen.
- Nopea testiraporttien tuottaminen, sekä XML-raportit että unittest-sml-raportointi.
Miinukset
- Testauskoodin tarkoitus jää joskus epäselväksi, koska se tukee abstrahointia.
- Tarvitaan valtava määrä boilerplate-koodia.
- Koska perustuu Junitiin, camelCase-nimitysmenetelmä on käytössä Pythonin snake_case-nimityskonvention sijaan.
Nose2
Nose2 on Nose:n seuraaja, ja se on pohjimmiltaan PyUnitia (Unittestiä), mutta lisäosia. Nose2 laajentaa PyUnitia sen toiminnallisuutta pidemmälle erilaisilla lisäosilla, jotka lisäävät tuen testien suorittamiselle, testien löytämiselle, koristeille, fixtuureille, parametrisoinnille jne.
Pros
- Helppo päästä alkuun, koska se laajentaa PyUnit (Unittest) -puitteistoa, joka tulee laatikossa Python-kirjaston mukana.
- Sisältää suuren määrän sisäänrakennettuja lisäosia, jotka tekevät testauksestasi entistä nopeampaa ja helpompaa.
- Mahdollistaa rinnakkaisen testauksen mp-liitännäisen avulla.
- Kerää testit automaattisesti, kunhan noudatat joitakin yksinkertaisia ohjeita kirjastosi ja testikoodisi järjestämiseen.
Miinukset
- Laaja dokumentaatio puuttuu, mikä voi jarruttaa sinua, jos olet vasta aloittamassa.
- Ei niin aktiivisesti ylläpidetä toisin kuin muita kehyksiä.
Pohjimmainen: Jos käytät jo PyUnitia, voit yhtä hyvin kokeilla Nose2:ta ja tutkia, miten se laajentaa PyUnitia.
Behave
Behave on yksi suosituimmista Python BDD (behavior-driven development) -testauskehyksistä. Vaikka se ei olekaan virallisesti osa Cucumber-projektia, se toimii hyvin samankaltaisesti kuin Cucumber-kehykset.
Pros
- Mahdollistaa testitapausten kirjoittamisen helppolukuisella kielellä, mikä johtaa helppoon yhteistyöhön tiimeissä, joilla on samankaltaisia piirteitä.
- Laaja dokumentaatio ja tuki auttavat alkuun pääsemisessä.
- Tukee täysin Gherkin-kieltä – näin ominaisuustiedostojen luominen ei vaadi teknistä osaamista.
- On Django- ja Flask-integraatiot.
Miinukset
- Ei ole tukea rinnakkaissuoritukselle.
- Vain mustan laatikon testaukseen.
Pohjimmiltaan: Jos tiimisi noudattaa BDD-lähestymistapaa, sinulla on aiempaa BDD-osaamista (kuten Cucumber, SpecFlow jne.) ja etsit mustalaatikkotestausta – sinun kannattaa ehdottomasti tutustua Behaveen. Tutustu myös muihin Python BDD-kehyksiin, kuten esim: Pytest-bdd, Lettuce (kuvataan jäljempänä), Radish ja muita tässä Python BDD -testauskehysten vertailuartikkelissa. Jos tarvitset muutakin kuin mustalaatikkotestausta, kannattaa katsoa muualle.
Lettuce
Lettuce on toinen Python BDD-kehys ja se perustuu Cucumberiin. Vaatii Python 2.7.14:n tai uudemman.
Pros
- Tukee Gherkin-kieltä, joten myös ei-tekniset tiimin jäsenet voivat helposti luoda testejä luonnollisella kielellä.
- Samankaltainen kuin Behave, sitä käytetään enimmäkseen mustan laatikon testaukseen, mutta sitä voidaan käyttää useampaankin testaustyyppiin. Esimerkiksi Lettuce voi testata erilaisia palvelin- ja tietokantakäyttäytymisiä ja -vuorovaikutuksia.
Miinukset
- Ei omaa muiden kehysten ominaisuuksien rikkautta, joten sopii paremmin pieniin projekteihin.
- Sen tukea ja dokumentaatiota ei tunnu ylläpidettävän.
- Tarvitsee omistautunutta viestintää projektin kaikkien sidosryhmien välillä: dev, QA ja johtajat, jotta toteutus onnistuu.
Pohjimmiltaan:
Testify
Testify on suunniteltu korvaamaan yleiset Unittest- ja Nose-kehykset, ja siinä on kehittyneempiä ominaisuuksia kuin tavallisessa Unittestissä.
Pros
- Käytetään yksikkötestaukseen, integrointitestaukseen ja järjestelmätestaukseen.
- Sille, jotka tuntevat Unittestin, Testify on erittäin helppo aloittaa.
- Se sisältää laajoja liitännäisiä.
- Samankaltainen kuin Nose2, Testify mahdollistaa testien löytämisen.
- Yksinkertainen syntaksi fixture-metodille.
Miinukset
- Laaja dokumentaatio puuttuu, joten aloittelijoiden on ehkä panostettava asiaankuuluvien resurssien etsimiseen.
- Rinnakkaista testausta ei ole helppo toteuttaa.
Pohja: Jos sinulla on aiempaa kokemusta Unittestistä, sinun on melko helppoa mukauttaa olemassa olevat testisi toimimaan Testifyn kanssa, joten se on ehdottomasti tutustumisen arvoinen.
Loppupäätelmä
Olemme tulleet tämän python-testauskehysvertailulistan loppuun, ja nyt on aika valita vaatimuksiisi parhaiten sopiva kehys.
Etsitkö enemmän BDD-lähestymistapaa? Tavoitteletko yksikkötestausta vai enemmänkin toiminnallista testausta? Onko tiimilläsi teknistä tai koodauskokemusta vai koostuuko se enimmäkseen aloittelijoista? Nämä ja monet muut kysymykset on otettava huomioon, kun yrität tehdä päätöstä. Kullakin edellä mainituista kehyksistä on sekä hyvät että huonot puolensa, eikä ole olemassa hyvää tai huonoa, vaan pikemminkin sopivaa. Sopiva omiin tarpeisiisi ja tuotevaatimuksiisi.
Toivottavasti tämä artikkeli pystyi auttamaan sinua paitsi ymmärtämään, kuinka loistava Python on automaatiotestaukseen, myös auttamaan sinua matkallasi helppoon Python-testaukseen!