PHPT

23
PHPT PHPMS Conf 2012

description

Criando testes para a linguagem PHP

Transcript of PHPT

Page 1: PHPT

PHPTPHPMS Conf 2012

Page 2: PHPT

IVAN ROSOLEN@ivanrosolen

http://about.me/ivanrosolen

Co-fundador do PHPSP

Equipe de inovação da ARIZONADesenvolvedor 10+ anos

Page 3: PHPT

PHPT• Apenas um teste por aquivo .phpt

• Testes executados em processos separados

• Diferentes configurações do PHP para cada teste

Page 4: PHPT

• Bugs - bug<id>.phpt

• Funções Comportamento básico - <nomedafuncao>_basic.phpt Erro - <nomedafuncao>_error.phpt Variações - <nomedafuncao>_variation.phpt

• Extensões - <nomedaextensao><numero>.phpt

Nomenclatura

Page 5: PHPT

--TEST-- Uma linha para descrever o teste

--FILE-- código PHP (isso mesmo PHP!)

--EXPECT--Resultado esperado (acerto ou erro)

Seções Obrigatórias

Page 6: PHPT

--TEST-- [--DESCRIPTION--]

[--CREDITS--] [--SKIPIF--]

[--REQUEST--] [--POST-- | --PUT-- | --POST_RAW-- | --GZIP_POST-- | --DEFLATE_POST-- | --GET--]

[--COOKIE--] [--STDIN--]

[--INI--] [--ARGS--] [--ENV--]

--FILE-- | --FILEEOF-- | --FILE_EXTERNAL-- | --REDIRECTTEST-- [--HEADERS--]

[--CGI--] [--XFAIL--]

[--EXPECTHEADERS--]--EXPECT-- | --EXPECTF-- | --EXPECTREGEX--

[--CLEAN--]

Page 7: PHPT

--EXPECTF--%s string

%d number

%c single char

%w whitespace

%i integer

%f floats

%x hexadecimal

%e directory sep.

Page 8: PHPT

Baixar o source da versão do PHP desejada

./configure (com parâmetros necessários)make

Como Fazer

make test

tar -xvf php-5.4.5.tar.gz

Page 9: PHPT

make test TESTS=diretorio/

Testando

make test TESTS=diretorio/*.phpt

make test TESTS=diretorio/nome.phpt

Teoricamente .zip do PHP win roda os testes com o php.exenmake test

Page 10: PHPT

Exemplos

Page 11: PHPT

--TEST--Xuplau--FILE--<?php echo 'Xuplau’; ?>--EXPECT--Xuplau

Page 12: PHPT

--TEST--Xuplau Error--FILE--<?php echo 'Xuplau--EXPECTF--Parse error: syntax error, unexpected '%s' (T_ENCAPSED_AND_WHITESPACE) in %s.php on line %d

Page 13: PHPT

--TEST--Xuplau Error--FILE--<?php echo 'Xuplau--EXPECTREGEX--Parse error: (syntax|parse) error, unexpected .* \(T_ENCAPSED_AND_WHITESPACE\) in .* on line \d

Page 14: PHPT

--TEST--Apagar TMP Files--FILE--<?php$tmp = dirname(__FILE__) . '/foo.tmp';$fp = fopen($tmp, 'w');fwrite($fp, 'bar');fclose($fp);?>--CLEAN--<?php$tmp = dirname(__FILE__) . '/foo.tmp';unlink($tmp)?>--EXPECT--

Page 15: PHPT

--TEST--Skipif teste!--SKIPIF--<?phpif ( substr(PHP_OS, 0, 3 ) != 'WIN') die('Teste apenas para Unix');?>--FILE----EXPECT--

Page 16: PHPT

--TEST-- Testing imagerectangle() of GD library --CREDITS-- Ivan Rosolen <contato [at] ivanrosolen [dot] com> #testfest PHPSP on 2009-06-30--SKIPIF-- <?php if ( ! extension_loaded('gd') ) die( 'skip GD not present; skipping test' ); ?> --FILE--<?php// Create a image $image = imagecreatetruecolor( 100, 100 );

// Draw a rectangleimagerectangle( $image, 0, 0, 50, 50, imagecolorallocate($image, 255, 255, 255) );

ob_start(); imagepng( $image, null, 9 ); $img = ob_get_contents(); ob_end_clean();

echo md5(base64_encode($img));

?> --EXPECT-- 282aaecfdd50091821d63093d9bb1bb9

Page 17: PHPT

--TEST--Testing wrong param passing imagefilledellipse() of GD library--CREDITS--Ivan Rosolen <contato [at] ivanrosolen [dot] com>#phpsptestfest PHPSP on 2010-05-29--SKIPIF--<?php if (!extension_loaded("gd")) die("skip GD not present");?>--FILE--<?php

// Create a image$image = imagecreatetruecolor(400, 300);

// choose a color for the ellipse$ellipse = imagecolorallocate($image, 255, 255, 255);

// draw the white ellipseimagefilledellipse( 'wrong param', 200, 150, 300, 200, $ellipse);

?>--EXPECTF--Warning: imagefilledellipse() expects parameter 1 to be resource, %s given in %s on line %d

Page 18: PHPT

*.exp

*.log

*.out

*.php

*.phpt

*.sh

Deu erro!

*.diff

Page 19: PHPT

Que Teste eu Faço?

http://gcov.php.net

Page 20: PHPT

PHPT +• Suas extensões

• Seus Projetos

https://github.com/vrana/notorm

Page 21: PHPT

• Clonar git https://github.com/php/php-src

• Pull Request

• Avisar na lista do QA

Quality Assurance list - [email protected]

Enviando Testes

Page 22: PHPT

http://gcov.php.net

http://qa.php.net/write-test.php

Links

https://wiki.php.net/qa/testfest-2010/windows-test-environment

Para Windows ( não testei muito ainda )

http://pastebin.com/PPBr05kQ

http://pastebin.com/CxFtXUwS

http://php.net/mailing-lists.php

Page 23: PHPT

Dúvidas?