Test automation and pipelines one step at a time Antonis Pavlakis @pavlakis

Code

Unit Tests (local environment) Possible steps required ● ● composer install bin/phpunit -c tests/phpunit/phpunit.xml

Unit Tests (CI environment) Possible steps required ● ● ● Download composer composer install bin/phpunit -c tests/phpunit/phpunit.xml

Bitbucket Pipelines

Pipeline status

Cache performance

Using a custom Docker image Dockerfile

Build Docker image docker build -t phpminds/php:7.2.15 . docker push phpminds/php:7.2.15

Pipeline with custom image

Pipeline performance

Integration Tests (local environment) Possible steps required ● ● ● ● composer install composer reset-db composer populate-db bin/phpunit -c tests/phpunit/phpunit.xml —group integration

Set DB to a known state “scripts”: { “reset-db”: [ “bin/console doctrine:database:drop —force”, “bin/console doctrine:database:create”, “bin/console doctrine:schema:update —force” Using composer scripts ], “populate-db”: [ “bin/console doctrine:fixtures:load” ] }

Docker Compose

Update Docker image Update Docker image ● Add mysql client

Run integration tests using Docker Compose If docker compose is not already running: docker-compose up —build -d Run tests from inside the running container: docker-compose exec -T phpminds-php sh -c “bin/phpunit -c tests/phpunit/phpunit.xml —group integration”

Docker Compose in Bitbucket Pipelines Steps required ● ● ● ● ● ● ● Install Docker Compose docker-compose up —build -d composer install (wait for DB container to start) composer reset-db composer populate-db bin/phpunit -c tests/phpunit/phpunit.xml —group integration

Install Docker Compose

Check DB connection

Putting it all together

A build with Docker Compose

Environment Variables

Using .env ci/assets/env.ci

Using .env

Managing secrets

Using repository variables

Acceptance Tests Possible steps required ● ● ● ● composer install composer reset-db composer populate-db bin/behat -c tests/behat/behat.yml

Example behat.yml

Add pipeline step

Thank You Antonis Pavlakis @pavlakis