[PHPConferenceBR] Automação de testes com Codeception

659 visualizações

Publicada em

Palestra ministrada na @PHPConferenceBR de 2015, evento de comemoração de 10 anos!

Publicada em: Tecnologia
  • Seja o primeiro a comentar

[PHPConferenceBR] Automação de testes com Codeception

  1. 1. www.qualister.com.br (48) 4052-9536 / 9540 contato@qualister.com.br Automação de testes BDD usando Codeception
 
 por Júlio de Lima
 @juliodelimas
  2. 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 (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. julio.lima@qualister.com.br twitter.com/juliodelimas br.linkedin.com/in/juliodelimas goldtips.by/juliodelimas
  3. 3. 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.
  4. 4. 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."
  5. 5. 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"
  6. 6. 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"
  7. 7. 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.
  8. 8. 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.
  9. 9. 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.
  10. 10. 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.
  11. 11. 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
  12. 12. 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
  13. 13. 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]); } }
  14. 14. 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
  15. 15. 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 GuzzleHttpClient( ["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"]); } }
  16. 16. 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
  17. 17. 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); } }
  18. 18. 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.
  19. 19. 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.
  20. 20. 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'); ?>
  21. 21. 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.
  22. 22. 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
  23. 23. 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:
  24. 24. 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 = CodeceptionUtil 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".
  25. 25. 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
  26. 26. 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
  27. 27. 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".
  28. 28. 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
  29. 29. 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' - HelperAcceptance
  30. 30. 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".
  31. 31. 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.
  32. 32. 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 projeto
 
 2. 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 - HelperAcceptance
 4. Execute-o digitando o comando "php codecept.phar run acceptance -- steps".
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. 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

×