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
Top Related