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

Preview:

Citation preview

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

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

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

Recommended