Workshop: Maak je eigen testomgeving
JUG043 Maastricht organiseert een workshop over hoe jij je eigen testomgeving maakt om Joomla! te helpen
Jij als Joomler kunt de Joomla! Community helpen met testen voor de updates (pacthes). Maar hoe moet je dan testen en hoe maak je een goede testomgeving?
De Joomla! Community kan julie hulp gebruiken om bugs en andere problemen in Joomla! op te lossen. Indien iemand een probleem constateerd en dit vervolgens aangemeld via de Github pagina van Joomla!, dan wordt er naar een oplossing gezocht. Vervolgens gaan vrijwilligers uit de Joomla! Community er een patch voor maken om het probleem op te lossen. Jij kunt meewerken en daarmee de ontwikkeling van Joomla! helpen.
In dit artikel leg ik uit hoe je de Joomla! Community kunt helpen met testen en hoe je een testomgeving bouwt en welke opties er zijn.
Inleiding
In alle software zijn er fouten die opgelost moeten worden, is dit ook het geval is in Open Source software zoals Joomla!. De broncode van Joomla! is centraal beschikbaar gesteld op het internet, waardoor het voor iedereen toegankelijk. Iedereen die een bug of een probleem met Joomla ziet kan dit te melden.
Gerapporteerde bugs en problemen worden opgelost en moeten uiteindelijk getest worden. Via deze pagina leg ik uit hoe jij kunt bijdragen aan het Joomla! project door voorgestelde oplossingen te testen. Je hoeft geen kennis van coderen te hebben, je hebt een Joomla!installatie nodig om op te testen.
Een Quick-Reference-Guide voor het testen is beschikbaar op: Testen van Joomla! patches Quick-Reference-Guide
- Een testomgeving met bijvoorbeeld WAMP / XAMPP (lokaal) of een subdomein als testomgeving.
- Een account voor Github.
- Joomla! nightly build.
Alle aspecten komen in onderstaande hoofdstukken aan bod.
Navigatie naar de verschillende hoofdstukken
Via onderstaande links kun je direct naar een bepaald hoofdstuk navigeren.
- Aanmelden van een probleem
- Aanmelden van een beveiligingsprobleem
- Testomgeving inrichten
- Uitvoering van testen
- Handige links en video's
Aanmelden van een probleem
Om een bug te melden op de Joomla! bug trackers moet er een tracker item gemaakt worden. Nadat het tracker item is gemaakt zullen de ontwikkelaars onderzoeken of de melding klopt en de nodige handelingen verrichten. Hieronder staan tevens de stappen om een testomgeving in te richten en om de patches te testen.
Bugs melden
Je zult je moeten registreren op GitHub; de Joomla! issue tracker gebruikt GitHub accounts als verificatie.
Toegang tot de Joomla! issue tracker
Klik op deze link en op de Joomla! Issue Tracker
Controleer of het probleem dat u wilt melden al is gemeld.
Een serie filters geven de tracker items weer, door op de "zoekmiddelen" te klikken worden de filters geopend. Door met de muis over de titel te bewegen kan de inhoud bekeken worden. Wanneer het probleem dat je ondervindt nog niet is gemeld kun je op de knop Nieuw issue klikken in de hoofdnavigatie.
Er wordt een nieuw venster weergegeven, hoe meer informatie je daar geeft, hoe beter het is voor de ontwikkelaars
Vul zoveel mogelijk gegevens in. Je kunt tips voor ieder veld inschakelen door te schakelen tussen Pro en Help voor de Toon modus aan de rechter kant van het venster.
- Prioriteit: Gebruik de standaard "Gemiddeld" tenzij je voldoende bekend bent met de code om een andere keuze te maken.
- Versie: Vul hier de versie(s) in waarop het probleem van toepassing is
- Categorieën: Dit is lastiger. Gebruik "Administration" wanneer je het niet weet.
- Titel: Een korte samenvatting van het probleem.
- Omschrijving: Details van het probleem. Zie het gedeelte hieronder voor meer informatie.
- Uploaden: Het is toegestaan om afbeeldingen te uploaden bij het melden van een probleem. Informatie over de upload vereisten wordt vermeld op het formulier.
Geef een samenvatting
Beschrijf in een paar woorden de problemen die je ondervindt. Het is over het algemeen een goed idee gebruik te maken van bestaande tracker items als voorbeeld, zeker wanneer dit de eerste keer is dat je een probleem meldt.
Voorbeelden:
- Website: Waarschuwing zus en zo.
- Beheergedeelte: Kan het artikel niet opslaan wanneer <naamvandeplugin> is gepubliceerd.
Opmerking: zorg voor een duidelijke beschrijving van het probleem in de samenvatting, dit is namelijk het eerste wat ontwikkelaars zien wanneer zij de tracker doorzoeken op problemen die opgelost moeten worden.
Geef informatie over het probleem
Om zoveel mogelijk informatie te geven is het veld voor de beschrijving door middel van een template ingedeeld in vijf subsecties:
- Stappen om het probleem te reproduceren: Gedetailleerde stappen die beschrijven hoe iemand anders het probleem kan reproduceren.
- Verwacht resultaat: Wat je verwacht na het uitvoeren van bovenstaande stappen.
- Werkelijke resultaat: Wat er werkelijk gebeurt bij het uitvoeren van bovenstaande stappen
- Systeem informatie: Informatie over de omgeving waarin jouw systeem is geconfigureerd. Dit kan onder meer zijn: de browser die je gebruikt, de PHP versie op jouw server, of het type database van jouw site. Voor optimale resultaat, kun je deze gegevens kopiëren uit de systeeminformatie wanneer je bent aangemeld in het beheergedeelte van de website.
- Extra opmerkingen: Elke informatie die niet in de bovenstaande velden is gegeven maar kan bijdragen aan het oplossen van het probleem.
De algemene opmaak zou iets moeten zijn als:
- "Dit is precies wat ik gedaan heb."
- "Dit is wat er gebeurd is."
- "Dit is wat ik denk dat er had moeten gebeuren."
- "Overige informatie, mogelijke oplossing, voorgestelde code aanpassing."
Hoe meer informatie, hoe beter. Het is ook belangrijk om het probleem te kunnen reproduceren met gebruik van een Joomla! website met testvoorbeelddata, of met gemakkelijke, duidelijke instructies voor het opzetten ervan. Vergeet niet dat anderen geen toegang hebben tot de database van jouw (lokale) website, je moet dus in staat zijn om iemand uit te leggen hoe het probleem gezien kan worden met de data die beschikbaar is -- de voorbeeld website.
Voorbeeld A
- Wat ik heb gedaan
- Ik begon met de voorbeeld website. Alles was normaal. Ik heb de "naamvanplugin" ingeschakeld. Ik probeer een artikel in het beheergedeelte op te slaan.
- Wat er gebeurd
- Ik krijg een leeg scherm en het artikel is niet opgeslagen.
- Wat er zou moeten gebeuren
- Artikel zou correct opgeslagen moeten worden.
- Overige informatie
- Deze plugins zijn tegelijk ingeschakeld. SEF is ingeschakeld (of uitgeschakeld). Mijn website staat in een submap. Verder merk ik op dat ... etc. Volgens mij zijn die en die bestanden de oorzaak (wanneer u weet waarover u praat).
Voorbeeld B
- Wat ik heb gedaan
- Ga naar het beheergedeelte. Klik op "menu-naam" Menu.
- Wat er gebeurde
- Pagina die geopend werd is leeg.
- Wat er had moeten gebeuren
- Menu had normaal geopend moeten worden.
- Overige informatie
- Alle andere menu's werken normaal. etc.
Echt voorbeeld
- Wat ik heb gedaan
- Begonnen met de voorbeeld website.
- Een ongepubliceerd artikel toegevoegd via het beheergedeelte, in sectie=FAQ, categorie=algemeen.
- Zet, bij de opties voor het artikel Toon titel op "Nee" en Printen, PDF en e-mail iconen op "Verberg".
- Sla het artikel op en ga naar de website. Log-in op de website als administrator en ga naar het Example Pages -> Category Blog menu-item.
- Wat er gebeurde: Het nieuw toegevoegde artikel wordt weergegeven maar er is geen bewerk-icoon voor de website gebruiker om op te klikken.
- Wat er had moeten gebeuren: Het bewerk-icoon zou weergegeven moeten worden waardoor de website gebruiker het artikel bewerken kan.
- Overige informatie: Dit doet zich alleen voor met de rhuk_milkyway template. Door deze code [voorgestelde code] te wijzigen in bestand [naam en hiërarchie van het bestand], regel #(s), lijkt het probleem voor mij opgelost te zijn.
Een pull request direct via Joomla!'s GitHub repository indienen
Wanneer je een oplossing wilt indienen door de code in Joomla! zelf aan te bieden kun je dat doen door middel van een "pull request" naar Joomla!'s code repository op GitHub.com, die je hier vindt: https://github.com/joomla/joomla-cms
Dit proces vereist enige kennis van Source Control Management systemen en Git in het bijzonder. Indien je weet wat het Git SCM is en hoe het werkt, is het proces eenvoudig:
- Aanmelden voor een gratis GitHub.com account
- Fork de Joomla! repo
Schakel over naar de "staging" branch wanneer je een oplossing wilt voorstellen voor de huidige Joomla! 3.x release of naar de "3.x-dev" branch wanneer je een oplossing wilt voorstellen voor de volgende Joomla! 3.x (of 4.x) versie.
- De gerelateerde bestanden in Joomla! in de juiste branch toevoegen/bewerken en klik op de knop "review & compare" - meer informatie hierover op https://help.github.com/articles/using-pull-requests - om het proces van het indienen van de "pull request" te starten.
Extra tips and trucs
Goed geschreven bug rapporten zijn ongelooflijk nuttig. Er is echter sprake van een zekere mate van overhead bij het werk met ieder bug tracking systeem, jouw hulp bij het zo nuttig mogelijk houden van ons ticketsysteem wordt dus gewaardeerd. In het bijzonder:
- Lees altijd de FAQ om te controleren of jouw probleem een bekende vraag betreft.
- Doorzoek altijd de tracker om te controleren of uw probleem al is gemeld.
- Vraag eerst op forums voor het melden van bugs Joomla 3.x wanneer je niet zeker weet of datgene wat je ondervindt een bug is.
- Schrijf volledige, reproduceerbare, specifieke bug rapporten. Geef zoveel mogelijk informatie, compleet met code, test cases, etc. Een voorbeeld die de bug illustreert in een kleine test case is het beste.
Gebruik de tracker niet voor het vragen van ondersteuning. Gebruik daarvoor de Joomla! forums, of het #joomla IRC channel op freenode.
Maak geen gebruik van de trackers om grootschalige functionaliteitswensen te uiten. We willen grote veranderingen in Joomla!'s core graag bediscussiëren op de ontwikkelaarsforums voor eraan te gaan werken.
Heropen problemen die zijn gemarkeerd als "geen bug" niet. Deze markering betekent dat besloten is dat we dit specifieke probleem niet willen of zullen oplossen. Vraag, indien je niet zeker weet waarom, het op de ontwikkelaarsforums.
Gebruik de tracker niet voor ellenlange discussies, omdat ze waarschijnlijk verloren gaan. Verplaats, indien een bepaald trackeritem controversieel is, de discussie naar de ontwikkelaarsforums.
Het melden van veilgheidsproblemen
Meld veiligheidsproblemen aan security [at] joomla [punt] org. Dit is een besloten lijst waar alleen ontwikkelaars die al lange tijd bijdragen en betrouwbaar zijn toegang toe hebben.
Wanneer de kwetsbaarheid bevestigd wordt in Joomla! zelf, zullen de volgende acties ondernomen worden:
- De melder wordt op de hoogte gebracht van de ontvangst van het rapport en dat er gewerkt wordt aan een oplossing. Er wordt een ruwe tijdschatting gegeven en de melder wordt gevraagd het probleem niet openbaar te maken voordat het door het project wordt aangekondigd.
- Alle andere ontwikkelingen worden zo lang als nodig stopgezet voor het ontwikkelen van een oplossing, met inbegrip van patches tegen de huidige en de twee voorgaande versies.
- Bepaal een datum waarop het veiligheidsprobleem en de oplossing worden aangekondigd. Om een wedloop tussen degenen die de patch toepassen en die proberen misbruik te maken van het lek te voorkomen, worden veiligheidsproblemen niet onmiddellijk aangekondigd.
- Kondig publiek het veiligheidsprobleem en de oplossing op de vooraf vastgestelde datum aan. Dit zal waarschijnlijk een nieuwe vrijgave van Joomla! betekenen maar in sommige gevallen kan het eenvoudig een patch van de huidige versies zijn.
Testomgeving inrichten
Eerst moet de basiscode opgehaald worden uit de Joomla GitHub repository. Er zijn verschillende manieren om de Joomla mastercode te downloaden, maar we bespreken hier alleen de download optie.
Map aanmaken
Eerst moeten we een map aanmaken op de lokale webserver OF op een hosting-account dat toegankelijk is via de browser. Maak de map bugtesten aan en ga naar deze map via Verkenner of Finder.
Download Joomla!
Ga naar de Joomla GitHub locatie en klik op Clone or download klik dan op Download ZIP.
Hiermee download je een kopie van de Joomla mastercode in een ZIP-bestand. Pak het bestand uit op een tijdelijke locatie, een map genaamd joomla-cms-staging verschijnt. Binnen deze map staat de Joomla mastercode. Ga naar de joomla-cms-staging map en kopieer de complete inhoud naar de map bugtesten die u in de vorige stap heeft aangemaakt.
Je kunt nu Joomla! installeren door naar http://localhost/bugtesten te gaan als je een lokale webserver gebruikt. Ga, als je gebruik maakt van een webhoster, naar de juiste URL voor de webhoster. Je doorloopt dan het normale installatieproces van Joomla!. Kies als voorbeelddata: Test English (GB) sample data
Dit is belangrijk zodat iedereen dezelfde gegevens gebruikt om te testen!
De installatie map hoeft niet verwijderd te worden, waardoor je alles, indien gewenst, makkelijk opnieuw kunt installeren.
Uitvoeren van testen
In dit hoofdstuk leg ik jullie uit hoe je kunt testen.
Download de Patchtester
Om je te helpen met het proces van het testen van patches, is een extensie genaamd "Patch Tester" ontwikkeld. De Patchtester kan gedownload worden van de Patchtester pagina en kan daarna geïnstalleerd worden via Extensiebeheer in Joomla.
Om de Patchtester te kunnen gebruiken is een GitHub account vereist, de reden hiervoor is dat er een limiet is op het aantal anonieme aanvragen die via de Patchtester worden gedaan. Je kunt je aanmelden voor een GitHub account op deze pagina.
Instellen Patchtester
De details van het GitHub account kunnen bij de instellingen van de Patchtester worden ingevuld. Ga, nadat de Patchtester geïnstalleerd is, naar Componenten -> Joomla! Patch Tester en klik op Opties rechtsboven. De Opties pagina verschijnt en er zijn drie tabbladen. Op het eerste tabblad genaamd GitHub Repository kunt u kiezen welke repository u wilt gebruiken. Standaard is dit het Joomla! CMS.
Op het tweede tabblad genaamd GitHub Authentication kun je jouw GitHub gebruikersnaam en wachtwoord of token invoeren, als je gebruik maakt van een token.
Opmerking: Indien je Two-Factor Authentication voor je GitHub account hebt geactiveerd, moet je een persoonlijke toegangsteken aanmaken op https://github.com/settings/applications en dit opgeven in het GitHub teken veld.
Klik, na het invoeren van jouw account details, op Opslaan & sluiten. Klik, terug in de Patchtester op Gegevens ophalen in de linker bovenhoek.
Je bent nu klaar om te beginnen met testen.
Vind een probleem in de issue-tracker dat je wilt testen of gebruik de Ik doe een gok knop. Controleer eerst of je het probleem kunt reproduceren. Indien je het probleem kunt reproduceren, dan kun je de patch installeren.
Het installeren van een patch
Vind in de Patchtester de items waar je aan werkt door middel van de (gedeeltelijke) titel of het ID. De titel van een tracker-item ziet er altijd zo uit:
[#4308] - Fixed event dispatching inconsistencies leading to incomplete API
Naast de # staat het ID en achter het - teken staat de titel.
Klik, nadat de patch gevonden is, op de blauwe knop Apply Patch. Controleer of de bug is opgelost en controleer ook of er geen nieuwe bugs zijn ontstaan.
Registreren van testresultaten
Voeg, na het testen, alstublieft jouw testresultaten toe aan het overzicht (gebruik de knop Test dit). Nu hoeft je alleen maar een reactie toe te voegen indien je extra informatie hebt of indien jouw test niet succesvol is. De Tracker voegt nu automatisch een reactie toe dat je getest hebt.
Er moet ook opgemerkt worden dat het beter is als je patches kunt testen in een meertalige omgeving (met minstens 3 content-talen gepubliceerd) aangezien er problemen zijn die alleen optreden in zo'n omgeving.
Terugdraaien patch
Nadat een patch is getest, is deze niet meer nodig en kan deze verwijderd worden uit jouw test-installatie, hierdoor test jij altijd op een schoon systeem (je kunt patches in relatie tot elkaar testen om zeker te weten dat ze elkaar niet in de weg zitten). Ga terug naar de Patchtester en klik op de groene knop Revert Patch. Dit verwijdert de patch en kun je het volgende probleem testen.
Patches testen met Git
De Patch Tester kan niet gebruikt worden om alle patches te testen. Soms moeten we een andere methode gebruiken. De Patch Tester vervangt het complete bestand en past dus niet alleen de wijzigingen uit het pull request toe. Het kan dus zijn dat u geen individueel (geïsoleerd) issue test.
Om een patch echt te testen met uitsluitend de wijzigingen die in de patch gemaakt zijn, moeten we Git gebruiken. De reden daarvoor is dat Git een patch kan toepassen met alleen de wijzigingen in die patch. Git doet dit met een diff-bestand.
Voorwaarden om de methode hieronder te gebruiken zijn:
- Joomla is geïnstalleerd met behulp van Git
- cURL is geïnstalleerd
De diff verkrijgen
Een diff verkrijgen uit een pull request is vrij eenvoudig. Laten we zeggen dat dit de URL is van het pull request
Om de diff te verkrijgen, hoeft u alleen maar .diff toe te voegen na de URL, die er dan als volgt uitziet
De diff testen
Voor u de diff toepast, kun je voor de zekerheid checken of de diff wel toegepast kan worden. Ga naar de root van je Joomla installatie en voer het volgende commando uit:
curl https://github.com/joomla/joomla-cms/pull/1452.diff | git apply --check
De diff toepassen
Als de diff getest is en er geen fouten zijn, kan de diff worden toegepast door het uitvoeren van het volgende commando:
curl https://github.com/joomla/joomla-cms/pull/1452.diff | git apply
Als de diff is toegepast, kun je de tests uitvoeren en de testresultaten opslaan zoals hierboven uitgelegd. Indien nodig kun je meerdere diffs in één keer uitvoeren, zolang ze elkaar niet overlappen. Dit kan nodig zijn als er meerdere pull requests moeten worden gecombineerd om de test uit te voeren.
De diff terugdraaien
Wanneer je klaar bent met testen, kun je het systeem terugbrengen in de oude staat door de diff terug te draaien, met het volgende commando:
curl https://github.com/joomla/joomla-cms/pull/1452.diff | git apply -R
Om er zeker van te zijn dat alles netjes is, kun je het volgende commando uitvoeren:
git status
Je zou deze melding moeten zien:
nothing to commit, working directory clean
Als het systeem niet opgeruimd is, kun je een melding als deze te zien krijgen:
Wanneer je gewijzigde bestanden ziet, maar zelf geen wijzigingen hebt aangebracht, kun je het systeem resetten met
git reset --hard HEAD
Nu zou alles opgeruimd moeten zijn.
Als je enthousiast bent geworden om te testen, probeer het dan eens. Het kost wat inspanning om alles op te zetten, maar als dat eenmaal gedaan is, is het leuk en makkelijk! Daarnaast draag je nu actief bij aan de verbetering van Joomla!.
Handige links en video's
Bekijk de volgende 3 Engelstalige YouTube filmpjes voor meer informatie:
Part 1: Introduction, what is patch testing.
Part 2: How to setup a web server to test Joomla! issues.
Joomla! Issue tracker: https://issues.joomla.org/
Joomla! github: https://github.com/joomla/joomla-cms
Joomla! Patch testing documentatie (Nederlands): https://docs.joomla.org/Testing_Joomla!_patches/nl
Joomla! patch tester component: https://github.com/joomla-extensions/patchtester/releases
Joomla! Volunteer Portal : https://volunteers.joomla.org/
Joomla! Bugs en problemen indienen: https://docs.joomla.org/Filing_bugs_and_issues/nl