Ga door naar de hoofdinhoud

gitlab-ci, codeception and selenium web tests

All the php projects I work on, have tests. For some projects, we use PHPUnit as testing framework, but for more recent projects, I prefer to use Codeception, because it has an elegant way to write acceptance tests. We also use gitlab for our projects, and by adding a nifty .gitlab-ci.yml file to our source code, we made gitlab run our test suite every time new commits are pushed to the repository.

Recently, we started using Selenium WebDriver with codeception, so that we could run browser tests, to make sure that the javascripts we use keep working. Of course we wanted to run these browser tests with gitlab-ci as well, but that was not as easy as we thought it would be. The idea was to run selenium with a browser via a docker container, but the challenging part was setting up a webserver the browser could connect to.

Update 2022-06-17: In the mean time, I found out how to run an apache server as a gitlab job service, so the rest of this post has become kind of obsolete. I updated the demo project, you should check the .gitlab-ci.yml file, the Docker configuration for the apache container, and (of course 😉) the README to find out how it all works.

In a first attempt, I tried to start all the containers needed for our application, running docker-compose up from the ci like we do it for local development. This worked sometimes, but after a couple of builds the docker networks used by our gitlab runners got completely messed up, which was hard to fix.

In a second attempt, I tried to use Gitlab CI Services for all the containers in our docker-compose.yml file. I gave up before I completely configured that, because I noticed the networking problems wouldn't go away.

After days of swearing, I finally got it running. I think the networking problems were caused by the nginx-container I tried to use for the web tests. But actually I didn't need a container for nginx. It turned out I could just juse the php built-in development server to run the tests.

