Prepare for PHP Test Fest 2009

PHPBelgium
PHPBelgiumPHP community in Belgium at PHPBelgium
Preparing for
        PHP TestFest 2009


by Felix De Vliegher and Michelangelo van Dam
Welcome to PHP Test Fest 2009 !
• What is PHP Test Fest ?
 – improving code coverage of the PHP interpreter by
   writing tests
 – opportunity to learn how to write tests in a group/
   workshop like environment
 – your chance to contribute back to the PHP
   community !




                                                         2
Prerequisites
• preferable a Linux version
  – virtual machine
  – core OS
• with gcc and gcov (see next slide for details)
• for testing coverages
  – gcov
  – lcov (version 1.5 or 1.6)
• php 5.3
  – from CVS (see next slide)
• text editor like vi(m), textpad, pico, ...


                                                   3
Tools needed for PHP builds
• gcc: 3.4+ (with gcov)
Source: http://wiki.php.net/doc/articles/writing-tests


•   autoconf: 2.13
•   automake: 1.4+
•   libtool: 1.4.x+ (except 1.4.2)
•   bison: 1.28, 1.35, 1.75, 2.0 or higher
•   flex: 2.5.4 (not higher)
•   re2c: 0.9.11+ (0.12.0+ for HEAD)
Source: http://www.php.net/anoncvs.php




                                                         4
Getting lcov
• apt
 – apt-get install lcov
• CSV
 – cvs -
   d:pserver:anonymous@ltp.cvs.sourceforge.net:/
   cvsroot/ltp login
 – cvs -z3 -
   d:pserver:anonymous@ltp.cvs.sourceforge.net:/
   cvsroot/ltp co -r LCOV_1_6 -P utils/analysis/lcov
• RPM
 – lcov-1.6-2.noarch.rpm



                                                       5
Getting the latest PHP 5.3
Choose a development environment
$   cd ~/src/php/
$   cvs -d :pserver:cvsread@cvs.php.net:/repository checkout -
r   PHP_5_3 php5
$   cd php5


Build a configure for your current version
$ ./buildconf

Run the configuration
$ ./configure --enable-gcov
choose --enable-gcov for code coverage reporting

