Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Azphp phpunit-jenkins


Published on

A brief Introduction to PHP QA using PHPUnit, Selenium and Jenkins.

Published in: Technology
  • Be the first to comment

Azphp phpunit-jenkins

  1. 1. PHP, QA, and JenkinsEric CopeJune 25, 2013
  2. 2. About Me• I run Voltamp Media Inc., a 1-man web-devshop• PHP-literate since 2002• CodeIgniter since 2005 (1.6 whenever thatwas)• Bitten by the TDD bug around 2006• Met Hudson/Jenkins in 2011
  3. 3. The Tools• Jenkins -– 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 ajava container, like Tomcat.• PHPUnit –– A set of QA tools– Installation is via PEAR• Selenium –– java -jar selenium-server-standalone-2.31.0.jar
  4. 4. Getting Started• Open a browser to:– http://localhost:8080
  5. 5. Managing Jenkins• File System Location– Config files– Project build areas– Manage plugins• Start from here -• Get the pluginsStatic Code Analysis Plug-ins Clover PHP Plugin Plot pluginDRY Plugin Checkstyle Plugin PMD PluginGit Plugin HTML Publisher Plugin xUnit Plugin
  6. 6. 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 for yours!– Post Build Steps• Plots, reports
  7. 7. The ANT Script• This is auto-generated,then modified asneeded• Test by running:% ant /path/to/build.xml• More at
  8. 8. The PHPUnit Script• This is auto-generated, then modified as needed too• Test by running: % phpunit
  9. 9. PHPUnit Tips and Tricks - fixtures• YAML files can be used within a fixture
  10. 10. PHPUnit Tips and Tricks – dataproviders• YAML files canbe used as adata providertoo– Calls the provider(returns an array)– For each row it calls thetest• The YAML isdifferent!
  11. 11. PHPUnit Tips and Tricks – Exceptions• Test your exceptions!• Check exception class and code
  12. 12. Bonus! PHPUnit and Selenium• Make Jenkins drive PHPUnit drive Selenium!
  13. 13. My Issues - controller• My current projects use CodeIgniter. CIUnitmakes using PHPUnit and CI better, but setupis painful.– End case of parent controller• Correct parent class in setUp, but not in thetestMethod!• MY_Controller vs. Controller– $this->CI = set_controller(MY_Controller);
  14. 14. My Issues - Selenium• Selenium has matured quite a bit, butdocumentation and support is still very lean.• PHPUnit’s Selenium2 class is much better, but stillleaves much to be desired.– Click() does not wait for the page to load after a formsubmission. Selenese supported clickandwait(), but Ican’t find documentation…––
  15. 15. Still to Learn/Do• Mocks• Dependency Injection• Code Coverage• DRY-er!• More Integration coverage with Selenium• Exclude External Libraries in analysis || fixthem!• Better TDD / BDD