Fork me on GitHub

Grupo de desenvolvedores de PHP do estado de São Paulo
Próximos encontros e eventos? Visite a página do PHPSP no Meetup

Como escrever testes .phpt para o php-src – parte 2

Por em em Artigos

Como continuação da série, vamos ver agora como aplicar testes no projeto oficial php-src.
Este é o projeto que cuida do codigo fonte da linguagem php, revisões, novas featutes, merge de branch, aplicações das correções de bugs entre outras coisas.

Vamos contribuir ?

Com certeza se você programa php um certo tempo, já tem uma noção disso.
O php é uma linguagem de programação onde seu código fonte é aberto à comunidade open source,
qualquer pessoa que tenha interesse, pode ir no projeto, baixar o código fonte e estudar, corrigir, alterar e propor melhorias.
Quem cuida do projeto, são voluntários, pessoas como nós que disponibiliza uma parte do seu tempo para commitar alterações, realizar merges de pull request enviados, responder algumas duvidas de bugs abertos entre outras coisas. Existem também os arquitetos chefes, que são ligados à empresa Zend.
Em um projeto deste tamanho e desta proporção e de alcance mundial, existem inúmeras pessoas reportando bugs e criando pull requests a toda hora e todo momento, mas o numero de revisores é muito limitado.
Caso você se considere um programador expert, porque não separar alguns minutos para ajudar o php ficar melhor, lembre-se que você usou-o até hoje para estudar e trabalhar, e contribuir com o projeto, não é nada mais do que dizer, “obrigado” à comunidade open source que trabalhou dias e noites a fio para deixar o projeto em um nível de maturidade tão grande que nos dias de hoje é usado e respeitado por grandes empresas e corporações.

Vamos programar ?

Basicamente, você pode escrever um teste phpt em uma das várias funções php disponíveis.
Você pode escrever um teste sobre uma função da linguagem basicamente falando, (uma função de cadeia de caracteres ou uma função de matriz), ou uma função fornecida pelo dentre as inúmeras extensões do PHP (uma função mysql ou uma função de imagem ou uma função mcrypt).

Você pode descobrir as funções que já tem testes phpt olhando na versão html do repositório git, (ext/standard/testes/é um bom lugar para começar a procurar – embora não todos os testes escritos atualmente estão lá).

Se você olhar para as páginas de gcov você pode ver quais funções têm lotes de testes e que precisa mais, embora estas páginas apenas mostrar quais linhas de código são cobertas pelo teste de casos assim, mesmo se a cobertura fica bem lá pode ser interessante mais testes para escrever – por exemplo, cobrindo casos de erro.

Há também uma tabela que mostra quais funções e métodos são chamados de testes PHPT.
Veja aqui aonde voce pode obter uma lista completa da cobertura geral do gcov.

Já se deseja visualizar testes por função, seja mais especifico para ver se existe algum teste sem cobertura ou se deseja dar manutenção aos testes que falharam e ajudar ao QA php ter testes mais resilientes.

Se quiser agora você consegue ver o Jenkins do projeto php-src e ver como esta o status do projeto e suas respectivas versões.

Como um teste phpt funciona?

Quando um teste é chamado pelo script run_tests.php leva várias partes do arquivo phpt para
nomear e criar um arquivo. php.
Esse arquivo. php é executado em seguida. A saída do arquivo. php é então comparada com uma seção diferente do arquivo phpt.
Se a saída do script “corresponde” a saída fornecida no script phpt – ele passa.

Qual a melhor maneira de escrever um bom teste ?

Basicamente – deve tentar e quebrar a função PHP.
Ele deve verificar não só os parâmetros de funções normais, mas ele também deve verificar casos de uso.
Intencionalmente, gerar um erro é permitido e encorajado.
Após escrever o caso de teste, use de preferencia o phpunit para ver ser o teste esta passando e realize um fork do projeto php-src oficial no github.
Crie uma nova branch e realize o commit da sua branch, vá ao github e clique na opção de fazer de fazer um pull
request, sua submissão devera aparecer aqui.

Uma vez, o pull request enviado, um cara chamado Travis-ci entra em ação, ele é responsavel por verificar se na branch que você enviou as coisas que nela contém não entrarão em conflito como resto já existente no projeto.

Aqui segue um exemplo de uma build gerada pelo Travis-ci que contem erros de uma branch.
Seja paciente, algum core commiter ira avaliar, e verificar se o seu commit está aprovado para ser commitado.

Scripts para gerar relatório de testes

O run-tests.php é a ferramenta padrão para a execução de PHPT testes no núcleo PHP na linha de comando (CLI cenário).
Sempre que os usuários compilam PHP para instalar, eles devem executar ‘make test’,
que corre a execução-Test. php na sua compilação.

o que é PFTT ?

É uma ferramenta de teste de plataforma cruzada para o núcleo do PHP e aplicações desenvolvidas pela Microsoft, principalmente para PHP no Microsoft Windows, Windows Server e Azure.
PFTT abrange o ecossistema PHP e é projetado para a conveniência, a meticulosidade e a velocidade:
PFTT pode executar testes PHPT e PhpUnit através de uma variedade de cenários, incluindo no Apache.

Boas práticas

Ao contrario de outras plataformas, no php é sugerido que cada script seja testado algo em específico,com poucas linhas e que seja o mais objetivo possível.
Não se esqueça de realizar, os commits, criação de branch e as mensagens do pull request em inglês, pois os core commiters do projeto, são dos mais diversos países ao redor do mundo, e o inglês é o que usamos para nos comunicar.

Sobre marcosptf

Eng. de Software e batera freelancer nos finais de semana.

Mais posts de .