Download - Dockerize your unit tests for faster feedback

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