[phpconferencebr] automação de testes com codeception

37
www.qualister.com.br (48) 4052-9536 / 9540 [email protected] Automação de testes BDD usando Codeception por Júlio de Lima @juliodelimas

Upload: julio-de-lima

Post on 20-Mar-2017

588 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.br

(48) 4052-9536 / 9540 [email protected]

Automação de testes BDD usando Codeception

por Júlio de Lima

@juliodelimas

Page 2: [PHPConferenceBR] Automação de testes com Codeception

Palestrante

Júlio de LimaEspecialista 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 (CTFL e CTAL-TM pelo ISTQB) e nacional (CBTS pela ALATS) relacionada a testes de software além de ser certificado na ferramenta SoapUI Pro pela SmartBear Software. Atualmente é consultor de automação de testes e instrutor na Qualister e é professor de disciplina de teste de software em cursos de pós-graduação no Paraná e em Santa Catarina.

[email protected]

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

goldtips.by/juliodelimas

Page 3: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

BDD: Desenvolvimento Dirigido por Comportamentos

3

BDD: Desenvolvimento Dirigido por Comportamentos

Analisando as empresas brasileiras usando a regra de Paretto, apenas 20% usam documentação com base em UML, as outras 80%

documentam o software com linguagem comum, e-mails, verbalmente ou mesmo papel de pão.

Page 4: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

BDD: Desenvolvimento Dirigido por Comportamentos

4

Um exemplo de descrição do software por e-mail

"Olá José, aqui é a Maria, preciso que altere nosso sistema. Quero ter a

possibilidade de registrar as movimentações de entrada e saída (no

máximo 100 reais) de nosso caixa."

Page 5: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

BDD: Desenvolvimento Dirigido por Comportamentos

5

Agora, o mesmo exemplo usando BDD

Funcionalidade: Gerenciar Movimentações Sendo o administrador de uma loja Posso gerenciar movimentações Para que possa ver, de forma simples, as entradas e saídas de valores

Cenário: Gerando uma movimentação de entrada Dado que eu esteja autenticado como administrador E que eu tenha acessado o menu "Movimentações" E clicado em "Nova movimentação” para inserir uma movimentação Quando eu informar os dados: |tipo|valor|itens| |Entrada|500,00|Almoçar| E clicar em "Gravar" Então verei a mensagem "Sucesso ao inserir a movimentação"

Page 6: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

BDD: Desenvolvimento Dirigido por Comportamentos

6

Cenário: Gerando uma movimentação de saída dentro do valor limite Dado que eu esteja autenticado como administrador E que eu tenha acessado o menu "Movimentações" E clicado em "Nova movimentação” para inserir uma movimentação Quando eu informar os dados: |tipo|valor|itens| |Saída|100,00|Almoçar| E clicar em "Gravar" Então verei a mensagem "Sucesso ao inserir a movimentação"

Cenário: Gerando uma movimentação de saída fora do valor limite Dado que eu esteja autenticado como administrador E que eu tenha acessado o menu "Movimentações" E clicado em "Nova movimentação” para inserir uma movimentação Quando eu informar os dados: |tipo|valor|itens| |Saída|100,01|Almoçar| E clicar em "Gravar" Então verei a mensagem "São permitidas apenas movimentações de saída de até 100 reais"

Page 7: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes manuais e suas limitações

7

Os testes manuais servem para testar, sem o uso de ferramentas

automatizadas, se o software atende as necessidades do cliente e se funciona

como esperado.

Clientes podem ser: O usuário final, os desenvolvedores, as empresas que

consumirão nossa API, entre outros.

Page 8: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes manuais e suas limitações

8

Os testes tendem a serem trabalhosos, custosos, demorados, repetitivos e

muitas vezes inviáveis.

Exige que o testador tenha as habilidades necessárias para atuar nestas áreas e destreza para saber priorizar os testes que deverão ser executados, pois na maioria das vezes não dá

tempo para testar tudo.

Page 9: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes manuais e suas limitações

9

Os testes tendem a serem trabalhosos, custosos, demorados, repetitivos e

muitas vezes inviáveis.

Exige que o testador tenha as habilidades necessárias para atuar nestas áreas e destreza para saber priorizar os testes que deverão ser executados, pois na maioria das vezes não dá

tempo para testar tudo.

Page 10: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

10

