150 likes | 327 Views
PHP, QA, and Jenkins Eric Cope. June 25, 2013 http:// voltampmedia.com. About M e. 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.
E N D
PHP, QA, and JenkinsEric 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.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/ • 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/ • Get the plugins
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! • 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.org
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.php • 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