So I ended up by adding a service for selenium with chrome and a service for mysql (the project I was trying this on, didn't really need other services), and I just added a php -S statement to the script that ran the tests, I had a running server.

I still needed a small hack, to make the browser in the selenium container actually find the webserver. I ended up using a sed-command on the configuration file of my test suite in codeception.

For reference, here is a part of my gitlab-ci.yml file:

    - LOCAL_IP=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
    - echo Local IP $LOCAL_IP
    # Run the php built in server. Don't try to run nginx as a service, that only causes troubles. ;-)
    - php -S 0.0.0.0:8080 -t public/ 2> /dev/null &
    - sed -i "s/localhost:8080/$LOCAL_IP:8080/" tests/acceptance.suite.yml

Note that for this to work, I had to fiddle with the php container to have iproute2 installed.

If you want to see how it actutally works; I created a small demo project on gitlab that uses codeception in gitlab-ci to run a couple of browser tests. You can find the source code on gitlab: https://gitlab.com/johanv/codeception-ci-demo.

Van github naar gitlab

Mijn website is een statische website. Dat wil zeggen dat de hele site automatisch wordt gegenereerd op basis van een aantal tekstbestanden. En die tekstbestanden beheer ik met git.

Gisteren verhuisde ik de git-repository met die teksten van github naar gitlab. Niet omdat ik problemen heb met het bedrijf achter github (want Microsoft is tegenwoordig érg goed bezig), maar wel omdat ik gitlab-ci wou gebruiken om mijn site te bouwen. Concreet komt het erop neer dat, telkens ik een nieuwe versie van de source push, gitlab voor mij mijn site automatisch bouwt en deployt.

Misschien heeft github ook wel zo'n service. Maar die van gitlab heb ik nu al vaak gebruikt, en ik ben er erg tevreden over. Dus vanaf nu wordt mijn blog gepowerd door nikola en gitlab. Waarvoor dank.

Waarom ik signformyfuture.be ondertekende

Sign for my future

Afgelopen zondag werd het klimaatbetoog van Nic Balthazar uitgezonden op één. En ik heb gekeken. Onder het goedkeurend geknik van een aantal Belgische klimaatexperts betoogt Nic dat, tenzij we op korte termijn met z'n allen koolstofneutraal worden (voor België zou dat in 2040 moeten zijn, volgens het rapport van het IPCC van oktober 2018), ergens rond 2060-2080 geconfronteerd zullen worden met wereldwijde droogtes en een miljard klimaatvluchtelingen.

In het klimaatplan van de Vlaamse Overheid staat dat Vlaanderen tegen 2030 40% minder CO2 wil uitstoten. 2030, dat is over 10 jaar. En dus nog eens 10 jaar later, zou die uitstoot nul moeten zijn. Dat lijkt mij erg snel voor zo'n grote omschakeling. Ik zie het nog niet direct gebeuren (lees anders even mee in de commentaren op Facebook waarom ik dat denk). Snelle drastische wijzigingen zijn we in België niet gewoon, laat staan wereldwijd: De Verenigde Staten doen al niet meer mee, en Trump is allicht niet de laatste in zijn soort.

In 2060 zijn mijn kinderen vijftigers. Het zou dus toch niet slecht zijn mocht er snel iets gebeuren. Zeker omdat er een domino-effect dreigt als de aarde blijft opwarmen. Hier en daar zijn er mensen die zelf iets ondernemen of hun manier van leven aanpassen, om klimaatneutraler te zijn. Dat is lovenswaardig, maar dat gaat niet genoeg zijn. Een drastische verandering zoals we die nodig hebben, moet vanuit de overheid komen. En daarom tekende ik op sign for my future. En ik nodig u uit om hetzelfde te doen.

Just is just: Google Analytics

Plots zag ik het licht. Ik hier maar verkondigen dat Google kwaadaardig is, en hoe ik niet meer getrackt wil worden. Maar intussen wel stiekem aan Google vertellen dat jij mijn blog aan het lezen bent, via Google Analytics. Dat is op zijn minst een beetje schijnheilig.

Waarom had ik dat eigenlijk gedaan, Google analytics op mijn site gezet? Het enige dat ik af en toe bekeek, was het lijstje van de populairste pagina's. Dat kan net zo goed zonder analytics. Weg ermee.

Google Analytics bij het vuilnis

Google Analytics weghalen is niet meer dan een script verwijderen. Maar samen met die 10 lijntjes javascript, kon ik ook de helft van mijn privacy statement weggooien. Dat was mooi meegenomen.

Lees verder…

Contacten, kalender en foto's: NextCloud FTW

Ik heb heel lang zonder mobiele telefoon geleefd. Mijn motto was: ‘Als je mij wilt bereiken, moet je er moeite voor doen’. Toen ik in 2010 voor het eerst een GSM kocht, was ik dan ook meer op zoek naar een handig draagbaar computertje dan naar iets om effectief mee te bellen. En zo kocht ik mijn eerste smartphone.

Wat ik toendertijd enorm handig en makkelijk vond, was dat de telefoonnummers van mijn contacten bewaard werden in mijn Google-account. Zo had ik die telefoonnummers nog steeds bij de hand als ik eens een custom ROM op mijn telefoon flashte. Meteen was ik ook verlost van het lijstje telefoonnummers dat ik jaarlijks opnieuw kopieerde (met een echte balpen) in mijn nieuwe Chiro-zakagenda.

Uiteraard is er een keerzijde aan die medaille. Google kent nu al mijn contacten, en ook hun telefoonnummers. Tijd dat daar verandering in komt.

Apps that have access to my contacts

Vandaag draag ik het beheer van mijn contacten, agenda en foto's over aan NextCloud.

Lees verder…

Getting rid of Google

Mijn vertrouwen in Google staat historisch laag. Maar toch weet Google meer van mij dan ooit tevoren. Google kent mijn contacten, en mijn agenda. Google weet waar ik ben, heeft al mijn foto's, en leest nog steeds veel e-mails die voor mij bedoeld zijn. Google volgde ooit al mijn DNS-requests, en het zou me niet verbazen mocht Google ook mijn vingerafdrukken kennen.

Google heeft toegang tot veel te veel informatie over mij, en dat moet maar eens stoppen. Dat gaat mijn voornemen zijn voor 2019. Maar aangezien ik niet meteen alles overboord wil gooien, zal ik dat in stappen moeten doen. Dus kan ik er nu al best aan beginnen.

getting rid of google

Lees verder…

Een tablet als derde scherm voor je Ubuntu-systeem

Op het werk beschik ik over een docking station, en op die manier hangen er twee externe schermen aan mijn laptop. dat vind ik nu eens buitengewoon handig. Een terminalvenster hier, broncode daar, een gelijkaarig codebestand ginder, een unit test nog ergens anders, en dan misschien nog een browser ook... De drie schermen zijn al gauw goed gevuld.

Ik werk ook al eens van thuisuit. Daar heb ik geen docking station, en maar één extern scherm. Dat gaat ook, maar ik mis dat toch gauw, die extra ruimte. Op een dag viel mijn oog op de tablet die we thuis hebben liggen. Hoe moeilijk kon het zijn om die als extra scherm te gebruiken?

een tablet als derde scherm

Lees verder…

Blog bijgewerkt

Een nieuwe look voor mijn blog

Mijn vorige blog post dateert al van bijna twee jaar geleden. Dus ik zal eens een poging doen om deze website terug wakker te maken. Ik heb alvast de informatie over mijzelf bijgwerkt, en een nieuw thema toegepast. Het ziet er dus allemaal mooi en nieuw uit, maar aan de inhoud is nog niets veranderd.

Ik gebruik nu nikola 7.8.15 om de statische site te genereren, met virtualenv. Dat is iets typisch van Python, denk ik.

't Is allemaal nog wat work in progress. Ik maakt alvast een privacystatement. En verder zullen we nog wel zien.