dockerize your unit tests for faster feedback
TRANSCRIPT
DOCKERIZE YOUR UNIT TESTS FOR FASTER FEEDBACKLet’s speed up your tests!
http
s://
goo.
gl/i
mage
s/Od
SqB4
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 2
Foto
by
Anna
Fil
ina
at B
GPHP
16
Michelangelo van Dam
‣ Pro PHP consultant at in2it ‣ President of PHPBenelux ‣ Open-Source contributor ‣ Conference Speaker ‣ ZCE and ZF-CE
in itPROFESSIONAL PHP SERVICES
PHPUnit + Docker = 🚗💨 3
PHPUNIT
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 4
http
s://
goo.
gl/i
mage
s/eB
a0vw
EXTRAS TO RUN PHPUNIT
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 5
‣ Command-line? ‣ Run from IDE? ‣ Test server? ‣ Jenkins, TeamCity, Bamboo? ‣ Vagrant? ‣ Docker?
http
s://
goo.
gl/i
mage
s/l0
HXj7
DRAWBACKS
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 6
‣ Takes long time for many tests ‣ Environment not always ready for testing ‣ Tests don’t provide good feedback
http
s://
goo.
gl/i
mage
s/Ta
jZrP
SYSTEM FAILURES
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 7
‣ Memory Exhausted ‣ Disk full ‣ No network or network latency ‣ Systems crash
http
s://
goo.
gl/i
mage
s/ru
od6b
DOCKER
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 8
http
s://
goo.
gl/i
mage
s/vh
DEGy
WHAT IS DOCKER?
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 9
‣ Technology platform ‣ Run processes in separate containers ‣ Scales fast and seemlessly ‣ Containers are easy shippable ‣ Best next thing since sliced bread
http
s://
goo.
gl/i
mage
s/xE
fLk5
DOCKER USAGE
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 10
‣ Mimic distributed architectures ‣ Isolate applications ‣ Run single purpose commands
http
s://
goo.
gl/i
mage
s/LI
fWVb
RUN THEM ALL
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 12
http
s://
goo.
gl/i
mage
s/gr
h4mu
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 13
USING @GROUP
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 14
http
s://
www.
flic
kr.c
om/p
hoto
s/bg
php/
2121
0790
293
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 15
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 16
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 17
for i in `./vendor/bin/phpunit --list-groups | grep "^ -" | awk {'print $2'}`; do ./vendor/bin/phpunit --group $i; done;
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 18
SHIP IT WITH DOCKER!!!
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 19
http
s://
goo.
gl/i
mage
s/Fo
0dVi
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 20
docker run -ti --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli ./vendor/bin/phpunit
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 21
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 22
https://www.gnu.org/software/parallel/
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 23
for i in `./vendor/bin/phpunit —list-groups | grep "^ -“ | awk {'print $2'}`; do echo $i; done | /usr/local/bin/parallel docker run -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli ./vendor/bin/phpunit --log-junit=build/junit-{}.xml --group {}
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 24
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 25
for i in `./vendor/bin/phpunit —list-groups | grep "^ -“ | awk {'print $2'}`; do echo $i; done | time /usr/local/bin/parallel docker run -d -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.0-cli ./vendor/bin/phpunit --log-junit=build/junit-{}.xml --group {}
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 26
WHERE ARE MY FAILURES?
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 27
http
s://
goo.
gl/i
mage
s/VW
pYFO
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 28
for i in `./vendor/bin/phpunit --list-groups | grep "^ -" | awk {'print $2'}`; do echo $i; done | time parallel docker run -d -v "$PWD":/var/run/phpunit -w /var/run/phpunit --name pu-docker-{} php:7.0-cli /var/run/phpunit/vendor/bin/phpunit --group {} && for i in `./vendor/bin/phpunit --list-groups | grep "^ -" | awk {'print $2'}`; do docker wait pu-docker-$i | grep -c 0 > /dev/null || docker logs pu-docker-$i && docker rm -f pu-docker-$i > /dev/null; done;
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 29
‣ loop over our @group list entries ‣ run these in docker (daemonized)
‣ loop over our @group list entries ‣ fetch the exit status of phpunit from the containers ‣ if not 0 -> show us the failure
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 30
#FTW #PARTY #AWESOME
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 31
http
s://
goo.
gl/i
mage
s/uW
s8N0
OTHER SCENARIOS
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 32
‣ Test on different PHP versions ‣ Test separation based on TestSuite, Directory, … ‣ Testing long running integration tests separately ‣ Resilience testing
http
s://
goo.
gl/i
mage
s/Jn
Y8yr
QUESTIONS
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 33
http
s://
goo.
gl/i
mage
s/mM
3D3j
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 34
PHPUnit/Unit Testing
Ensure your apps are of high quality
Zend Framework 2/3
Build robust web applications
Azure PHP
Quick time to market Scale up and out
jQuery
Professional jQuery
PHP 7
Learn the web language that powers 80% of the
internet
On-site Training
Personal coaching and mentoring on-site
Training courses 2016 - 2017
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 35
phpcon.euTicket sales start soon!
January 27 & 28 in Antwerp (Belgium)
www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 36
http
s://
goo.
gl/i
mage
s/dK
sFdO