SlideShare a Scribd company logo
Continuous Testing in PHP 
True North PHP 2014 
Eric Hogue 
@ehogue 
erichogue.ca
Continuous Testing
Wikipedia 
a software development practice that extends 
test-driven development by means of automatic 
test execution in the background. 
http://en.wikipedia.org/wiki/Continuous_test-driven_development
How I Discovered it
Test Driven Development
Repetitive ...
Code Kata
Eureka!
Automate the Automated Tests
Searching
autotest
AutoPHPUnit
Watchr
Guard
Plugins
Installation - Settings
Ruby
Install Ruby With RVM 
$ curl -sSL https://get.rvm.io | bash 
-s stable --ruby 
$ ruby -v 
ruby 2.1.3p242 (2014-09-19 revision 
47630) [x86_64-linux]
RubyGems + Bundler
Gemfile 
source 'https://rubygems.org' 
group :development do 
gem 'guard' 
end
bundle install 
$ bundle install 
Fetching gem metadata from https: 
//rubygems.org/........... 
... 
Installing guard 2.6.1 
Your bundle is complete!
Running Guard 
$ bundle exec guard 
00:53:09 - ERROR - No Guardfile found, 
please create one with `guard init`.
Guardfile
Project root - Guardfile
Home folder - .Guardfile
Home folder - .guard.rb
Guardfile 
notification :off
Guardfile 
notification :off 
guard 'guardname' do 
end
Guardfile 
notification :off 
guard 'guardname', :option => value do 
end
Guardfile 
notification :off 
guard 'guardname', :option => value do 
watch(%r{^regex$}) 
end
Notifications
System Notification
Gemfile 
group :development do 
gem 'libnotify' #Linux 
gem 'growl' #Mac OS 
gem 'rb-notifu' #Windows 
end
Guardfile 
notification :libnotify #Linux 
notification :growl #Mac OS 
notification :notifu #Windows
Terminal Title
Guardfile 
notification :terminal_title
tmux
Guardfile 
notification :tmux, 
display_message: true
No Notifications 
notification :off
PHP Guards
Guard::PHPUnit2
Gemfile 
group :development do 
... 
gem 'guard-phpunit2', :git => 
"https://github.com/EricHogue/guard-phpunit2. 
git" 
end
Guardfile 
guard 'phpunit2', :cli => '--colors', 
:tests_path => 'tests' do 
watch(%r{^tests/.+Test.php$}) 
end
Guardfile 
guard 'phpunit2', :cli => '--colors', 
:tests_path => 'tests' do 
watch(%r{^tests/.+Test.php$}) 
end
Guardfile 
guard 'phpunit2', :cli => '--colors', 
:tests_path => 'tests' do 
watch(%r{^tests/.+Test.php$}) 
end
Guardfile 
guard 'phpunit2', :cli => '--colors', 
:tests_path => 'tests' do 
watch(%r{^tests/.+Test.php$}) 
end
bundle exec guard
Guardfile 
… 
watch(%r{^src/(.+).php$}) { |m| 
"tests/#{m[1]}Test.php" 
}
%r{^src/(.+).php$} 
src/TDD/Factorial.php 
"tests/#{m[1]}Test.php" 
phpunit tests/TDD/FactorialTest.php
:all_on_start 
guard 'phpunit2', :all_on_start => 
true do 
end 
default => true
:tests_path 
guard 'phpunit2', :tests_path => 
'path/to/tests' do 
end 
default => pwd
:all_after_pass 
guard 'phpunit2', :all_after_pass => 
true do 
end 
default => true
:keep_failed 
guard 'phpunit2', :keep_failed => 
true do 
end 
default => true
:command 
guard 'phpunit2', :command => 
'./vendor/bin/phpunit' do 
end 
default => phpunit
:cli 
guard 'phpunit2', 
:cli => '--colors' do 
end 
default => nil
Guard::PHPCS
Gemfile 
group :development do 
... 
gem 'guard-phpcs' 
end
Guardfile 
guard 'phpcs', :standard => 'PSR2', 
:executable => "./vendor/bin/phpcs" 
do 
watch(%r{.*.php$}) 
end
Guardfile 
guard 'phpcs', :standard => 'PSR2', 
:executable => "./vendor/bin/phpcs" 
do 
watch(%r{.*.php$}) 
end
Guardfile 
guard 'phpcs', :standard => 'PSR2', 
:executable => "./vendor/bin/phpcs" 
do 
watch(%r{.*.php$}) 
end
Guardfile 
guard 'phpcs', :standard => 'PSR2', 
:executable => "./vendor/bin/phpcs" 
do 
watch(%r{.*.php$}) 
end
PHPCS - PSR2
Guard::PHPMD
Gemfile 
group :development do 
... 
gem 'guard-phpmd' 
end
Guardfile 
guard 'phpmd', 
:executable => './vendor/bin/phpmd', 
:rules => 'pmd-rules.xml' do 
watch(%r{.*.php$}) 
end
Guardfile 
guard 'phpmd', 
:executable => './vendor/bin/phpmd', 
:rules => 'pmd-rules.xml' do 
watch(%r{.*.php$}) 
end
Guardfile 
guard 'phpmd', 
:executable => './vendor/bin/phpmd', 
:rules => 'pmd-rules.xml' do 
watch(%r{.*.php$}) 
end
pmd-rules.xml 
... 
<rule ref="rulesets/codesize.xml" /> 
<rule ref="rulesets/design.xml" /> 
<rule ref="rulesets/naming.xml" /> 
<rule ref="rulesets/unusedcode.xml" /> 
<rule ref="rulesets/controversial.xml" /> 
...
Guardfile 
guard 'phpmd', 
:executable => './vendor/bin/phpmd', 
:rules => 'pmd-rules.xml' do 
watch(%r{.*.php$}) 
end
PHPMD
Other Guards
More 
More than 200 plugins
JavaScript
Gemfile 
group :development do 
... 
gem 'guard-jasmine' 
end
Guardfile 
guard 'jasmine', :jasmine_url => 'http: 
//localhost:8000/SpecRunner.html' 
... 
end
Guardfile 
guard 'jasmine', :jasmine_url => '', 
:server => :none do 
watch(%r{spec/.+Spec.js$}) 
end
Guardfile 
guard 'jasmine', :jasmine_url => '', 
:server => :none do 
watch(%r{spec/.+Spec.js$}) 
end
Guard::Jasmine
LiveReload
LiveReload
Gemfile 
group :development do 
... 
gem 'guard-livereload' 
end
Guardfile 
guard 'livereload' do 
watch(%r{public/.+.(css|js|html)}) 
end
Guard::Bundler
Gemfile 
group :development do 
... 
gem 'guard-bundler' 
end
Guardfile 
guard :bundler do 
watch('Gemfile') 
end
Guard::Bundler
Guard::Shell
Gemfile 
group :development do 
... 
gem 'guard-shell' 
end
Guardfile 
guard 'shell' do 
watch(%r{^.+.php$}) do |m| 
`php -l #{m[0]}` 
true 
end 
end
Lint check
Guardfile 
`php -l #{m[0]}` 
if ($?.success?) 
n "#{m[0]} correct",'Syntax',:success 
else 
n "#{m[0]} incorrect",'Syntax',:failed 
end
Composer
Guardfile 
guard 'shell' do 
watch("composer.lock") do |m| 
p "Running composer install" 
`composer install` 
… 
end 
end
Composer
Inline Guard
Guardfile 
require 'guard/plugin' 
module ::Guard 
class BehatGuard < ::Guard::Plugin 
end 
end
Guardfile 
def start 
puts 'Run all Behat tests' 
puts `./vendor/bin/behat` 
end
Guardfile 
def run_on_changes(paths) 
paths.each do |file| 
puts `./vendor/bin/behat #{file}` 
end 
end
Guardfile 
guard 'BehatGuard' do 
watch(%r{^features/.+.feature$}) 
end
Behat
PHPUnit 
PHPCS 
PHPMD 
php -l 
composer install 
Jasmine 
LiveReload 
Behat
Automate Your Automated Test
Questions? 
PHP Mentoring: http://phpmentoring.org/ 
Comments: https://joind.in/12709 
twitter: @ehogue 
Blog: http://erichogue.ca/
EndlessTunnel.jpg - Trey Ratcliff - https://www.flickr.com/photos/stuckincustoms/4539732832 
History.jpg - Morten Diesen - http://www.flickr.com/photos/mortendiesen/8091682612 
StreetLights.jpg - William Warby - http://www.flickr.com/photos/wwarby/2460655511 
FadeToGrey.jpg - Andreas Levers - https://www.flickr.com/photos/96dpi/2571056264 
Kata.jpg - ser... ser... - http://www.flickr.com/photos/el_ser_lomo/3267627038 
Archimedes.jpg - Sputnik Beanburger III - https://www.flickr.com/photos/sputnikbeanburgeriii/4690475562/in/photostream/ 
GearWork2.jpg - Curious Expeditions - https://www.flickr.com/photos/curiousexpeditions/489992128 
SARHelicopter.jpg - UK Ministry of Defence - https://www.flickr.com/photos/defenceimages/8695434365 
RelayBox.jpg - Ed Hunsinger - https://www.flickr.com/photos/edrabbit/4698481573 
Ruby.jpg - Joren De Groof - https://www.flickr.com/photos/jorendegroof/4470431763 
RubyGems.png - Linux Screenshots - https://www.flickr.com/photos/xmodulo/14652484443 
Files.jpg - Travis Wise - https://www.flickr.com/photos/photographingtravis/14745936519 
Root.jpg - きうこ - https://www.flickr.com/photos/kiuko/9112281601 
Home.jpg - Warren - https://www.flickr.com/photos/jety/3277812553 
Alarm.jpg - Fabian - https://www.flickr.com/photos/snapsi42/3436162040 
Containers.jpg - www.GlynLowe.com - https://www.flickr.com/photos/glynlowe/10921733615 
Mess.jpg - Moyan Brenn - https://www.flickr.com/photos/aigle_dore/5481297641 
Shells.jpg - Bemep - https://www.flickr.com/photos/40626436@N00/40822551 
DoItYourself.jpg - Vlasta Juricek - https://www.flickr.com/photos/vlastula/3229196769 
Languages.jpg - Valerie Everett - https://www.flickr.com/photos/valeriebb/3008977110 
Javascript.jpg - Nathan Smith - https://www.flickr.com/photos/nathansmith/4704268314 
Stacks.jpg - Roman Boed - https://www.flickr.com/photos/romanboed/13356494013 
js.png - Chris Williams - https://github.com/voodootikigod/logo.js 
AssemblyLine.jpg - Fiat Chrysler Automobiles: Corporate - https://www.flickr.com/photos/chryslergroup/13194222244 
CarCrash.jpg - JaseMan - http://www.flickr.com/photos/bargas/3695903512/