make & make test & make lcov
$ make
$ make test
$ make lcov TESTS=tests/*




                                                                 6
Code coverage report




http://gcov.php.net or in your /path/to/php5/lcov_html directory




                                                                   7
Writing Tests
• What are phpt Tests ?
  Files ending with .phpt are test files
  containing a single test
• What skills do I need to write phpt tests ?
  – basic knowledge of PHP
  – a text editor like vi(m), pico, notepad, textpad, ...
  – a way to get results of your test code
• Where can I find more info about phpt ?
  http://phpt.info




                                                            8
Naming conventions
• Tests for bugs
  – bug<bugid>.phpt (bug17123.phpt)
• Tests for a function’s basic behaviour
  – <functionname>_basic.phpt (dba_open_basic.phpt)
• Tests for a function’s error behaviour
  – <functionname>_error.phpt (dba_open_error.phpt)
• Tests for variations in a function’s behaviour
  – <functionname>_variation.phpt (dba_open_variation.phpt)
• General tests for extensions
  – <extname>_<no>.phpt (dba_003.phpt)



                                                              9
Basic format
--TEST--
Hello World
--FILE--
Hello World
--EXPECT--
Hello World




                             10
Test, File and Expect
--TEST--
Hello World
--FILE--
<?php echo ‘Hello World’; ?>
--EXPECT--
Hello World




                                    11
Testing Errors
--TEST--
Hello World
--FILE--
<?php echo ‘Hello World
--EXPECTF--
Parse Error: syntax error, unexpected $end in %s.php on line
%d




                                                               12
Testing Errors with expectregex
--TEST--
Hello World
--FILE--
<?php echo ‘Hello World
--EXPECTREGEX--
Parse Error: (parse|syntax) error, unexpected $end in .*
ON .*




                                                           13
Cleaning up
--TEST--
This will remove temporary files
--FILE--
<?php
$temp_filename = dirname(__FILE__) . '/foo.tmp';
$fp = fopen($temp_filename, 'w');
fwrite($fp, 'bar');
fclose($fp);
?>
--CLEAN--
<?php
$temp_filename = dirname(__FILE__) . '/foo.tmp';
unlink($temp_filename);
?>
--EXPECT--




                                                   14
Conditional Testing
--TEST--
Check for 64bit platform
--SKIPIF--
<?php
if (PHP_INT_SIZE != 8) die('64bit platforms only');
?>
--FILE--
--EXPECT--




                                                      15
Don’t forget the credits
--TEST--
A test with a CREDITS section
--CREDITS--
John Doe <john.doe@example.com>
#testfest PHPBelgium 2009-05-09
--FILE--
--EXPECT--




                                     16
Running your test




make test TESTS=/path/to/php5/ext/yourextension/tests




                                                        17
Resources
• TestFest
  http://qa.php.net/testfest.php
• PHP Quality Assurance Team
  http://qa.php.net/
• PHP: Test and Code Coverage Analysis
  http://gcov.php.net/
• Complete ./configure example
  http://gcov.php.net/viewer.php?
  version=PHP_5_3&func=system




                                         18
Let PHP Test Fest begin !


    Thank you for your interest !
  Your work will be appreciated !!!

        Slides are available on
http://www.slideshare.net/PHPBelgium




                                       19
Proudly sponsored




                    20
1 of 20

Recommended

LTPLTP
LTPCaspar Zhang
1.1K views14 slides
Test Fest 2009Test Fest 2009
Test Fest 2009Pierre Joye
1.4K views19 slides
Testing ToolboxTesting Toolbox
Testing ToolboxMichael Peters
2.2K views29 slides
tittit
titChristian Heinrich
1.9K views21 slides

More Related Content

What's hot(20)

skipfishskipfish
skipfish
Christian Heinrich4.3K views
Presentation_C++UnitTestPresentation_C++UnitTest
Presentation_C++UnitTest
Raihan Masud270 views
Getting started with PHPUnitGetting started with PHPUnit
Getting started with PHPUnit
Khyati Gala267 views
Cell processor labCell processor lab
Cell processor lab
coolmirza143295 views
Gcc optGcc opt
Gcc opt
Mark Veltzer2K views
Who’s afraid of WinDbgWho’s afraid of WinDbg
Who’s afraid of WinDbg
Dror Helper1.9K views
Zend Framework 2 - PHPUnitZend Framework 2 - PHPUnit
Zend Framework 2 - PHPUnit
Tarun Kumar Singhal3.4K views
Python Programming Essentials - M28 - Debugging with pdbPython Programming Essentials - M28 - Debugging with pdb
Python Programming Essentials - M28 - Debugging with pdb
P3 InfoTech Solutions Pvt. Ltd.812 views
Rcpp11Rcpp11
Rcpp11
Romain Francois1.5K views
Os CookOs Cook
Os Cook
oscon2007823 views
Makefiles BioinfoMakefiles Bioinfo
Makefiles Bioinfo
Giovanni Marco Dall'Olio4.1K views
Unit testing symfony plugins with php unitUnit testing symfony plugins with php unit
Unit testing symfony plugins with php unit
Christian Schaefer4.2K views
Adpatch optionsAdpatch options
Adpatch options
Deepti Singh1.9K views

Similar to Prepare for PHP Test Fest 2009(20)

第1回PHP拡張勉強会第1回PHP拡張勉強会
第1回PHP拡張勉強会
Ippei Ogiwara2.2K views
CLI, the other SAPICLI, the other SAPI
CLI, the other SAPI
Combell NV4.7K views
Becoming A Php NinjaBecoming A Php Ninja
Becoming A Php Ninja
Mohammad Emran Hasan4K views
Api DesignApi Design
Api Design
sumithra jonnalagadda593 views
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
Rowan Merewood25.3K views
PHPNW Test Fest Pre-presentationPHPNW Test Fest Pre-presentation
PHPNW Test Fest Pre-presentation
Lorna Mitchell474 views
 php & performance php & performance
php & performance
simon84104.1K views
PHP & PerformancePHP & Performance
PHP & Performance
毅 吕1.3K views
DevOps in PHP environment DevOps in PHP environment
DevOps in PHP environment
Evaldo Felipe160 views
Continuous Quality AssuranceContinuous Quality Assurance
Continuous Quality Assurance
Michelangelo van Dam6K views
What's new with PHP7What's new with PHP7
What's new with PHP7
SWIFTotter Solutions872 views
Phalcon 2 - PHP Brazil ConferencePhalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil Conference
Jackson F. de A. Mafra1.2K views
TestTest
Test
Eddie Kao790 views
Php through the eyes of a hosterPhp through the eyes of a hoster
Php through the eyes of a hoster
Combell NV1.2K views
TipsTips
Tips
mclee751 views

Recently uploaded(8)

Barcelona.pdfBarcelona.pdf
Barcelona.pdf
Fundacja Rozwoju Społeczeństwa Przedsiębiorczego10 views
Learning Transfer.pptxLearning Transfer.pptx
Learning Transfer.pptx
linzi138 views
Fundamental of FinanceFundamental of Finance
Fundamental of Finance
Bibhudutta Tripathy 7 views
Personal Presentation.pdfPersonal Presentation.pdf
Personal Presentation.pdf
VictoriaGonzalez9284295 views
Personal Presentation.pdfPersonal Presentation.pdf
Personal Presentation.pdf
VictoriaGonzalez9284298 views
suman ppt.pptxsuman ppt.pptx
suman ppt.pptx
Rajkumaryadav28737012 views
Work-Life Balance Self-AssessmentWork-Life Balance Self-Assessment
Work-Life Balance Self-Assessment
MindGoals.org8 views

Prepare for PHP Test Fest 2009

  • 1. Preparing for PHP TestFest 2009 by Felix De Vliegher and Michelangelo van Dam
  • 2. Welcome to PHP Test Fest 2009 ! • What is PHP Test Fest ? – improving code coverage of the PHP interpreter by writing tests – opportunity to learn how to write tests in a group/ workshop like environment – your chance to contribute back to the PHP community ! 2
  • 3. Prerequisites • preferable a Linux version – virtual machine – core OS • with gcc and gcov (see next slide for details) • for testing coverages – gcov – lcov (version 1.5 or 1.6) • php 5.3 – from CVS (see next slide) • text editor like vi(m), textpad, pico, ... 3
  • 4. Tools needed for PHP builds • gcc: 3.4+ (with gcov) Source: http://wiki.php.net/doc/articles/writing-tests • autoconf: 2.13 • automake: 1.4+ • libtool: 1.4.x+ (except 1.4.2) • bison: 1.28, 1.35, 1.75, 2.0 or higher • flex: 2.5.4 (not higher) • re2c: 0.9.11+ (0.12.0+ for HEAD) Source: http://www.php.net/anoncvs.php 4
  • 5. Getting lcov • apt – apt-get install lcov • CSV – cvs - d:pserver:anonymous@ltp.cvs.sourceforge.net:/ cvsroot/ltp login – cvs -z3 - d:pserver:anonymous@ltp.cvs.sourceforge.net:/ cvsroot/ltp co -r LCOV_1_6 -P utils/analysis/lcov • RPM – lcov-1.6-2.noarch.rpm 5
  • 6. Getting the latest PHP 5.3 Choose a development environment $ cd ~/src/php/ $ cvs -d :pserver:cvsread@cvs.php.net:/repository checkout - r PHP_5_3 php5 $ cd php5 Build a configure for your current version $ ./buildconf Run the configuration $ ./configure --enable-gcov choose --enable-gcov for code coverage reporting make & make test & make lcov $ make $ make test $ make lcov TESTS=tests/* 6
  • 7. Code coverage report http://gcov.php.net or in your /path/to/php5/lcov_html directory 7
  • 8. Writing Tests • What are phpt Tests ? Files ending with .phpt are test files containing a single test • What skills do I need to write phpt tests ? – basic knowledge of PHP – a text editor like vi(m), pico, notepad, textpad, ... – a way to get results of your test code • Where can I find more info about phpt ? http://phpt.info 8
  • 9. Naming conventions • Tests for bugs – bug<bugid>.phpt (bug17123.phpt) • Tests for a function’s basic behaviour – <functionname>_basic.phpt (dba_open_basic.phpt) • Tests for a function’s error behaviour – <functionname>_error.phpt (dba_open_error.phpt) • Tests for variations in a function’s behaviour – <functionname>_variation.phpt (dba_open_variation.phpt) • General tests for extensions – <extname>_<no>.phpt (dba_003.phpt) 9
  • 10. Basic format --TEST-- Hello World --FILE-- Hello World --EXPECT-- Hello World 10
  • 11. Test, File and Expect --TEST-- Hello World --FILE-- <?php echo ‘Hello World’; ?> --EXPECT-- Hello World 11
  • 12. Testing Errors --TEST-- Hello World --FILE-- <?php echo ‘Hello World --EXPECTF-- Parse Error: syntax error, unexpected $end in %s.php on line %d 12
  • 13. Testing Errors with expectregex --TEST-- Hello World --FILE-- <?php echo ‘Hello World --EXPECTREGEX-- Parse Error: (parse|syntax) error, unexpected $end in .* ON .* 13
  • 14. Cleaning up --TEST-- This will remove temporary files --FILE-- <?php $temp_filename = dirname(__FILE__) . '/foo.tmp'; $fp = fopen($temp_filename, 'w'); fwrite($fp, 'bar'); fclose($fp); ?> --CLEAN-- <?php $temp_filename = dirname(__FILE__) . '/foo.tmp'; unlink($temp_filename); ?> --EXPECT-- 14
  • 15. Conditional Testing --TEST-- Check for 64bit platform --SKIPIF-- <?php if (PHP_INT_SIZE != 8) die('64bit platforms only'); ?> --FILE-- --EXPECT-- 15
  • 16. Don’t forget the credits --TEST-- A test with a CREDITS section --CREDITS-- John Doe <john.doe@example.com> #testfest PHPBelgium 2009-05-09 --FILE-- --EXPECT-- 16
  • 17. Running your test make test TESTS=/path/to/php5/ext/yourextension/tests 17
  • 18. Resources • TestFest http://qa.php.net/testfest.php • PHP Quality Assurance Team http://qa.php.net/ • PHP: Test and Code Coverage Analysis http://gcov.php.net/ • Complete ./configure example http://gcov.php.net/viewer.php? version=PHP_5_3&func=system 18
  • 19. Let PHP Test Fest begin ! Thank you for your interest ! Your work will be appreciated !!! Slides are available on http://www.slideshare.net/PHPBelgium 19

Editor's Notes