Drozdov Kostya QA Automation Event Name
Contract testing. Getting started with Pact IO.
A bit of theory Contract testing Consumer Provider Pact is a code-first consumer-driven contract testing tool.
What is pact good for?
What is pact not good for?
Consumer testing
Provider verification
https://docs.pact.io
A bit of practice Consumer project https://github.com/drozdovkostya/demoPactConsumerProject Provider project https://github.com/drozdovkostya/demoPactProviderProject
Java Maven Docker Compose
Consumer and Provider
docker-compose.yml version: '3' services: postgres: image: postgres healthcheck: test: psql postgres --command "select 1" -U postgres ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: postgres pact-broker: image: dius/pact-broker depends_on: - postgres environment: PACT_BROKER_DATABASE_USERNAME: postgres PACT_BROKER_DATABASE_PASSWORD: password PACT_BROKER_DATABASE_HOST: postgres PACT_BROKER_DATABASE_NAME: postgres PACT_BROKER_LOG_LEVEL: INFO ports: - "80:80" jenkins: image: jenkins/jenkins ports: - "8085:8080"
Pact Broker The Pact Broker is an application for sharing for consumer driven contracts and verification results. https://docs.pact.io/pact_broker
Generate and publish contract to pact broker Verify contract from pact broker in provider
*картинка со звуком*
Verify provider test (Passed) Run tests in provider. Check results in pact broker.
Verify provider test (Failed) Change the contract to fail and run tests in provider. Check results in pact broker.
CI/CD Jenkins pipeline. Blue Ocean.
Consumer pipeline
Provider pipeline
How it looks in Blue Ocean Plugin
Version and tag. Tag for consumer PUT request http://pact-broker/pacticipants/consumer/versions/${GIT_COMMIT}/tags/${tag} Tag for provider PUT request http://pact-broker/pacticipants/provider/versions/${GIT_COMMIT}/tags/${tag} mvn pact:publish -DpactBrokerUrl=http://localhost:80 -Drevision=$GIT_COMMIT mvn verify pact:publish -DpactBrokerUrl=http://pact-broker -Drevision=$GIT_COMMIT
Version and tag.
CI/CD Provider contract test failed.
!? What about consumer? It seems that we can deploy any version of consumer...
Can I deploy CLI pact-broker can-i-deploy --pacticipant Foo --version 24 --pacticipant Bar --version 56 GET request http://pact-broker/can-i-deploy?pacticipant=test_provider&version=latestVersion&pacticipant=tes t_consumer&version=$GIT_COMMIT&to=prd Using docker docker run --rm pactfoundation/pact-cli:latest broker can-i-deploy --broker-base-url pact-broker --pacticipant test_consumer --latest
Can I deploy
Can I deploy Statuses: Verification between versions PASSED - "success": 1, Verification between versions FAILED - "failed": 1, There is no verified pact - "unknown": 1.
Can I deploy and webhook
Pact broker webhook Events: 'contract content changed' 'contract published' 'provider verification published' 'provider verification succeeded' 'provider verification failed'
Pact broker webhook POST request http://localhost/webhooks { "provider": { "name": "test_provider" }, "events": [{ "name": "contract_content_changed" }], "request": { "method": "GET", "url": "http://jenkins:8080/job/ProviderVerifyContract/build?token=trigger_provider_verify_contract", "username": "admin", "password": "admin" } }
Pact broker webhook
Pact broker webhook
Q&A

Contract testing. Getting started with Pact IO.