Tester une application sous plusieurs versions de PHP avec phpenv

phpenv permet d’installer sur une même machine plusieurs versions de PHP et de sélectionner celle que l’on souhaite utiliser. phpenv est utilisé par Travis CI pour lancer des tests avec différentes versions de PHP.

L’objectif de ce post est d’installer phpenv, de compiler différentes versions de PHP avec php-build, et d’installer PHPUnit pour lancer les tests d’une application avec les PHP installés.

Prérequis

wget et git sont les seuls prérequis pour installer phpenv et php-build. Pour compiler PHP il faudra un certain nombre de dépendances, la majorité est installable avec « apt-get build-dep php5″, mais il vous en faudra surement d’autres: j’ai dû en ajouter deux.

$ sudo apt-get install -y wget git
$ sudo apt-get build-dep php5
$ sudo apt-get install -y libmcrypt-dev
$ sudo apt-get install -y libreadline-gplv2-dev

Installation de phpenv et php-build

On commence par installer phpenv, plus ou moins comme décrit dans le README

$ wget -qO- https://raw.githubusercontent.com/CHH/phpenv/master/bin/phpenv-install.sh | sh

$ echo 'export PATH="$HOME/.phpenv/bin:$HOME/.phpenv/shims:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(phpenv init -)"' >> ~/.bash_profile

$ source ~/.bash_profile

On installe ensuite php-build en tant que plugin de phpenv, là aussi tout est dans le README

$ git clone git://github.com/php-build/php-build.git $HOME/.phpenv/plugins/php-build
$ phpenv rehash

A ce stade, nous n’avons toujours pas de PHP

$ php --version
Le programme « php » n'est pas encore installé. Vous pouvez l'installer en tapant :
sudo apt-get install php5-cli

Compiler PHP

La commande « phpenv install » sans arguments va lister les versions de PHP disponibles. Je commence par une 5.3.29

$ phpenv install 5.3.29

Ok, là…. faut être un peu patient…. Pour ma part cela a planté plusieurs fois parce qu’il me manquait des dépendances… mais ça a fini par passer

$ phpenv versions
5.3.29

La version 5.3.29 est disponible, on peut l’activer

$ phpenv rehash
$ phpenv local 5.3.29
$ php --version
PHP 5.3.29 (cli) (built: Apr 26 2015 08:56:06)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
with Xdebug v2.2.7, Copyright (c) 2002-2015, by Derick Rethans

On ajoute maintenant la dernière version de PHP

$ phpenv install 5.6.8
$ phpenv versions
* 5.3.29 (set by /home/guillaume/.php-version)
5.6.8

Deux versions sont installées, PHP 5.3.29 est activée, on peut passer à PHP 5.6.8 simplement avec « phpenv local 5.6.8″

$ phpenv local 5.6.8
$ phpenv versions
5.3.29
* 5.6.8 (set by /home/guillaume/.php-version)
$ php --version
PHP 5.6.8 (cli) (built: Apr 26 2015 09:15:52)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans

2 versions de PHP fonctionnelles sont disponibles sur la machine, phpenv offre la possibilité de passer de l’une à l’autre très simplement.

Installer PHPUnit

Il ne nous reste plus qu’à installer PHPUnit pour nos différentes versions de PHP

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar

$ sudo cp phpunit.phar ~/.phpenv/versions/5.3.29/bin/phpunit
$ phpenv rehash

$ sudo mv phpunit.phar ~/.phpenv/versions/5.6.8/bin/phpunit
$ phpenv rehash

Lancer les tests

Il est maintenant possible de tester très simplement une application en lançant les tests sous les différentes versions de PHP installées

$ phpenv local 5.3.29
$ phpunit Litmus/tests/
............

Time: 151 ms, Memory: 23.00Mb

OK (12 tests, 67 assertions)

$ phpenv local 5.6.8
$ phpunit Litmus/tests/
............

Time: 143 ms, Memory: 13.75Mb

OK (12 tests, 67 assertions)

About the Author: Guillaume Luchet

Guillaume Luchet est Directeur de la R&D et Lead Développeur chez Bilendi Technology, entrepreneur et développeur freelance.