Vamos testar o PHP?

Felipe Limeira
Training Center
Published in
5 min readAug 27, 2017
Mascote do PHP TestFest.

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.

git clone https://github.com/herdphp/docker-phpqa.git

  • 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

--

--