Upload
qualister
View
308
Download
0
Embed Size (px)
Citation preview
(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.
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
(48) 3285-5615
twitter.com/qualister
facebook.com/qualister
linkedin.com/company/qualister
Feedback: joind.in/14851