Upload
bruno-tanoue
View
271
Download
0
Embed Size (px)
Citation preview
Globalcode – Open4education
Trilha PHP – Testes e Ambiente de
Integração Contínua PHP para o
Desenvolvimento ÁgilBruno Yukio Tanoue
Web Developer – UOL BoaCompra
Globalcode – Open4education
Bruno Tanoue
Web Developer @ UOL BoaCompra ( 3 anos e 5
meses)
Checkout e Gateway de Pagamento BoaCompra.
Sistema Financeiro BoaCompra.
Bacharel em Ciência da Computação pela UEM
(Universidade Estadual de Maringá)
Email: [email protected]
LinkedIn: https://br.linkedin.com/in/brunotanoue
Globalcode – Open4education
Agenda
Pirâmide de Testes
Teste de Unidade Isolado x Colaborativo
Otimizações para Execução de Testes
Ambiente de Integração Contínua PHP
Globalcode – Open4education
Pirâmide de Testes
Objetivo: Promover uma proporção adequada de
testes para uma execução e um feedback rápido.
Testes de Unidade: Verificar a qualidade em pequenos
trechos de código (unidades).
Ex: PHPUnit
Testes de Integração: Testar a integração das unidades.
Ex: PHPUnit + DBUnit
Testes de Interface: Validar fluxos e informações
exibidas à nível de usuário.
Ex: Selenium Webdriver
Globalcode – Open4education
Pirâmide de Testes
http://martinfowler.com/bliki/TestPyramid.html
UI
Integração
Unidade
T
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Afinal o que é um teste de unidade?
Conceito mais utilizado e defendido:
Teste de Unidade Isolado: Método testado isoladamente
de outros métodos internos e comunicações externas
utilizando mocks.
Mock: Troca de uma estrutura real por uma estrutura
simulada para prosseguimento de um teste.
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Isolado
Controller Model Database
Controller Model(Mock)
UNIDADE
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Isolado
Pontos Positivos:
Execução rápida.
Localização mais rápida do erro no código.
Simulação de Exception.
Pontos Negativos:
Possível mock desatualizado.
Falso positivo nos testes.
Possível bug em produção.
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Afinal o que é um teste de unidade?
Outra definição:
Teste de Unidade Colaborativo: Método testado em
colaboração com seus métodos internos e comunicações
externas.
Mas o que é uma unidade neste caso?
Isso depende da profundidade do seu teste.
Globalcode – Open4education
UNIDADE
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Colaborativo
Controller Model Database
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Teste de Unidade Colaborativo
Pontos Positivos:
Execução dos testes com a estrutura real.
Cenário mais completamente testado (colaboração das
unidades).
Pontos negativos:
Tempo de execução mais lento.
Alta dependência entre componentes ou sistemas.
Falso negativo nos testes ( ex: comunicações externas).
Globalcode – Open4education
Teste de Unidade Isolado
x Colaborativo
Qual tipo de teste de unidade é melhor?
É necessário avaliar cada caso e dependendo
da necessidade utilizar um dos dois tipos de teste.
E como fica a pirâmide de testes com o teste de
unidade colaborativo?
http://martinfowler.com/bliki/UnitTest.html
MUITO CONFUSA!!!!
Globalcode – Open4education
Otimizações para
Execução de Testes
O que é importante para uma execução de testes?
Devem passar confiança de que está tudo bem com o
código.
Devem ser de fácil compreensão.
A execução da suíte deve ser a mais rápida possível,
para que seja executada o quanto antes e o maior
número de vezes seja necessário. (Ex: a cada commit
do desenvolvedor.)
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Ambiente
Problemas que podem atrasar a execução de testes:
Concorrência de rede.
Concorrência de banco.
Possível solução: centralizar o ambiente de testes em
uma única máquina, seja virtual ou real com um banco
de dados próprio para testes.
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Ambiente
BANCO DE STAGING BANCO DE TESTES LOCAL
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Unidade
@dataProvider : criar um provedor de dados para
produzir entradas para um teste.
Globalcode – Open4education
Otimizações para
Execução de Testes
Without @dataProvider
Globalcode – Open4education
Otimizações para
Execução de Testes
With @dataProvider
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
setUp e tearDown
Na execução da suíte, evita que vários navegadores fiquem
abertos se vários testes falharem.
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
setUpBeforeClass e tearDownAfterClass
E se ao invés disso, o navegador fosse aberto e fechado uma
vez à cada classe de teste?
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Surefire Plugin (Execução de testes em paralelo)
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #73
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #75
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #75
Globalcode – Open4education
Otimizações para
Execução de Testes
Otimizações de Código – Teste de Interface
Resultados – Build #76
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O que é um ambiente de integração contínua?
Integração Contínua
Processo Ágil
Defende a entrega contínua de código em um repositório central
em curtos espaços de tempo.
O código a ser integrado não pode produzir defeitos no código
já existente. (testes)
O ambiente de integração contínua tem como objetivo
automatizar tarefas do processo de integração contínua.
A automatização é importante para diminuir os erros de
natureza humana.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
Verificação
e
Atualização
de Cópia do
Repositório
Execução
dos Testes
Geração de
Pacote
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
Ferramenta de CI (Jenkins, Hudson, etc..)
É o coração do servidor de integração contínua, onde todo o
processo de integração de código, teste e geração de pacotes é
feito.
Controle de Versionamento (GIT, SVN, etc...)
O servidor de CI vai bater no repositório central de tempos em
tempos verificando se houve alteração. Caso haja alteração,
uma construção será disparada e a cópia local é atualizada.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Como criar um servidor de Integração Contínua
(CI) básico voltado para PHP?
PHP/PHPUnit
Execução de testes para validação do código integrado.
Servidor Web (Apache) e Banco de Dados (MySQL,
SQLite, etc...)
Suporte para testes unitários colaborativos, testes de integração
e testes de interface.
Ferramenta de Building(Maven, Ant, etc...)
Geração de pacotes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Vlw kpiaum!!! Então agora eu vou sair instalando
tudo na mão!!!!
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O Jenkins pode gerenciar a instalação da maioria
dos componentes através de PLUGINS.
Pode gerenciar várias versões de determinado
componente.
Fácil instalação, remoção ou atualização.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
Clover PHP
Gráfico de cobertura de código para cada construção.
Avisos quando a cobertura de código diminuir.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
Clover PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
HTML Publisher
Log PHPUnit: Fornece gráficos de cobertura de código de cada
pasta, classe ou método.
Informações de linhas cobertas, descobertas, dead code.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Outros Plugins de grande utilidade:
HTML Publisher
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
O processo de integração contínua dentro do
Jenkins é representado pelo job.
Um job pode ser configurado de uma maneira bastante
variada, podendo representar tanto uma etapa dentro da
integração contínua, como todo o processo de
integração contínua.
É possível alterar a ordem de execução dos passos
dentro de um job através de um simples “clica e arrasta”.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 1: Configurar o gerenciamento do código fonte.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 2: Configurar o método de verificação do
repositório (trigger).
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 3: Configurar a execução dos testes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 4: Gerar os pacotes.
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Criando e executando um job PHP no Jenkins:
Passo 5: Salvar e executar!!!!
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução:
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução:
Globalcode – Open4education
Ambiente de Integração
Contínua PHP
Log de Execução: