dockerize your unit tests for faster feedback

36
DOCKERIZE YOUR UNIT TESTS FOR FASTER FEEDBACK Let’s speed up your tests! https://goo.gl/images/OdSqB4

Upload: michelangelo-van-dam

Post on 18-Jan-2017

765 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Dockerize your unit tests for faster feedback

DOCKERIZE YOUR UNIT TESTS FOR FASTER FEEDBACKLet’s speed up your tests!

http

s://

goo.

gl/i

mage

s/Od

SqB4

Page 2: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 2

Foto

by

Anna

Fil

ina

at B

GPHP

16

Page 3: Dockerize your unit tests for faster feedback

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

Page 4: Dockerize your unit tests for faster feedback

PHPUNIT

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 4

http

s://

goo.

gl/i

mage

s/eB

a0vw

Page 5: Dockerize your unit tests for faster feedback

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

Page 6: Dockerize your unit tests for faster feedback

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

Page 7: Dockerize your unit tests for faster feedback

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

Page 8: Dockerize your unit tests for faster feedback

DOCKER

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 8

http

s://

goo.

gl/i

mage

s/vh

DEGy

Page 9: Dockerize your unit tests for faster feedback

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

Page 10: Dockerize your unit tests for faster feedback

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

Page 11: Dockerize your unit tests for faster feedback

DEMO TIME

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 11

Page 12: Dockerize your unit tests for faster feedback

RUN THEM ALL

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 12

http

s://

goo.

gl/i

mage

s/gr

h4mu

Page 13: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 13

Page 14: Dockerize your unit tests for faster feedback

USING @GROUP

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 14

http

s://

www.

flic

kr.c

om/p

hoto

s/bg

php/

2121

0790

293

Page 15: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 15

Page 16: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 16

Page 17: Dockerize your unit tests for faster feedback

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;

Page 18: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 18

Page 19: Dockerize your unit tests for faster feedback

SHIP IT WITH DOCKER!!!

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 19

http

s://

goo.

gl/i

mage

s/Fo

0dVi

Page 20: Dockerize your unit tests for faster feedback

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

Page 21: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 21

Page 22: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 22

https://www.gnu.org/software/parallel/

Page 23: Dockerize your unit tests for faster feedback

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 {}

Page 24: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 24

Page 25: Dockerize your unit tests for faster feedback

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 {}

Page 26: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 26

Page 27: Dockerize your unit tests for faster feedback

WHERE ARE MY FAILURES?

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 27

http

s://

goo.

gl/i

mage

s/VW

pYFO

Page 28: Dockerize your unit tests for faster feedback

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;

Page 29: Dockerize your unit tests for faster feedback

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

Page 30: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 30

Page 31: Dockerize your unit tests for faster feedback

#FTW #PARTY #AWESOME

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 31

http

s://

goo.

gl/i

mage

s/uW

s8N0

Page 32: Dockerize your unit tests for faster feedback

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

Page 33: Dockerize your unit tests for faster feedback

QUESTIONS

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 33

http

s://

goo.

gl/i

mage

s/mM

3D3j

Page 34: Dockerize your unit tests for faster feedback

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

Page 35: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 35

phpcon.euTicket sales start soon!

January 27 & 28 in Antwerp (Belgium)

Page 36: Dockerize your unit tests for faster feedback

www.in2it.be - @in2itvof PHPUnit + Docker = 🚗💨 36

http

s://

goo.

gl/i

mage

s/dK

sFdO