nas aplicações que poderiam ser evitados através de testes funcionais, de aceitação ou de API. Além dos testes unitários. • Maior número de bugs = Maior tempo gasto pelos funcionários para solucioná-los = Menor faturamento; • A empresa possui várias aplicações em frameworks diferentes. Contexto • A empresa não possui ou contrato não comporta equipe de teste; • Os testes são feitos por programadores que desenvolvem as funcionalidades; • Funcionários mais preocupados com produção que qualidade; • Funcionalidades possuem alterações que podem causar erros inesperados na aplicação; Declaração do problema • Bugs na aplicação causa retrabalho para a equipe de desenvolvimento; • Diminui a credibilidade da empresa/equipe por parte do cliente; • Causa transtornos e situações desagradáveis; • Por serem soluções geralmente rápidas, possui maior probabilidade de gambiarras no código;
e compartilha as melhores práticas e soluções para testar aplicações web com PHP e Javascript; • Com um conjunto flexível de módulos inclusos, os testes ficam fáceis de escrever, fáceis de usar e fáceis de manter; • Incentiva os desenvolvedores e os engenheiros de QA a concentrar-se no teste e não na construção de um conjunto de testes; • Utiliza o ponto de vista de usuário para testes de aceitação. Cada comando é descrito como a ação de um usuário que utiliza o site; • Controla o browser em tempo real. Toda ação é descrita em um shell interativo; • Fornece teste unitário, BDD, teste de API (REST ou SOAP), Integração e funcional;
Download: wget https://codeception.com/codecept.phar Execute como: php codecept.phar Setup codecept bootstrap Este comando cria o arquivo de configuração codeception.yml e a estrutura básica do diretório de testes. As suítes de teste de aceitação, funcional, unitário são criadas também. Setups simplificados: codecept init acceptance / codecept init api / codecept init unit
com os seguintes sufixos: • Cept - (default) Este formato é utilizado para um cenário simples e válido de teste; • Cest - Combina testes baseados em cenários com programação orientada à objetos (OOP); • Test - Formato padrão utilizado por testes unitários; Sintaxe: Suítes - São grupos independentes de teste com um propósito comum; Actions - Começam com algum verbo em inglês, como “click” ou “fill”; Assertions - Sempre começam com os verbos em inglês “see” ou “dontSee”; Grabbers - Apenas lê algo da tela, sem processar. Utilizado em variáveis para se guardar algum retorno; Actors - Representa o usuário que está executando o teste;
testes, execute o comando: php codecept generate:cept api CreateUser Este comando criará o arquivo CreateUserCept.php. Como demonstrado na parte de código abaixo: <?php $I = new ApiTester($scenario); $I->wantTo('create a user via API' ); $I->amHttpAuthenticated ('service_user', '123456'); $I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded' ); $I->sendPOST('/users', ['name' => 'davert', 'email' => '[email protected]' ]); $I->seeResponseCodeIs (\Codeception\Util\HttpCode ::OK); // 200 $I->seeResponseIsJson (); $I->seeResponseContains ('{"result":"ok"}' );
Inicie o CodeceptJS com o seguinte comando: codeceptjs init. Este comando cria o arquivo de configuração codecept.js. Durante a inicialização são feitas algumas perguntas como: local do projeto, Helper a ser utilizado, pasta de logs e se deseja customizar o arquivo steps_file.js. Como no exemplo abaixo: ? What helpers do you want to use? ❯◉ WebDriverIO ◯ Protractor ◯ Puppeteer ◯ Appium ◯ Nightmare ◯ FileSystem
gerar a classe de teste automaticamente. Abaixo está um exemplo da classe criada por este comando: Feature('My First Test'); Scenario('test something', (I) => { }); Execute o teste com o seguinte comando: codecept run --steps. OBS: É necessário fazer a instalação do Helper e suas dependências que será utilizado. Por exemplo, se for usar o selenium é necessário rodar os seguintes comandos antes dos testes: [sudo] npm install -g selenium-standalone selenium-standalone install selenium-standalone start
testes funcionais, de integração, api, etc; ➔ É exigido uma pequena curva de aprendizagem para obter o conhecimento de seus módulos e funcionamento interno para que se tenha um bom aproveitamento; ➔ Os métodos por ele utilizado são bem intuitivos, o que facilita a curva de aprendizagem; ➔ A quantidade de ferramentas e opções de testes, além da facilidade e praticidade do seu uso com diversos frameworks php e js facilitam no caso de uma possível migração;