9 Beste geautomatiseerde testraamwerken voor PHP
Heb je ooit veel tijd besteed aan het debuggen van je PHP-code? Nou, voor de meeste programmeurs is dit waarschijnlijk niet de meest fascinerende uitdaging, maar er is een oplossing die ons kan helpen deze vervelende taak te verkorten. Geautomatiseerde testen kan de workflow van PHP-ontwikkeling aanzienlijk verbeteren met vooraf geschreven tests toestaan om het ontwikkelingsproces te stimuleren.
In deze post zullen we proberen te begrijpen waarom geautomatiseerd testen zo cool is, hoe het werkt, en wat zijn de beste testkaders je kunt beginnen met.
Waarom testen belangrijk is
Beginnende PHP-ontwikkelaars hebben de neiging om geen tests voor hun code te schrijven. De meesten van ons begonnen aan onze carrière door nieuwe functies en functies te testen die we zojuist in het browservenster hadden geschreven, en toen er iets fout ging, hadden we geen flauw idee wat we moesten doen.
Het schrijven van tests voor onze code kan kostbare foutopsporingstijd en uren van hoofdpijn besparen. Wanneer niet-geteste code in productie gaat, zullen de beoordelingen die we krijgen waarschijnlijk niet zo leuk zijn. Dus, wat kunnen we doen?
Waarschijnlijk het beste idee is om een productieve testworkflow opzetten waarin we onze eigen testcode moeten schrijven die controleert of onze applicatiecode correct werkt.
De truc is dat de testcode moet vóór de toepassingscode worden geschreven. Op deze manier kunnen we er vanaf het begin voor zorgen dat de code die we schrijven correct werkt. De testcode gaat naar afzonderlijke bestanden. Als we later fouten tegenkomen in onze PHP-app, hoeven we niets anders te doen. Voer gewoon onze tests uit die hopelijk zullen geef ons goede hints over de problemen.
Naast het besparen van tijd en het goed voorbereiden van onze app voor productie, heeft testen ook nog vele andere voordelen, zoals:
- meer onderhoudbare code
- gefaciliteerde refactoring
- minder beveiligingsproblemen
- minder opgeblazen codebasis (aanpassing van de applicatiecode aan de vooraf geschreven testcode zal ons overbodige delen laten weglaten)
- betere prestatie
Wat is geautomatiseerd testen?
Natuurlijk kunnen we onze tests handmatig schrijven, maar na een tijdje kan het vervelend en tijdrovend zijn met veel repetitieve taken. Handmatig testen kan worden vervangen door geautomatiseerd testen waarbij we specifieke software gebruiken die het vermoeiende werk voor ons doet, en we kunnen meer tijd besteden aan het creëren van de logica van de testcode.
PHP is gelukkig een vrij populaire programmeertaal, dus er zijn veel geautomatiseerde testraamwerken waaruit we kunnen kiezen.
Test-driven ontwikkeling (TDD) versus Gedraggedreven ontwikkeling (BDD)
De twee belangrijkste benaderingen die geautomatiseerde testkaders gebruiken, zijn Test-Driven Development (TDD) en Behavior-Driven Development (BDD). In beide wordt het ontwikkelproces aangedreven door testen, wat betekent dat tests vóór de toepassingscode worden geschreven.
Het belangrijkste verschil tussen testgedreven en gedragsgestuurde testen zit in de syntaxis van de testcode: TDD gebruikt de juiste PHP-code in de testbestanden, terwijl BDD gebruikt voor mensen leesbare zinnen die het gedrag van elk kenmerk beschrijven en ook door niet-technische belanghebbenden kunnen worden begrepen.
Een TDD-test ziet er zo uit in de codebewerker, het is gewoon een gewone objectgeoriënteerde PHP-code:
Een BDD-test is vergelijkbaar, niet-programmeurs kunnen het ook begrijpen:
10 PHP geautomatiseerde testkaders
Met dat in gedachten, laten we een kijkje nemen bij 10 krachtige geautomatiseerde testraamwerken voor PHP die u kunt gebruiken.
1. PHPUnit
PHPUnit is het bekendste testraamwerk voor het schrijven van eenheidstests voor PHP-apps. Eenheidstests nemen kleine delen van de code met de naam eenheden en testen ze een voor een. Met de hulp van PHPUnit kunnen we testgestuurde ontwikkeling uitvoeren.
Het kan worden gebruikt via de opdrachtregel, en het biedt ons een handige TestCase-klasse die we kunnen uitbreiden volgens onze behoeften. Met PHPUnit kunnen ontwikkelaars ook gebruiken vooraf geschreven beweringsmethoden om te beweren dat de app zich op een bepaalde manier gedraagt.
2. Codeceptie
Codeception stelt ons niet alleen in staat om eenheidstests te schrijven, maar ook functionele en acceptatietests. Deze twee laatsten testen de PHP-app als geheel met alle functies met elkaar verbonden, niet als eenheden. Met Codeception kunnen we verschillende modules inschakelen en configureren volgens onze ontwikkelingsbehoeften.
Het is geïntegreerd met vele PHP-ontwikkelingskaders zoals Symfony2, Laravel4, Yii, Phalcon en het Zend Framework. Dit betekent dat we samen een PHP-framework voor automatiseringstest en een PHP-ontwikkelingsraamwerk kunnen gebruiken om een superefficiënte ontwikkelingsworkflow op te zetten.
3. Behat
Behat is een populair gedragsgestuurd PHP-testraamwerk. De tests die we met Behat kunnen schrijven zien er eerder uit zoals verhalen dan code. Behat gebruikt het StoryBDD-subtype van gedragsgestuurde ontwikkeling (het andere subtype is SpecBDD).
Het framework is geïnspireerd door het Cucumber-project dat een testraamwerk is voor de programmeertaal Ruby.
4. PHPSpec
PHPSpec volgt ook de gedragsgestuurde testaanpak, maar het andere subtype genaamd SpecBDD. Met PHPSpec moeten we dat doen schrijf eerst de specificaties die beschrijven hoe de applicatiecode zich zal gedragen. Het was ook geïnspireerd op een Ruby-testraamwerk genaamd RSpec.
5. Storyplayer
Storyplayer is een full-stack testraamwerk dat het mogelijk maakt om schrijf end-to-end tests voor een volledig platform. Storyplayer heeft ondersteuning voor het creëren en vernietigen van testomgevingen op afroep. Het volgt de TDD-testaanpak en stelt ons in staat functionele tests te schrijven die een toepassing als geheel kunnen controleren.
6. Peridot
Peridot is een lichtgewicht, uitbreidbaar testraamwerk voor PHP. Het beschikt over een evenementgestuurde architectuur waarmee testers gemakkelijk kunnen werken pas het framework aan via plug-ins en reporters.
Peridot gebruikt de beschrijf het syntaxis om een duidelijke en leesbare testtaal vast te stellen die duidelijk beschrijft hoe onze toepassingscode zich zou moeten gedragen.
7. Atoum
Atoum is een intuïtief en modern PHP-testraamwerk waarmee we eenheidstests kunnen uitvoeren. Het vereenvoudigt de testontwikkeling, en omdat het een jong raamwerk is, maakt het gebruik van een aantal nieuwere mogelijkheden die werden geïntroduceerd in PHP 5.3 (het kanniet gebruikt in oudere PHP-versies) om ons een snel en gemakkelijk te begrijpen testproces te bieden.
Atoum zorgt voor een een hoog beveiligingsniveau tijdens de testuitvoering, omdat het elke testmethode isoleert in zijn eigen PHP-proces.
8. Kahlan
Kahlan is een volledig uitgerust BDD-testraamwerk dat het mogelijk maakt om eenheidstests te schrijven met behulp van de beschrijf het syntaxis. Het omvat het KISS-ontwerpprincipe (Keep It Simple, Stupid). Kahlan vereist ten minste PHP 5.5.
Het heeft een kleine codebasis, naar verluidt ongeveer 10 keer kleiner dan PHPUnit, en het heeft heel veel functies die ons voorzien van een uitbreidbare en aanpasbare testworkflow.
9. Selenium
Selenium is een geavanceerd testraamwerk dat browsers automatiseert. Dit betekent dat het mogelijk is om gebruikersacceptatietests te schrijven onderzoek de hele app als geheel.
Selenium is een robuuste tool met een eigen WebDriver-API die een browser native kan aansturen hoewel een echte gebruiker het lokaal of op een externe computer zou gebruiken. Selenium is een uitstekende tool voor het testen van meer volwassen webtoepassingen.
Laatste gedachten
Geautomatiseerde testkaders stellen ons in staat om PHP-code van hogere kwaliteit te schrijven, en vanwege de populariteit van de taal hebben we veel keuzes, dus we kunnen kiezen voor degene die aan onze ontwikkelingsbehoeften voldoet..
Er is echter een belangrijk ding dat we altijd moeten onthouden. Geautomatiseerd testen kan krachtig zijn, maar het kan vervang nooit bètatesten - tests uitgevoerd door echte mensen die de toekomstige gebruikers van de toepassing zullen zijn.