SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
contato@qualister.com.br
(48) 3285-5615
twitter.com/qualister
facebook.com/qualister
linkedin.com/company/qualister
De Unitário a Aceitação:
Automatizando Testes
com Codeception
Trilha PHP | São Paulo | 25/07/2015
Palestrante
Júlio de Lima
Especialista em teste de software com ênfase em
automação de testes de software, possui formação em
Tecnologia da Informação e certificações internacionais e
(CTFL e CTAL-TM pelo ISTQB) e nacional (CBTS pela ALATS)
em teste de software. Professor convidado em cursos de pós
graduação em instituições do Paraná e Santa Catarina.
julio.lima@qualister.com.br
twitter.com/juliodelimas
br.linkedin.com/in/juliodelimas
goldtips.by/juliodelimas
Conceito de Unidade, Integração
e Aceitação
Conceito de Unidade, Integração e Aceitação
Testes de unidade
Avaliam isoladamente se
os métodos de uma
classe funcionam como
esperado.
Testes de integração
Avaliam se, após
integrados, os componentes
ou sistemas conseguem
interagir entre si como
esperado.
Testes de aceitação
Avaliam se o produto final
atende as requisitos
iniciais na perspectiva de
usuário final (negócios).
Automação de testes
Automação de testes
Testar manualmente o software na perspectiva
de unidade, integração e aceitação é um
processo demorado e custoso. Quando novas
versões do software são construídas torna-se,
muitas vezes, impossível re-testar tudo o que
foi testado nas versões anteriores e as novas
funcionalidades.
Principais benefícios são:
• Re-execução de testes executados em versões anteriores
• Feedback instantâneo após mudanças no código
• Melhoria na escrita do código
• Confiança na aplicação
Frameworks PHP usados para
automatizar testes
Frameworks PHP usados para automatizar testes
Testes de unidade
PHPUnit
Testes de integração
PHPUnit
+
Guzzle
Testes de aceitação
Behat
+
Webdriver
Sobre o
Sobre o Codeception
Framework open-source para automação de testes que
reune os principais frameworks disponíveis no mercado.
A escrita dos testes é feita de forma descritiva, muito
semelhante ao estilo BDD.
Desenvolvido com o intuito de que os testes de unidade,
integração e aceitação pudessem ser escritos usando um
estilo único.
Possui geradores que servem para criar o template inicial
dos testes.
Sobre o Codeception
Vejam um exemplo de um teste de aceitação:
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('adicionar um novo pedido');
$I->amOnPage('/');
$I->click('Novo pedido');
$I->fillField('id', 1);
$I->selectOption('produto', 'Firefox');
$I->click('button');
$I->see('Sucesso');
?>
Sobre o Codeception
Internamente ele utiliza os frameworks:
• PHPUnit
• Guzzle
• Facebook Webdriver
• Symfony BrowserKit
• Entre outros
Pré-requisitos:
• PHP 5.3+
• CURL enabled
• Composer (para o nosso Hands-on)
Preparando o projeto
Preparando o projeto
1. Crie o diretório “codeception-tdc” e dentro dele teremos o
diretório “src” (que armazena as classes do projeto)

2. Crie o arquivo “composer.json” e adicione o conteúdo abaixo:
{
"require": {
"codeception/codeception": "*"
},
"autoload": {
"classmap": [
"src"
]
}
}

3. Rode o comando 

composer install

4. Para criar os arquivos iniciais rode o comando 