More Related Content

What's hot

Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
ME iBotch
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Zend by Rogue Wave Software
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Puppet
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to productionSean Hess
 
Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013
Puppet
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
Tomohiro MITSUMUNE
 
Docker command
Docker commandDocker command
Docker command
Eric Ahn
 
Docker remote-api
Docker remote-apiDocker remote-api
Docker remote-api
Eric Ahn
 
Node.js basics
Node.js basicsNode.js basics
Node.js basicsBen Lin
 
On UnQLite
On UnQLiteOn UnQLite
On UnQLite
charsbar
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
julien pauli
 
A new way to develop with WordPress!
A new way to develop with WordPress!A new way to develop with WordPress!
A new way to develop with WordPress!
David Sanchez
 
Puppet Camp 2012
Puppet Camp 2012Puppet Camp 2012
Puppet Camp 2012
Server Density
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
Wim Godden
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
charsbar
 
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Hari
 
Php in 2013 (Web-5 2013 conference)
Php in 2013 (Web-5 2013 conference)Php in 2013 (Web-5 2013 conference)
Php in 2013 (Web-5 2013 conference)
julien pauli
 

What's hot (20)

Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
 
Intro django
Intro djangoIntro django
Intro django
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to production
 
Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013Using Puppet to Create a Dynamic Network - PuppetConf 2013
Using Puppet to Create a Dynamic Network - PuppetConf 2013
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
 
