31
[email protected] (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

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

Embed Size (px)

Citation preview

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

[email protected]

(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

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

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.

[email protected]

twitter.com/juliodelimasbr.linkedin.com/in/juliodelimas

goldtips.by/juliodelimas

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

Conceito de Unidade, Integração e Aceitação

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

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).

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

Automação de testes

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

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

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

Frameworks PHP usados para automatizar testes

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

Frameworks PHP usados para automatizar testes

Testes de unidade

PHPUnit

Testes de integração

PHPUnit +

Guzzle

Testes de aceitação

Behat +

Webdriver

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

Sobre o

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

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.

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

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');?>

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

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)

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

Preparando o projeto

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

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

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

HANDS-ON

Automatizando testes de unidade

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

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

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

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);}

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

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 = \Codeception\Util\Stub::make('PedidoServicos', ['salvar' => 'Sucesso']);

Ponto negativo: Não é possível mocar interfaces :(

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

HANDS-ON

Automatizando testes de integração em APIs

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

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: ApiTestermodules: enabled: - REST: url: 'http://localhost:8888/qualister-php-testing/api' depends: PhpBrowser

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

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:

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

Automatizando testes de integração em APIs

5. Execute os testes de integração em API

vendor/bin/codecept run api --steps

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

HANDS-ON

Automatizando testes de Aceitação

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

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: AcceptanceTestermodules: enabled: - PhpBrowser: url: 'http://localhost:8888/qualister-php-testing/web' - \Helper\Acceptance

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

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');?>

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

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: AcceptanceTestermodules: enabled: - WebDriver: url: 'http://localhost:8888/qualister-php-testing/web' browser: firefox window_size: maximize - \Helper\Acceptance

Pode trabalhar com PhpBrowser ou Selenium Webdriver.

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

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

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

HANDS-ON

Gerando relatórios de execução

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

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

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

Thanks to beta testers

Adriel, Lilian, Mário e Robson

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

[email protected]

(48) 3285-5615

twitter.com/qualister

facebook.com/qualister

linkedin.com/company/qualister

Feedback: joind.in/14851