vendor/bin/codecept bootstrap
HANDS-ON
Automatizando testes de
unidade
Automatizando testes de unidade
1. Criaremos um teste de unidade:
vendor/bin/codecept generate:test unit Pedido
Obs. Poderíamos também criar um teste do PHPUnit com o comando:
php codecept.phar generate:phpunit unit Pedido
Automatizando testes de unidade
2. Criaremos um novo teste para validar que é possível salvar um
pedido:
/**
* @test
*/
public function adicionarProdutoNoPedidoValidarQueFoiAdicionado()
{
// Arrange
$pedidoServicos = new PedidoServicos();
// Act
$resposta = $pedidoServicos->salvar($this->pedido);
// Assert
$this->tester->assertEquals('Sucesso', $resposta);
}
Automatizando testes de unidade
3. Para executá-lo basta executar o comando abaixo:
vendor/bin/codecept run unit
4. Buscando o isolamento das classes durante o teste, podemos criar
Stubs (implementadas a partir da classe de rock do PHPUnit) para
simular o comportamento de outras classes:
// Arrange
$pedidoServicos = new PedidoServicos();
$pedidoServicos = CodeceptionUtil
Stub::make('PedidoServicos', ['salvar' => 'Sucesso']);
Ponto negativo: Não é possível mocar interfaces :(
HANDS-ON
Automatizando testes de
integração em APIs
Automatizando testes de integração em APIs
1. Criaremos a suite de testes de Api
vendor/bin/codecept generate:suite api
2. Usaremos o gerador do Codeception para gerar o teste de integração
de novo pedido:
vendor/bin/codecept generate:cept api NovoPedido
3. Configuramos a URL base de nossa aplicação na propriedade URL no
arquivo de configuração da suíte de testes de aceitação: api.suite.yml
class_name: ApiTester
modules:
enabled:
- REST:
url: 'http://localhost:8888/qualister-php-testing/api'
depends: PhpBrowser
Automatizando testes de integração em APIs
<?php
$I = new ApiTester($scenario);
$I->wantTo('adicionar um novo pedido');
$I->amHttpAuthenticated('phptesting', '123');
$I->sendPOST('/pedido', [
'produtoid' => 10,
'produtonome' => 'Firefox',
'produtoestoque' => 50,
'produtovalor' => 49.90
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['message' => 'Sucesso', 'status' =>
'sucesso']);
?>
4. Escreveremos o teste que enviará a requisição à API:
Automatizando testes de integração em APIs
5. Execute os testes de integração em API
vendor/bin/codecept run api --steps
HANDS-ON
Automatizando testes de
Aceitação
Automatizando testes de Aceitação
1. Usaremos o gerador do Codeception para gerar o teste de aceitação
de novo pedido:
vendor/bin/codecept generate:cept acceptance NovoPedido
2. Configuramos a URL base de nossa aplicação na propriedade URL no
arquivo de configuração da suíte de testes de aceitação:
acceptance.suite.yml
class_name: AcceptanceTester
modules:
enabled:
- PhpBrowser:
url: 'http://localhost:8888/qualister-php-testing/web'
- HelperAcceptance
Automatizando testes de Aceitação
3. Criamos os comandos de execução dos testes:
<?php
$I = new AcceptanceTester($scenario);
$I->wantTo('adicionar um novo pedido');
$I->amOnPage('/');
$I->click('Novo pedido');
$I->fillField('id', 1);
$I->selectOption('produto', 'Firefox');
$I->fillField('estoque', 50);
$I->fillField('valor', 49.90);
$I->click('button');
$I->expect('a mensagem "sucesso" seja apresentada');
$I->see('Sucesso');
?>
Automatizando testes de Aceitação
4. Execute os testes de aceitação
vendor/bin/codecept run acceptance --steps
5. Para executar os testes em um browser real, precisamos que o
Selenium Server (java -jar bin/selenium-server-standalone-2.46.0.jar)
esteja sendo executado, após isso, modificaremos o arquivo de
configuração da suite de aceitação:
class_name: AcceptanceTester
modules:
enabled:
- WebDriver:
url: 'http://localhost:8888/qualister-php-testing/web'
browser: firefox
window_size: maximize
- HelperAcceptance
Pode trabalhar com PhpBrowser ou Selenium Webdriver.
PhpBrowser vs Webdriver
PhpBrowser
- É muito rápido
- Usa Texto, Name, CSS Selector ou XPath para identificar os elementos
- Só podemos clicar em links com URLs válidas e botões de submissão de forms
- Não consegue simular o preenchimento de campos que não estão em formulários
- Não testa Javascript
- Não presume identificar a visibilidade dos elementos
- Usa Guzzle e Symfony BrowserKit para enviar requisições ao servidor
WebDriver
- É mais lento
- Usa Texto, Name, CSS Selector ou XPath para identificar os elementos
- Permite tirar screenshots de telas
- Só podemos clicar em links com URLs válidas e botões de submissão de forms
- Não consegue simular o preenchimento de campos que não estão em formulários
- Não testa Javascript
- Não presume identificar a visibilidade dos elementos
- Usa Guzzle e Symfony BrowserKit para simular o browser
HANDS-ON
Gerando relatórios de
execução
Automatizando testes de Aceitação
Podemos gerar relatórios em HTML para que a leitura torne-
se mais simples:
vendor/bin/codecept run --html
O relatório também pode ser exportado no format JUnit
XML, através do comando abaixo:
vendor/bin/codecept run —-xml
Thanks to beta testers
Adriel, Lilian, Mário e Robson
contato@qualister.com.br
(48) 3285-5615
twitter.com/qualister
facebook.com/qualister
linkedin.com/company/qualister
Feedback:
joind.in/14851

Contenu connexe

Tendances

Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014Teste de performance na nuvem com JMeter e BlazeMeter TDC2014
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014Qualister
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredQualister
 
Teste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingTeste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingQualister
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwareJúlio de Lima
 
Como testar aplicativos ios e android
Como testar aplicativos ios e androidComo testar aplicativos ios e android
Como testar aplicativos ios e androidQualister
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredJúlio de Lima
 
Curso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCurso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCristiano Caetano
 
Testes em Web Services - conceitos e ferramentas
Testes em Web Services - conceitos e ferramentasTestes em Web Services - conceitos e ferramentas
Testes em Web Services - conceitos e ferramentasQualister
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvemJúlio de Lima
 
Testes performance nuvem com j meter e blazemeter
Testes performance nuvem com j meter e blazemeterTestes performance nuvem com j meter e blazemeter
Testes performance nuvem com j meter e blazemeterQualister
 
Juntando para multiplicar
Juntando para multiplicarJuntando para multiplicar
Juntando para multiplicarQualister
 
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)Júlio de Lima
 
Automacao testes automatizados
Automacao testes automatizadosAutomacao testes automatizados
Automacao testes automatizadosCristiano Caetano
 
[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com CodeceptionJúlio de Lima
 
Perspectivas em teste de software
Perspectivas em teste de softwarePerspectivas em teste de software
Perspectivas em teste de softwareQualister
 
Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterJúlio de Lima
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)Júlio de Lima
 
Automacao de testes mitos e verdades
Automacao de testes mitos e verdadesAutomacao de testes mitos e verdades
Automacao de testes mitos e verdadesCristiano Caetano
 

Tendances (20)

Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014Teste de performance na nuvem com JMeter e BlazeMeter TDC2014
Teste de performance na nuvem com JMeter e BlazeMeter TDC2014
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-Assured
 
Teste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testingTeste software metodos metodologia ageis agil agile testing
Teste software metodos metodologia ageis agil agile testing
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
 
Como testar aplicativos ios e android
Como testar aplicativos ios e androidComo testar aplicativos ios e android
Como testar aplicativos ios e android
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-Assured
 
Curso treinamento automação de testes com selenium
Curso treinamento automação de testes com seleniumCurso treinamento automação de testes com selenium
Curso treinamento automação de testes com selenium
 
Testes em Web Services - conceitos e ferramentas
Testes em Web Services - conceitos e ferramentasTestes em Web Services - conceitos e ferramentas
Testes em Web Services - conceitos e ferramentas
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem
 
Testes performance nuvem com j meter e blazemeter
Testes performance nuvem com j meter e blazemeterTestes performance nuvem com j meter e blazemeter
Testes performance nuvem com j meter e blazemeter
 
Juntando para multiplicar
Juntando para multiplicarJuntando para multiplicar
Juntando para multiplicar
 
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)
Palestra Automação de Testes em Dispositivos Móveis na Nuvem (BRATESTE2013)
 