Docker command
Docker commandDocker command
Docker command
 
Docker remote-api
Docker remote-apiDocker remote-api
Docker remote-api
 
Node.js basics
Node.js basicsNode.js basics
Node.js basics
 
On UnQLite
On UnQLiteOn UnQLite
On UnQLite
 
EC2
EC2EC2
EC2
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
 
A new way to develop with WordPress!
A new way to develop with WordPress!A new way to develop with WordPress!
A new way to develop with WordPress!
 
Puppet Camp 2012
Puppet Camp 2012Puppet Camp 2012
Puppet Camp 2012
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
 
nginx mod PSGI
nginx mod PSGInginx mod PSGI
nginx mod PSGI
 
2016年のPerl (Long version)
2016年のPerl (Long version)2016年のPerl (Long version)
2016年のPerl (Long version)
 
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
Source Code of Building Linux IPv6 DNS Server (Complete Sourcecode)
 
Php in 2013 (Web-5 2013 conference)
Php in 2013 (Web-5 2013 conference)Php in 2013 (Web-5 2013 conference)
Php in 2013 (Web-5 2013 conference)
 

Similar to Continuous testing In PHP

Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
Michele Orselli
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
Software Guru
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetOmar Reygaert
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
Carlos Sanchez
 
A Continuous Packaging Pipeline
A Continuous Packaging PipelineA Continuous Packaging Pipeline
A Continuous Packaging Pipeline
Maciej Pasternacki
 
Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8
Raja Rozali Raja Hasan
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Herokuronnywang_tw
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011
Michelangelo van Dam
 
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry PiGrâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Jérémy Derussé
 