Testes automatizados são scripts programados para avaliar os softwares, eles complementam o trabalho manual.

Nos traz uma série de benefícios, como: Segurança mesmo após fazer alterações

drásticas no sistema, redução de debugs no código, velocidade na liberação de versões, economia no tempo dos testadores manuais.

Page 11: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

11

Vejamos alguns frameworks open-source usados para

automatizar testes

Page 12: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

12

PHPUnit Usado para automatizar testes de

unidade em PHP

Page 13: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

13

class PedidoTest extends PHPUnit_Framework_TestCase { /** * @test * @author Julio */ public function aoAdicionarProdutoAListaDeveraConterApenas1Item() { // Arrange $pedido = new Pedido(); $produto = $this->getMockBuilder("IProduto") ->setConstructorArgs( array(1, "PlayStation", 5, 999.99) ) ->getMock(); // Act $pedido->addItemPedido($produto, 2); $pedidoitens = $pedido->getPedidoItens(); // Assert $this->assertCount(1, $pedidoitens); $this->assertEquals(array($produto, 2), $pedidoitens[0]); } }

Page 14: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

14

PHPUnit com Guzzle Guzzle é um framework usado para

fazer requisições à APIs Rest

Page 15: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

15

class PedidoAPITest extends PHPUnit_Framework_TestCase { /** * @test * @author Julio */ public function testAcessarRootEntaoReceber200SucessoECodigo() { // Arrange $client = new GuzzleHttp\Client( ["base_uri" => "http://localhost:8888/qualister-testing/api"]

); // Act $resposta = $this->client->get("/", ['auth' => ['phptesting', '123']]); // Assert $this->assertEquals(200, $resposta->getStatusCode()); $body = json_decode($resposta->getBody(), true); $this->assertEquals("gnitsetphp", $body["data"]["codigo"]); } }

Page 16: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

16

PHPUnit com Selenium WebDriver

Selenium WebDriver é um framework usado para simular interações com

aplicações web em um browser real ou headless

Page 17: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Testes automatizados para ajudar a remover limitações

17

class PedidoWebTest extends PHPUnit_Framework_TestCase { /** * @test * @author Julio */ public function acessarPaginaInicialValidarMensagensDeAlerta() { // Arrange $this->driver = RemoteWebDriver::create("http://localhost:4444/wd/hub", DesiredCapabilities::firefox()); $this->driver->manage()->window()->maximize(); $this->driver->get("http://localhost:8888/qualister-php-testing/web/"); // Act $this->driver->findElement(WebDriverBy::id("order"))->click(); $this->driver->switchTo()->alert()->accept(); $texto = $this->driver->switchTo()->alert()->getText(); $this->driver->switchTo()->alert()->accept(); // Arrange $this->assertContains("Faça login antes", $texto); } }

Page 18: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Muitos frameworks e uma curva de aprendizagem maior

18

Existem muitos frameworks PHP utilizados para automatizar testes, mas cada um deles tem suas características

e uma forma específica de escrita.

Todos eles usam a forma de organização dos testes em linguagem técnica e não

de negócios.

Page 19: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Codeception e sua DSL Jedi

19

Codeception é um framework criado para facilitar a automação de testes em

todas as camadas de um software, escrevendo seguindo o padrão BDD.

Ele possui um DSL própria, muito simples de se compreender.

Page 20: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Codeception e sua DSL Jedi

20

<?php $I = new AcceptanceTester($scenario); $I->am('Administrador de uma loja'); $I->wantTo('gerenciar movimentações'); $I->lookForwardTo('Ver, de forma simples, as entradas e saídas de valores');

$I->amOnPage('/'); $I->fillField('usuariologin', 'teste'); $I->fillField('usuariosenha', '123'); $I->click('Entrar'); $I->click('Movimentações'); $I->click('Nova movimentação'); $I->selectOption("select", "Entrada"); $I->fillField('movimentacaovalor', '500,00'); $I->fillField('movimentacaoitens', 'Almoçar'); $I->click('Gravar'); $I->see('Sucesso ao inserir a movimentação'); ?>

Page 21: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Codeception e sua DSL Jedi

21

Para usar o Codeception basta baixar o arquivo codecept.phar e adiciona-lo na raiz do diretório do projeto, no nosso

caso, "PHPConferenceBr".

E então rodar o comando "php codecept.phar bootstrap" para

criar a arquitetura inicial.

Page 22: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de unidade

22

Automatizando testes de unidade com Codeception

Page 23: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de unidade

23

1. Execute o comando "php codecept.phar generate:test unit Pedido" para criar uma classe de teste de unidade chamada "PedidoTest.php";

2. Adicione os requires às classes que serão testadas: require './src/Pedido.php'; require './src/PedidoServicos.php';

3. Adicione os comandos abaixo no PedidoTest.php contido na pasta tests/unit:

Page 24: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de unidade

24

public function testAdicionarProdutoNoPedidoValidarQueFoiAdicionado() { // Arrange $pedido = new Pedido(); $pedidoServicos = \Codeception\Util\Stub::make('PedidoServicos', ['salvar' => 'Sucesso']); // Act $resposta = $pedidoServicos->salvar($pedido); // Assert $this->tester->assertEquals('Sucesso', $resposta); }

4. Execute-o digitando o comando "php codecept.phar run unit".

Page 25: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de API

25

Automatizando testes de API com Codeception

Page 26: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de API

26

1. Execute o comando "php codecept.phar generate:suite api" para gerar a suite de API 2. Adicione as configurações dos testes de API no arquivo api.suite.yml: class_name: ApiTester modules: enabled: - REST: url: 'http://localhost:8888/qualister-php-testing/api' depends: PhpBrowser 3. Execute o comando "php codecept.phar build" para que o projeto seja atualizado e construídas as dependências referentes à suite de APIs 4. Execute o comando "php codecept.phar generate:cept api NovoPedido" para criar um teste de API

Page 27: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes de API

27

5. Adicione os comandos abaixo no NovoPedidoCept.php contido na pasta tests/api: <?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']); ?> 6. Execute-o digitando o comando "php codecept.phar run api --steps".

Page 28: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes Aceitação Web

28

Automatizando testes de Aceitação Web com

Codeception

Page 29: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes Aceitação Web

29

1. Execute o comando "php codecept.phar generate:cept acceptance NovoPedido" para criar um teste de aceitação web

2. Adicione as configurações dos testes de Aceitação no arquivo acceptance.suite.yml: class_name: AcceptanceTester modules: enabled: - PhpBrowser: url: 'http://localhost:8888/qualister-php-testing/web' - \Helper\Acceptance

Page 30: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes Aceitação Web

30

3. Adicione os comandos abaixo no NovoPedidoCept.php contido na pasta tests/acceptance: <?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'); ?> 4. Execute-o digitando o comando "php codecept.phar run acceptance --steps".

Page 31: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes Aceitação Web

31

É possível também executar os testes utilizando browsers reais, ao invés de utilizar testes com browsers headless,

neste caso, usa-se o Selenium WebDriver para executar tal ação, veja os passos a

seguir.

Page 32: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Automatizando testes Aceitação Web

32

1. Baixe o Selenium Server Standalone em https://selenium-release.storage.googleapis.com/index.html?path=2.46/ e mova-o para a pasta "bin" dentro do projeto2. Starte o Selenium Server usando o comando "java -jar bin/selenium-server-standalone-2.46.0.jar"

3. Altera as configurações dos testes de Aceitação no arquivo acceptance.suite.yml: class_name: AcceptanceTester modules: enabled: - WebDriver: url: 'http://localhost:8888/qualister-php-testing/web' browser: firefox window_size: maximize - \Helper\Acceptance

4. Execute-o digitando o comando "php codecept.phar run acceptance --steps".

Page 33: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

Executando todos os testes e gerando relatórios

33

Executando todos os testes e gerando relatórios:

php codecept.phar run --html

Page 34: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

34

Links interessantes

Page 35: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

35

• https://github.com/sebastianbergmann/phpunit• https://github.com/guzzle/guzzle• https://github.com/facebook/php-webdriver• http://codeception.com/• http://www.qualister.com.br/videos/tdc2015-hands-on-de-automacao-de-testes-de-unidade-api-e-aceitacao-com-codeception

Referências

Page 36: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

36

PHPSP + Pub

Page 37: [PHPConferenceBR] Automação de testes com Codeception

www.qualister.com.brwww.qualister.com.br

Texto do Título

• Nível de Corpo Um– Nível de Corpo Dois

• Nível de Corpo Três– Nível de Corpo Quatro

» Nível de Corpo Cinco

37