Skip to content

joleques/contract-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PACT - Exemplos de uso

Nesses códigos vocês vão encontrar exemplos de uso do PACT como testes de contrato guiados pelo consumidor. Do lado dos consumidores da api usaremos PACT JVM Junit e no lado do provider Gradle task.

Os serviços foram escritos em Java usando Spring e Node, e vão cobrir:

  • Exemplo de um provider e três consumidores.
  • Produção do Pact em diferentes linguagens.
  • Utilização do Pact Broker

Tecnologias utilizadas

  • Gradle
  • Spring boot
  • Node
  • JUnit
  • Java
  • Node
  • Docker

Entendendo a Aplicação:

O exemplo simula uma arquitetura de microservices e cada serviço possui uma responsabilidade.

  • Produtor:
    • client: é a nossa api (provedor) responsável por informações referente aos clientes do nosso negócio.
  • Consumidor
    • financial: é responsável pelo setor financeiro da empresa
    • logistic: é responsável por entregas da empresa
    • humanresources: é responsável pelo gerenciamento dos funcionários da empresa

Pact Broker

No diretório infrastructure encontra-se o docker-compose.yml responsável por subir os containers do Pact Broker

Para executar:

docker-compose up -d

Configurações Gradle

  • Produtor:
plugins {
	...

	id "au.com.dius.pact" version "4.0.3"
}

...

apply plugin: 'au.com.dius.pact'

...

pact {
    serviceProviders {
        ClientProvider {
            protocol = 'http'
            host = 'localhost'
            port = 8091
            path = '/'

            hasPactsFromPactBroker("http://localhost")
        }
    }
}
  • Adicionar e Aplicar o Plugin do Pact

  • pact { ... } : definições sobre o Boker:

    • serviceProviders: Define qual provider será verificado o contrato
    • hasPactsFromPactBroker: Path do btoker
    • protocol, host, port e path: informações do serviço provedor (api)
  • Consumidor

plugins {
    ...

	id "au.com.dius.pact" version "4.0.3"
}

import java.net.URL


apply plugin: 'au.com.dius.pact'

dependencies {
    
    ...
	
    testImplementation("au.com.dius:pact-jvm-consumer-junit:4.0.3")
    testImplementation("au.com.dius:pact-jvm-consumer-java8:4.0.3")
}

test {
    systemProperties['pact.rootDir'] = "$rootDir/Pacts/Finacial"
} 

pact {
	    
    publish {
        pactDirectory = "$rootDir/Pacts/Finacial"
        pactBrokerUrl = 'http://localhost'
       // pactBrokerUsername = ''
       // pactBrokerPassword = ''
    }
}

  • Adicionar e Aplicar o Plugin do Pact
  • Definir as dependências necessárias.
  • systemProperties['pact.rootDir']: define os consumidores geram os pactos localmente.
  • pact { ... } : definições sobre o Boker:
    • pactDirectory: Local onde estão os pactos para serem publicados no broker
    • pactDirectory: Path do broker onde será publicado os pactos
    • pactBrokerUsername: Usuario para acessar o broker
    • pactBrokerPassword: Senha para acessar o broker

Geração dos PACT

  • Projetos Java: Basta rodar na raiz do projeto
./gradlew clean test
  • Projeto Node: Basta rodar na raiz do projeto
npm install

npm run test

Publicar os PACT

  • Projetos Java: Basta rodar na raiz do projeto
./gradlew pactPublish
  • Projeto Node: Basta rodar na raiz do projeto
npm run publish:pact

Verificando o PACT Na raiz do provider (api client) rodar o comando

./gradlew pactVerify

Broker PACT Relation

Fontes

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published