Vamos testar o PHP?
Sim, é isso mesmo! Você não leu o título errado. Vamos testar o PHP e suas funcionalidades, não o seu software criado usando PHP.
Inicialmente, pode parecer assustador e extremamente complicado de se fazer, mas é aí que está a “mágica” do PHP. Para você entender melhor o core da linguagem, você não precisa necessariamente saber C ou como funciona o interpretador do PHP. Ou seja, se você já possui experiência ou está dando os primeiros passos na linguagem, você conseguirá ajudar da mesma forma.
Por que seria legal você ajudar a testar o PHP?
Primeiramente, testar a linguagem ajuda a manter a qualidade da mesma e a encontrar possíveis bugs, mas a ideia de realizar testes vai além dessas citadas, a intenção é aproximar os desenvolvedores ainda mais da linguagem, do core e a ajudar a manter o PHP.
Um outro bom motivo, é que quem programa utilizando essa linguagem sabe como é essa relação de amor com o PHP e como sempre queremos melhora-la. Está convencido? Sim? Então vamos cair de cabeça nesse relacionamento.
Preparando o ambiente.
Preparar o ambiente é tão simples quanto fazer os testes, e a primeira coisa que você precisa ter é a versão do PHP que você deseja testar, a segunda é ter o docker-phpqa que irá precisar do Docker instalado na maquina.
- Instale o Docker.
- Faça o download ou clone do repositório herdphp/docker-phpqa.
- Após o download terminar, execute o Docker terminal, que foi instalado juntamente com o Docker, e acesse a pasta do docke-phpqa.
cd caminho/para/o/diretorio/docker-phpqa
- Os testes ficam dentro da pasta phpt e por padrão recomendamos criar uma pasta com o seu nome.
mkdir phpt/seu_nome
Criando o primeiro arquivo de teste (.phpt)
Antes de começar de fato a ver nosso primeiro arquivo de teste, é bom falar um pouco sobre o GCOV e o LCOV.
GCOV é o total geral de cobertura de testes do PHP mostrado pela aplicação, esse total pode ser visualizado no link a seguir http://gcov.php.net/.
LCOV é o número de linhas cobertas por testes no PHP. Essa informação pode ser vistas no link http://gcov.php.net/PHP_HEAD/lcov_html/, nesse link é possível ver também a porcentagem testada de cada cada função.
Por que é interessante ter em mente as informações acima? Porque se você está interessado em contribuir com a cobertura de testes da linguagem e consequentemente com a própria linguagem, é interessante saber quais funções já foram testadas para evitar testes repetitivos.
Porcentagens e suas respectivas aceitações:
low: < 75 % medium: >= 75 % high: >= 90 %
Vamos começar a colocar a mão na massa…
Existem alguns padrões que devem ser seguidos para a criação dos arquivos .phpt, o primeiro é a nomenclatura do arquivo:
- Testes para bugs
bug<bug_id>.phpt (bug17123.phpt) - Testes para o comportamento básico de uma função
<function_name>_basic.phpt (dba_open_basic.phpt) - Testes para o comportamento de erro da função
<function_name>_error.phpt (dba_open_error.phpt) - Testes para variações no comportamento da função
<function_name>_variation.phpt (dba_open_variation.phpt) - Testes gerais para extenções
<ext_name><no>.phpt (dba_003.phpt)
Vamos começar a escrever nosso teste. Inicialmente deve ser criado o arquivo na pasta, com o seu nome seguindo o padrão de nomenclatura acima.
# echo_basic.phpt
--TEST--
echo - basic test for echo language construct
--CREDITS--
Seu Nome <user [at] domain [dot] com>
--FILE--
<?php
echo 'This works ', 'and takes args!';
?>
--EXPECT--
This works and takes args!
— TEST — : Descrição do que está sendo testado.
— CREDITS — : Identificação do autor do teste (opicional).
— FILE — : O código PHP que queremos testar.
— EXPECT — : A saída que o código PHP deve gerar.
— EXPECTF — : Serve para a mesma coisa que o EXPECT, mas para quando ocorre a utilização incorreta, erro. (vou deixar isso mais claro mais adiante)
Para rodar o teste execute o comando a segui:
Windows: ./bin/phpqa.sh run phpt/seu_nome/echo_basic.phpt
Linux: phpqa run phpt/seu_nome/echo_basic.phpt
A saída será:
=====================================================================
Running selected tests.
PASS echo - basic test for echo language construct [/usr/src/phpt/echo_basic.phpt]
=====================================================================
Number of tests : 1 1
Tests skipped : 0 ( 0.0%) --------
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 0 ( 0.0%) ( 0.0%)
Expected fail : 0 ( 0.0%) ( 0.0%)
Tests passed : 1 (100.0%) (100.0%)
---------------------------------------------------------------------
Time taken : 0 seconds
=====================================================================
Show, funcionou. Agora vamos testar um caso de erro. :)
Para esse teste vamos escolher uma outra função, a função será filemtime()
.
# filemtime_error.phpt
--TEST--
filemtime() - test error case
--FILE--
<?php
echo filemtime();
?>
--EXPECTF--
Warning: filemtime() expects exactly 1 parameter, 0 given in %s on line %d
Lembra que eu falei que deixaria mais claro o uso do EXPECTF? Então, ele serve para casos de erro, por esse motivo ele foi utilizado nesse teste.
E a saída deste teste foi:
=====================================================================
Running selected tests.
PASS filemtime() — test error case [/usr/src/phpt/filemtime_error.phpt]
=====================================================================
Number of tests : 1 1
Tests skipped : 0 ( 0.0%) — — — —
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 0 ( 0.0%) ( 0.0%)
Expected fail : 0 ( 0.0%) ( 0.0%)
Tests passed : 1 (100.0%) (100.0%)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Time taken : 0 seconds
=====================================================================
Tudo certo novamente. :)
Existem muitas outras coisas bacanas que podem ser feitas nos testes do PHP, mas com o que foi passado já é possível iniciar seus testes e contribuições com a linguagem.
PHP TestFest 2017
Uma informação muito bacana para quem quer ajudar com os testes e ajudar novas pessoas a contribuir com o PHP, é que em 2017 está acontecendo um evento chamado PHP TestFest, com a intenção de introduzir pessoas aos testes do PHP e ao mesmo tempo aumentar o numero de contribuições.
Para saber mais sobre esse evento e a edição que ira ocorrer no Brasil, acesse https://phptestfestbrasil.github.io/
Duvidas? Crises? Dificuldades? Entre em contato utilizando os meios a segui:
· Meu Twitter: https://twitter.com/lflimeira02
· Meu e-mail: lflimeira02@gmail.com