Git::Hooks
Git::HooksGit::Hooks
Git::Hooks
Mikko Koivunalho
 
Php Power Tools
Php Power ToolsPhp Power Tools
Php Power Tools
Michelangelo van Dam
 
PHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vulnPHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vuln
Sandro Zaccarini
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
Rowan Merewood
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
Puppet
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
Jeff Jones
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 Development
Duke Dao
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newYiwei Ma
 

Similar to Continuous testing In PHP (20)

My name is Trinidad
My name is TrinidadMy name is Trinidad
My name is Trinidad
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
 
Virtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
A Continuous Packaging Pipeline
A Continuous Packaging PipelineA Continuous Packaging Pipeline
A Continuous Packaging Pipeline
 
Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8Installing php 7.4 Nginx Laravel 7.x on Centos 8
Installing php 7.4 Nginx Laravel 7.x on Centos 8
 
2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011
 
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry PiGrâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
 
Git::Hooks
Git::HooksGit::Hooks
Git::Hooks
 
Php Power Tools
Php Power ToolsPhp Power Tools
Php Power Tools
 
PHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vulnPHP Backdoor: The rise of the vuln
PHP Backdoor: The rise of the vuln
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
 
Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!Apache and PHP: Why httpd.conf is your new BFF!
Apache and PHP: Why httpd.conf is your new BFF!
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 Development
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 new
 

More from Eric Hogue

Au secours, mon application est brisée - Ou comment déboguer
Au secours, mon application est brisée - Ou comment déboguerAu secours, mon application est brisée - Ou comment déboguer
Au secours, mon application est brisée - Ou comment déboguer
Eric Hogue
 
Introduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPIntroduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHP
Eric Hogue
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
Eric Hogue
 
Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with Jenkins
Eric Hogue
 
La sécurité des communications avec GPG
La sécurité des communications avec GPGLa sécurité des communications avec GPG
La sécurité des communications avec GPG
Eric Hogue
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
Eric Hogue
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
Eric Hogue
 
Introduction to ci with jenkins
Introduction to ci with jenkinsIntroduction to ci with jenkins
Introduction to ci with jenkins
Eric Hogue
 
Integration continue
Integration continueIntegration continue
Integration continue
Eric Hogue
 

More from Eric Hogue (9)

Au secours, mon application est brisée - Ou comment déboguer
Au secours, mon application est brisée - Ou comment déboguerAu secours, mon application est brisée - Ou comment déboguer
Au secours, mon application est brisée - Ou comment déboguer
 
Introduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPIntroduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHP
 
Introduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec JenkinsIntroduction à l’intégration continue avec Jenkins
Introduction à l’intégration continue avec Jenkins
 
Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with Jenkins
 
La sécurité des communications avec GPG
La sécurité des communications avec GPGLa sécurité des communications avec GPG
La sécurité des communications avec GPG
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Commencer avec le tdd
Commencer avec le tddCommencer avec le tdd
Commencer avec le tdd
 
Introduction to ci with jenkins
Introduction to ci with jenkinsIntroduction to ci with jenkins
Introduction to ci with jenkins
 
Integration continue
Integration continueIntegration continue
Integration continue
 

Recently uploaded

openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
kalichargn70th171
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 

Recently uploaded (20)

openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
Why Mobile App Regression Testing is Critical for Sustained Success_ A Detail...
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 

Continuous testing In PHP