PHP, QA, and Jenkins

utahcokeServers

Nov 17, 2013 (3 years and 11 months ago)

81 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


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


Static Code Analysis Plug
-
ins

Clover PHP Plugin

Plot plugin

DRY Plugin

Checkstyle Plugin

PMD Plugin

Git Plugin

HTML Publisher Plugin

xUnit 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!


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


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