Presentation on theme: "PHP, QA, and Jenkins Eric Cope June 25, 2013"— Presentation transcript:
PHP, QA, and Jenkins Eric Cope June 25, 2013 http://voltampmedia.com
About Me I run Voltamp Media Inc., a 1-man web-dev shop PHP-literate since 2002 CodeIgniter since 2005 (1.6 whenever that was) Bitten by the TDD bug around 2006 Met Hudson/Jenkins in 2011
The Tools Jenkins - http://jenkins-ci.orghttp://jenkins-ci.org – Continuous Integration Tool – Basic install is a quick download then: java –jar jenkins.war Normal vs. LTS – For bigger installations, its recommended to run within a java container, like Tomcat. PHPUnit – http://phpqatools.org – A set of QA tools – Installation is via PEAR Selenium – http://seleniumhq.org/http://seleniumhq.org/ – java -jar selenium-server-standalone-2.31.0.jar
Getting Started Open a browser to: – http://localhost:8080
Managing Jenkins File System Location – Config files – Project build areas – Manage plugins Start from here - http://jenkins-php.org/http://jenkins-php.org/ Get the plugins Static Code Analysis Plug-insClover PHP PluginPlot plugin DRY PluginCheckstyle PluginPMD Plugin Git PluginHTML Publisher PluginxUnit Plugin
The First Job Each job must be configured! – Source Code – how to get the code – Build triggers (poll SCM, commit hooks) – Build Steps Scripts (very limited environment) Maven Ant – see http://jenkins-php.org/ for yours!http://jenkins-php.org/ – Post Build Steps Plots, reports
The ANT Script This is auto-generated, then modified as needed Test by running: % ant /path/to/build.xml More at http://ant.apache.or g
The PHPUnit Script This is auto-generated, then modified as needed too Test by running: % phpunit
PHPUnit Tips and Tricks - fixtures YAML files can be used within a fixture
PHPUnit Tips and Tricks – data providers YAML files can be used as a data provider too – Calls the provider (returns an array) – For each row it calls the test The YAML is different!
PHPUnit Tips and Tricks – Exceptions Test your exceptions! Check exception class and code
Bonus! PHPUnit and Selenium Make Jenkins drive PHPUnit drive Selenium!
My Issues - controller My current projects use CodeIgniter. CIUnit makes using PHPUnit and CI better, but setup is painful. – End case of parent controller Correct parent class in setUp, but not in the testMethod! MY_Controller vs. Controller – $this->CI = set_controller('MY_Controller');
My Issues - Selenium Selenium has matured quite a bit, but documentation and support is still very lean. PHPUnit’s Selenium2 class is much better, but still leaves much to be desired. – Click() does not wait for the page to load after a form submission. Selenese supported clickandwait(), but I can’t find documentation… – https://github.com/sebastianbergmann/phpunit- selenium/blob/master/Tests/Selenium2TestCaseTest.p hp https://github.com/sebastianbergmann/phpunit- selenium/blob/master/Tests/Selenium2TestCaseTest.p hp – http://stackoverflow.com/questions/9102505/phpunit -with-selenium
Still to Learn/Do Mocks Dependency Injection Code Coverage DRY-er! More Integration coverage with Selenium Exclude External Libraries in analysis || fix them! Better TDD / BDD