Automacao testes automatizados
Automacao testes automatizadosAutomacao testes automatizados
Automacao testes automatizados
 
[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception
 
Perspectivas em teste de software
Perspectivas em teste de softwarePerspectivas em teste de software
Perspectivas em teste de software
 
Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeter
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
 
Automacao de testes mitos e verdades
Automacao de testes mitos e verdadesAutomacao de testes mitos e verdades
Automacao de testes mitos e verdades
 

En vedette

Testes de usabilidade com uma pitada de lean ux
Testes de usabilidade com uma pitada de lean uxTestes de usabilidade com uma pitada de lean ux
Testes de usabilidade com uma pitada de lean uxQualister
 
Testes ágeis
Testes ágeisTestes ágeis
Testes ágeisQualister
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Rafael Souza
 
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvem
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvemBRATESTE 2013 - Automação de testes de dispositivos móveis na nuvem
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvemQualister
 
Automação de testes BDD e ATDD
Automação de testes BDD e ATDDAutomação de testes BDD e ATDD
Automação de testes BDD e ATDDQualister
 
Testes de segurança desafios e oportunidades
Testes de segurança desafios e oportunidadesTestes de segurança desafios e oportunidades
Testes de segurança desafios e oportunidadesQualister
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes ExploratóriosAlan Carlos
 
Tendências em teste de software
Tendências em teste de softwareTendências em teste de software
Tendências em teste de softwareQualister
 
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014lisacrispin
 
Testes em métodos ágeis
Testes em métodos ágeisTestes em métodos ágeis
Testes em métodos ágeisQualister
 
Curso Teste de performance, carga e stress JMeter
Curso Teste de performance, carga e stress JMeterCurso Teste de performance, carga e stress JMeter
Curso Teste de performance, carga e stress JMeterQualister
 
Gestão de defeitos e testes com Jira
Gestão de defeitos e testes com JiraGestão de defeitos e testes com Jira
Gestão de defeitos e testes com JiraQualister
 
Teste e Qualidade de Software
Teste e Qualidade de SoftwareTeste e Qualidade de Software
Teste e Qualidade de SoftwareQualister
 
Curso testes avaliação Usabilidade
Curso testes avaliação UsabilidadeCurso testes avaliação Usabilidade
Curso testes avaliação UsabilidadeQualister
 

En vedette (16)

Testes de usabilidade com uma pitada de lean ux
Testes de usabilidade com uma pitada de lean uxTestes de usabilidade com uma pitada de lean ux
Testes de usabilidade com uma pitada de lean ux
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Testes ágeis
Testes ágeisTestes ágeis
Testes ágeis
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
 
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvem
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvemBRATESTE 2013 - Automação de testes de dispositivos móveis na nuvem
BRATESTE 2013 - Automação de testes de dispositivos móveis na nuvem
 
Automação de testes BDD e ATDD
Automação de testes BDD e ATDDAutomação de testes BDD e ATDD
Automação de testes BDD e ATDD
 
Testes de segurança desafios e oportunidades
Testes de segurança desafios e oportunidadesTestes de segurança desafios e oportunidades
Testes de segurança desafios e oportunidades
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
Tendências em teste de software
Tendências em teste de softwareTendências em teste de software
Tendências em teste de software
 
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014
Changing Your Testing Mindset, Booster Conference, Bergen, Norway, 2014
 
Testes em métodos ágeis
Testes em métodos ágeisTestes em métodos ágeis
Testes em métodos ágeis
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Curso Teste de performance, carga e stress JMeter
Curso Teste de performance, carga e stress JMeterCurso Teste de performance, carga e stress JMeter
Curso Teste de performance, carga e stress JMeter
 
Gestão de defeitos e testes com Jira
Gestão de defeitos e testes com JiraGestão de defeitos e testes com Jira
Gestão de defeitos e testes com Jira
 
Teste e Qualidade de Software
Teste e Qualidade de SoftwareTeste e Qualidade de Software
Teste e Qualidade de Software
 
Curso testes avaliação Usabilidade
Curso testes avaliação UsabilidadeCurso testes avaliação Usabilidade
Curso testes avaliação Usabilidade
 

Similaire à [TDC2015] De unitário a aceitação: Automação de testes com Codeception

TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredJúlio de Lima
 
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driverJúlio de Lima
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverQualister
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de SeleniumAutotic
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Tchelinux
 
Curso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterCurso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterQualister
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasWordCamp Floripa
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Vale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 

Similaire à [TDC2015] De unitário a aceitação: Automação de testes com Codeception (20)

Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
 
Automação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriverAutomação de testes funcionais com selenium webdriver
Automação de testes funcionais com selenium webdriver
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
Gsp007
Gsp007Gsp007
Gsp007
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
Iniciando com Yii Framework - Volmar Machado da Silva Neto (Rede Pampa de Com...
 
Curso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium QualisterCurso Treinamento Automação de testes com Selenium Qualister
Curso Treinamento Automação de testes com Selenium Qualister
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
 
Palestra
PalestraPalestra
Palestra
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Python 08
Python 08Python 08
Python 08
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Aula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHPAula 5 - Cookies e sessões em PHP
Aula 5 - Cookies e sessões em PHP
 
Vale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago BordiniVale Security Conference - 2011 - 6 - Thiago Bordini
Vale Security Conference - 2011 - 6 - Thiago Bordini
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
Aula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHPAula 5 - Cookies e Sessões em PHP
Aula 5 - Cookies e Sessões em PHP
 

[TDC2015] De unitário a aceitação: Automação de testes com Codeception

  • 1. contato@qualister.com.br (48) 3285-5615 twitter.com/qualister facebook.com/qualister linkedin.com/company/qualister De Unitário a Aceitação: Automatizando Testes com Codeception Trilha PHP | São Paulo | 25/07/2015
  • 2. Palestrante Júlio de Lima Especialista em teste de software com ênfase em automação de testes de software, possui formação em Tecnologia da Informação e certificações internacionais e (CTFL e CTAL-TM pelo ISTQB) e nacional (CBTS pela ALATS) em teste de software. Professor convidado em cursos de pós graduação em instituições do Paraná e Santa Catarina. julio.lima@qualister.com.br twitter.com/juliodelimas br.linkedin.com/in/juliodelimas goldtips.by/juliodelimas
  • 3. Conceito de Unidade, Integração e Aceitação
  • 4. Conceito de Unidade, Integração e Aceitação Testes de unidade Avaliam isoladamente se os métodos de uma classe funcionam como esperado. Testes de integração Avaliam se, após integrados, os componentes ou sistemas conseguem interagir entre si como esperado. Testes de aceitação Avaliam se o produto final atende as requisitos iniciais na perspectiva de usuário final (negócios).
  • 6. Automação de testes Testar manualmente o software na perspectiva de unidade, integração e aceitação é um processo demorado e custoso. Quando novas versões do software são construídas torna-se, muitas vezes, impossível re-testar tudo o que foi testado nas versões anteriores e as novas funcionalidades. Principais benefícios são: • Re-execução de testes executados em versões anteriores • Feedback instantâneo após mudanças no código • Melhoria na escrita do código • Confiança na aplicação
  • 7. Frameworks PHP usados para automatizar testes
  • 8. Frameworks PHP usados para automatizar testes Testes de unidade PHPUnit Testes de integração PHPUnit + Guzzle Testes de aceitação Behat + Webdriver
  • 10. Sobre o Codeception Framework open-source para automação de testes que reune os principais frameworks disponíveis no mercado. A escrita dos testes é feita de forma descritiva, muito semelhante ao estilo BDD. Desenvolvido com o intuito de que os testes de unidade, integração e aceitação pudessem ser escritos usando um estilo único. Possui geradores que servem para criar o template inicial dos testes.
  • 11. Sobre o Codeception Vejam um exemplo de um teste de aceitação: <?php $I = new AcceptanceTester($scenario); $I->wantTo('adicionar um novo pedido'); $I->amOnPage('/'); $I->click('Novo pedido'); $I->fillField('id', 1); $I->selectOption('produto', 'Firefox'); $I->click('button'); $I->see('Sucesso'); ?>
  • 12. Sobre o Codeception Internamente ele utiliza os frameworks: • PHPUnit • Guzzle • Facebook Webdriver • Symfony BrowserKit • Entre outros Pré-requisitos: • PHP 5.3+ • CURL enabled • Composer (para o nosso Hands-on)
  • 14. Preparando o projeto 1. Crie o diretório “codeception-tdc” e dentro dele teremos o diretório “src” (que armazena as classes do projeto)
 2. Crie o arquivo “composer.json” e adicione o conteúdo abaixo: { "require": { "codeception/codeception": "*" }, "autoload": { "classmap": [ "src" ] } }
 3. Rode o comando 
 composer install
 4. Para criar os arquivos iniciais rode o comando 
 vendor/bin/codecept bootstrap
  • 16. Automatizando testes de unidade 1. Criaremos um teste de unidade: vendor/bin/codecept generate:test unit Pedido Obs. Poderíamos também criar um teste do PHPUnit com o comando: php codecept.phar generate:phpunit unit Pedido
  • 17. Automatizando testes de unidade 2. Criaremos um novo teste para validar que é possível salvar um pedido: /** * @test */ public function adicionarProdutoNoPedidoValidarQueFoiAdicionado() { // Arrange $pedidoServicos = new PedidoServicos(); // Act $resposta = $pedidoServicos->salvar($this->pedido); // Assert $this->tester->assertEquals('Sucesso', $resposta); }
  • 18. Automatizando testes de unidade 3. Para executá-lo basta executar o comando abaixo: vendor/bin/codecept run unit 4. Buscando o isolamento das classes durante o teste, podemos criar Stubs (implementadas a partir da classe de rock do PHPUnit) para simular o comportamento de outras classes: // Arrange $pedidoServicos = new PedidoServicos(); $pedidoServicos = CodeceptionUtil Stub::make('PedidoServicos', ['salvar' => 'Sucesso']); Ponto negativo: Não é possível mocar interfaces :(
  • 20. Automatizando testes de integração em APIs 1. Criaremos a suite de testes de Api vendor/bin/codecept generate:suite api 2. Usaremos o gerador do Codeception para gerar o teste de integração de novo pedido: vendor/bin/codecept generate:cept api NovoPedido 3. Configuramos a URL base de nossa aplicação na propriedade URL no arquivo de configuração da suíte de testes de aceitação: api.suite.yml class_name: ApiTester modules: enabled: - REST: url: 'http://localhost:8888/qualister-php-testing/api' depends: PhpBrowser
  • 21. Automatizando testes de integração em APIs <?php $I = new ApiTester($scenario); $I->wantTo('adicionar um novo pedido'); $I->amHttpAuthenticated('phptesting', '123'); $I->sendPOST('/pedido', [ 'produtoid' => 10, 'produtonome' => 'Firefox', 'produtoestoque' => 50, 'produtovalor' => 49.90 ]); $I->seeResponseCodeIs(200); $I->seeResponseIsJson(); $I->seeResponseContainsJson(['message' => 'Sucesso', 'status' => 'sucesso']); ?> 4. Escreveremos o teste que enviará a requisição à API:
  • 22. Automatizando testes de integração em APIs 5. Execute os testes de integração em API vendor/bin/codecept run api --steps
  • 24. Automatizando testes de Aceitação 1. Usaremos o gerador do Codeception para gerar o teste de aceitação de novo pedido: vendor/bin/codecept generate:cept acceptance NovoPedido 2. Configuramos a URL base de nossa aplicação na propriedade URL no arquivo de configuração da suíte de testes de aceitação: acceptance.suite.yml class_name: AcceptanceTester modules: enabled: - PhpBrowser: url: 'http://localhost:8888/qualister-php-testing/web' - HelperAcceptance
  • 25. Automatizando testes de Aceitação 3. Criamos os comandos de execução dos testes: <?php $I = new AcceptanceTester($scenario); $I->wantTo('adicionar um novo pedido'); $I->amOnPage('/'); $I->click('Novo pedido'); $I->fillField('id', 1); $I->selectOption('produto', 'Firefox'); $I->fillField('estoque', 50); $I->fillField('valor', 49.90); $I->click('button'); $I->expect('a mensagem "sucesso" seja apresentada'); $I->see('Sucesso'); ?>
  • 26. Automatizando testes de Aceitação 4. Execute os testes de aceitação vendor/bin/codecept run acceptance --steps 5. Para executar os testes em um browser real, precisamos que o Selenium Server (java -jar bin/selenium-server-standalone-2.46.0.jar) esteja sendo executado, após isso, modificaremos o arquivo de configuração da suite de aceitação: class_name: AcceptanceTester modules: enabled: - WebDriver: url: 'http://localhost:8888/qualister-php-testing/web' browser: firefox window_size: maximize - HelperAcceptance Pode trabalhar com PhpBrowser ou Selenium Webdriver.
  • 27. PhpBrowser vs Webdriver PhpBrowser - É muito rápido - Usa Texto, Name, CSS Selector ou XPath para identificar os elementos - Só podemos clicar em links com URLs válidas e botões de submissão de forms - Não consegue simular o preenchimento de campos que não estão em formulários - Não testa Javascript - Não presume identificar a visibilidade dos elementos - Usa Guzzle e Symfony BrowserKit para enviar requisições ao servidor WebDriver - É mais lento - Usa Texto, Name, CSS Selector ou XPath para identificar os elementos - Permite tirar screenshots de telas - Só podemos clicar em links com URLs válidas e botões de submissão de forms - Não consegue simular o preenchimento de campos que não estão em formulários - Não testa Javascript - Não presume identificar a visibilidade dos elementos - Usa Guzzle e Symfony BrowserKit para simular o browser
  • 29. Automatizando testes de Aceitação Podemos gerar relatórios em HTML para que a leitura torne- se mais simples: vendor/bin/codecept run --html O relatório também pode ser exportado no format JUnit XML, através do comando abaixo: vendor/bin/codecept run —-xml
  • 30. Thanks to beta testers Adriel, Lilian, Mário e Robson