SlideShare a Scribd company logo
AutomatisationAutomatisation
In Development and Quality Process
(Within budget)
David Lukac
Senior Technical Consultant
@ Inviqa Ltd. UK
@davidlukac
https://legacy.joind.in/18271
1
2 . 1
2 . 2
2 . 3
https://inviqa.com
3 . 1
Software Engineer @ SiemensSoftware Engineer @ Siemens
Java Consultant @ T-Mobile AustriaJava Consultant @ T-Mobile Austria
CTO @ Mogdesign.euCTO @ Mogdesign.eu
Head of Project Operations @ iKOS Ltd.Head of Project Operations @ iKOS Ltd.
Senior Technical Consultant @ InviqaSenior Technical Consultant @ Inviqa
3 . 2
3 . 3
QuestionsQuestions
1. F
2. G/V
3. DR/DC
4. AQA
5. C*
4 . 1
4 . 2
Why automate?Why automate?
Saves time
Streamline the process
Efficiency
Quality / Error rate
5 . 1
5 . 2
Why CI/CD?Why CI/CD?
6 . 1
Why CI/CD?Why CI/CD?
What?
Merging
Immediate testing & reporting
G: Feedback ...
... Defects identified and corrected ASAP
6 . 2
Why CI/CD?Why CI/CD?
What?
Short cycles
Releasebility
G: Build, test, release ...
... fast, frequently
6 . 3
Why CI/CD?Why CI/CD?
Business critical functionality
Regression
DRY
Ease of mind
Confidence
Trust
6 . 4
But how!? ... budget?!But how!? ... budget?!
Credit: http://www.dailymail.co.uk/news/article-2103067/Duck-cover--Astonishing-video-shows-U-S-ground-grunt-guinea-pigs-taking-atomic-
bomb-tests-1950s--trenches-protect-radiation.html
7 . 1
Preparation:Preparation:
Unified environmentUnified environment
Drush aliases
7 . 2
Preparation:Preparation:
Unified environmentUnified environment
Drush aliases
$ <project root>/drush/mysite.aliases.drushrc.php
<?php
$aliases['mysite.local'] = array( .... );
$aliases['mysite.stage'] = array( .... );
$aliases['mysite.uat'] = array( .... );
$aliases['mysite.prod'] = array( .... );
...
$ ln -s ${DIR}/mysite.aliases.drushrc.php ~/.drush/mysite.aliases.drushrc.php
7 . 3
Preparation:Preparation:
Unified environmentUnified environment
Drush aliases
Stack
DevDesktop
7 . 4
Preparation:Preparation:
Unified environmentUnified environment
Drush aliases
Stack
DevDesktop
Drupal-VM
7 . 5
Preparation:Preparation:
Unified environmentUnified environment
Drush aliases
Stack
DevDesktop
Drupal-VM
Docker (Drude)
7 . 6
Credit: http://joefleming.net/posts/git-flow/
7 . 7
Local tasksLocal tasks
ShellShell
>_>_
8 . 1
Shell scriptsShell scripts
#!/usr/bin/env bash
# Basic deployment tasks.
drush @mysite.${1} cc all
drush @mysite.${1} updatedb -y
drush @mysite.${1} cron
8 . 2
Shell scriptsShell scripts
#!/usr/bin/env bash
# Basic deployment tasks.
drush @mysite.${1} cc all
drush @mysite.${1} updatedb -y
drush @mysite.${1} cron
# Purge Varnish
curl -X PURGE -H "X-Acquia-Purge:[mysite.com]"
-H "Accept-Encoding: gzip" https://mysite.com/about
8 . 3
Shell scriptsShell scripts
#!/usr/bin/env bash
# Basic deployment tasks.
drush @mysite.${1} cc all
drush @mysite.${1} updatedb -y
drush @mysite.${1} cron
# Purge Varnish
curl -X PURGE -H "X-Acquia-Purge:[mysite.com]"
-H "Accept-Encoding: gzip" https://mysite.com/about
# Features
# Hidden bonus(?!)
drush @mysite.${1} fra -y
8 . 4
Shell scriptsShell scripts
#!/usr/bin/env bash
# Basic deployment tasks.
drush @mysite.${1} cc all
drush @mysite.${1} updatedb -y
drush @mysite.${1} cron
# Purge Varnish
curl -X PURGE -H "X-Acquia-Purge:[mysite.com]"
-H "Accept-Encoding: gzip" https://mysite.com/about
# Features
# Hidden bonus(?!)
drush @mysite.${1} fra -y
# Pull everything
drush rsync ${source}:%files/ ${target}:%files/ --mode=ahkvz --progress -y
drush sql-sync ${source} ${target} -y
8 . 5
Shell scriptsShell scripts
#!/usr/bin/env bash
# Basic deployment tasks.
drush @mysite.${1} cc all
drush @mysite.${1} updatedb -y
drush @mysite.${1} cron
# Purge Varnish
curl -X PURGE -H "X-Acquia-Purge:[mysite.com]"
-H "Accept-Encoding: gzip" https://mysite.com/about
# Features
# Hidden bonus(?!)
drush @mysite.${1} fra -y
# Pull everything
drush rsync ${source}:%files/ ${target}:%files/ --mode=ahkvz --progress -y
drush sql-sync ${source} ${target} -y
# Tests
cd behat
bin/behat features/
8 . 6
Shell scriptsShell scripts
#!/usr/bin/env bash
# Migration
drush @mysite.${1} en menu_migrate -y
drush @mysite.${1} mi Menu --feedback="100 items"
8 . 7
Shell scriptsShell scripts
#!/usr/bin/env bash
# Migration
drush @mysite.${1} en menu_migrate -y
drush @mysite.${1} mi Menu --feedback="100 items"
# Solr
drush @mysite.${1} solr-delete-index
drush @mysite.${1} solr-index
8 . 8
Shell scriptsShell scripts
#!/usr/bin/env bash
# Deployment script
drush @mysite.$1 fr feature_article -y
drush @mysite.$1 vset my_custom_var 1
8 . 9
Shell scriptsShell scripts
#!/usr/bin/env bash
# Deployment script
drush @mysite.$1 fr feature_article -y
drush @mysite.$1 vset my_custom_var 1
drush @mysite.$1 cc css-js
drush @mysite.$1 cron
8 . 10
OtherOther
Env. setup
Dep. management
npm, bundle
Toggle
Changelog
Build
8 . 11
Local tasksLocal tasks
GulpGulp
9 . 1
Gulp tasksGulp tasks
watch
compile
copy
serve
9 . 2
10
Laravel EnvoyLaravel Envoy
Server side, ssh
Shell
11 . 1
Laravel EnvoyLaravel Envoy
Server side, ssh
Shell
Easy to setup
Works with WebSupport
$ composer global require "laravel/envoy=~1.0"
$ envoy init user@192.168.1.1
11 . 2
Laravel EnvoyLaravel Envoy
Server side, ssh
Shell
Variables
Servers
Tasks
Macros
Setup
11 . 3
EnvoyEnvoy
Envoy.blade.php
---------------
@servers(['s1' => 'usr1@myserver.com -p 12345'])
@setup
$now = new DateTime();
$environment = isset($env) ? $env : "testing";
@endsetup
@task('deploy-prod', ['on' => 's1'])
cd /var/www
echo {{ $now }}; echo {{ $environment }}
drush @mysite.prod sql-dump --result-file --gzip
git checkout master
git pull
drush @mysite.prod updb
drush @mysite.prod cc all
drush @mysite.prod cron
@endtask
@macro('deploy')
deploy-prod
clean-up
@endmacro
11 . 4
EnvoyEnvoy
Envoy.blade.php
---------------
@servers(['s1' => 'usr1@myserver.com -p 12345'])
@task('deploy-prod', ['on' => 's1'])
cd /var/www
drush @mysite.prod sql-dump --result-file --gzip
git checkout master
git pull
drush @mysite.prod updb
drush @mysite.prod cc all
drush @mysite.prod cron
@endtask
...
$ envoy run deploy-prod
11 . 5
CapistranoCapistrano
12 . 1
CapistranoCapistrano
Remote server
Ruby
Role, tasks, stages ...
12 . 2
ToolsTools
Credit: http://galilsoftware.com/our-2015-ci-survey-the-results/
13 . 1
ToolsTools
Credit: http://galilsoftware.com/our-2015-ci-survey-the-results/
github.com/ripienaar/free-for-devgithub.com/ripienaar/free-for-dev
13 . 2
QA AutomationQA Automation
14 . 1
14 . 2
QA AutomationQA Automation
TTD
Unit Tests
...
14 . 3
QA AutomationQA Automation
TTD
Unit Tests
...
pricy?
time consuming?
ROI?
14 . 4
14 . 5
15 . 1
BehatBehat
Behavioural testing
Gather & test requirements
User stories
Gherkin
15 . 2
BehatBehat
Behavioural testing
Gather & test requirements
User stories
Gherkin
Critical functionality
Login
Purchase
Post
...
15 . 3
BehatBehat
Behavioural testing
Gather & test requirements
User stories
Gherkin
Drupal support
15 . 4
BehatBehat
default:
suites:
default:
contexts:
- FeatureContext
- DrupalDrupalExtensionContextDrupalContext
- DrupalDrupalExtensionContextMessageContext
extensions:
BehatMinkExtension:
selenium2: ~
base_url: http://mysite.local
DrupalDrupalExtension:
blackbox: ~
api_driver: 'drupal'
drupal:
drupal_root: '/var/www'
text:
log_out: "Log out"
log_in: "Log in"
password_field: "Password"
username_field: "Username"
selectors:
message_selector: '.messages'
error_message_selector: '.messages.error'
success_message_selector: '.messages.status'
warning_message_selector: '.messages.warning'
region_map:
header_search: ".search-toggle"
15 . 5
BehatBehat
DrupalContext
custom context
<?php
class FeatureContext extends RawDrupalContext
implements SnippetAcceptingContext {
...
/**
* @Then I should see the subheading
*/
public function iShouldSeeSubHeading() {
$this->countElements('.taxonomy-term.vocabulary-sections
.field-name-field-body .field-item', 1, 'Homepage subheading');
}
...
15 . 6
BehatBehat
Feature: Homepage
I want to see a home page
As a user
So I can see the latest featured content on the site.
Background:
Given I am not logged in
When I visit "/"
Scenario: User can see Main header
Then I should see the text "welcome to our site"
And I should see the subheading
Scenario: User can see Latest Articles
Then I should see 11 latest homepage articles
15 . 7
BehatBehat
Scenario: User can add the content administration
Given I am logged in as a user with the "Content Editor" role
When I go to "node/add/article"
Then I should not see "Page not found"
When I fill in "title" with "Behat testing article"
And I fill in "media[field_listing_image_und_0]" with "314631"
And I press the 'edit-submit' button
Then I should see the following success messages:
| success messages |
| Article Behat testing article has been created. |
And I should be able to register my article with title
"Behat testing article" for cleanup
15 . 8
BehatBehat
Credit: http://erikaybar.name/building-and-testing-a-restful-api-using-behat-phpunit-and-laravel-part-1/
15 . 9
Ghost InspectorGhost Inspector
16 . 1
Ghost InspectorGhost Inspector
Automated UI testing
Automated UI monitoring
16 . 2
Ghost InspectorGhost Inspector
Automated UI testing
Automated monitoring
Screenshots
Comparison
16 . 3
Ghost InspectorGhost Inspector
16 . 4
Ghost InspectorGhost Inspector
Credit: http://www.hung-truong.com/blog/
16 . 5
Ghost InspectorGhost Inspector
Automated UI testing
Automated monitoring
Screenshots
Comparison
Step-by-step
Selectors
Recorder
API
16 . 6
Ghost InspectorGhost Inspector
Credit: http://www.hung-truong.com/blog/
16 . 7
Ghost InspectorGhost Inspector
API
$ curl https://api.ghostinspector.com/v1/
suites/jabsdf7283947298374sdf/execute/
?apiKey=aodjshfas72834970128347ijshdfg
16 . 8
Ghost InspectorGhost Inspector
16 . 9
Effectiveness + Quality
Confidence + Trust
Unified environment
Automated Tasks
Automated QA
Time for coffee + $$$
RecapRecap
17
Q & DQ & D
https://legacy.joind.in/18271 @davidlukac
18

More Related Content

What's hot (20)

PDF
BOSH / CF Deployment in modern ways #cf_tokyo
Toshiaki Maki
 
PPTX
Jenkins Plugin Development With Gradle And Groovy
Daniel Spilker
 
PDF
One commit, one release. Continuously delivering a Symfony project.
Javier López
 
PDF
Continous Delivering a PHP application
Javier López
 
PDF
Spring Boot 1.3 News #渋谷Java
Toshiaki Maki
 
PPTX
Spring Boot and REST API
07.pallav
 
PDF
CPAN Dependency Heaven
OpusVL
 
ODP
Vagrant move over, here is Docker
Nick Belhomme
 
PPTX
Intro to Laravel
Azukisoft Pte Ltd
 
PPTX
Bugzilla Installation Process
Vino Harikrishnan
 
PDF
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Ryan Weaver
 
PDF
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Marc Cluet
 
PDF
Search and play more than 50 clips
phanhung20
 
PDF
Gearman work queue in php
Bo-Yi Wu
 
PDF
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Joe Ferguson
 
PDF
Java REST API Framework Comparison - UberConf 2021
Matt Raible
 
PDF
Laravel 4 package development
Tihomir Opačić
 
PDF
Rails Girls: Programming, Web Applications and Ruby on Rails
DonSchado
 
PDF
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Ryan Weaver
 
PDF
A Tour of Wyriki
Mark Menard
 
BOSH / CF Deployment in modern ways #cf_tokyo
Toshiaki Maki
 
Jenkins Plugin Development With Gradle And Groovy
Daniel Spilker
 
One commit, one release. Continuously delivering a Symfony project.
Javier López
 
Continous Delivering a PHP application
Javier López
 
Spring Boot 1.3 News #渋谷Java
Toshiaki Maki
 
Spring Boot and REST API
07.pallav
 
CPAN Dependency Heaven
OpusVL
 
Vagrant move over, here is Docker
Nick Belhomme
 
Intro to Laravel
Azukisoft Pte Ltd
 
Bugzilla Installation Process
Vino Harikrishnan
 
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Ryan Weaver
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Marc Cluet
 
Search and play more than 50 clips
phanhung20
 
Gearman work queue in php
Bo-Yi Wu
 
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Joe Ferguson
 
Java REST API Framework Comparison - UberConf 2021
Matt Raible
 
Laravel 4 package development
Tihomir Opačić
 
Rails Girls: Programming, Web Applications and Ruby on Rails
DonSchado
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Ryan Weaver
 
A Tour of Wyriki
Mark Menard
 

Similar to Automatisation in development and testing - within budget (20)

PDF
Automatisation in development and testing - within budget [IronCamp prague 20...
David Lukac
 
PDF
Modernize Your Drupal Development
Chris Tankersley
 
ZIP
Voiture tech talk
Hoppinger
 
PPTX
Drupal & Continous Integration - SF State Study Case
Emanuele Quinto
 
PPTX
With one click
Marcus Deglos
 
PDF
DevOps: Cooking Drupal Deployment
Gerald Villorente
 
PPTX
Day02 a pi.
ABDEL RAHMAN KARIM
 
KEY
Don't touch that server
crdant
 
PDF
Automated testing DrupalCamp in Asheville
Promet Source
 
PDF
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Michael Lihs
 
PDF
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
PDF
Puppet for Sys Admins
Puppet
 
PDF
Mastering Laravel Christopher John Pecoraro
ajiyalovelu
 
PDF
Os Harkins
oscon2007
 
PDF
Live deployment, ci, drupal
Andrii Podanenko
 
PDF
CI workflow in a web studio
deWeb
 
PPTX
Drupal Continuous Integration Workflow
Andrii Podanenko
 
PDF
Deployment Tactics
Ian Barber
 
KEY
Standardizing and Managing Your Infrastructure - MOSC 2011
Brian Ritchie
 
PDF
Puppet camp london nov 2014 slides (1)
Puppet
 
Automatisation in development and testing - within budget [IronCamp prague 20...
David Lukac
 
Modernize Your Drupal Development
Chris Tankersley
 
Voiture tech talk
Hoppinger
 
Drupal & Continous Integration - SF State Study Case
Emanuele Quinto
 
With one click
Marcus Deglos
 
DevOps: Cooking Drupal Deployment
Gerald Villorente
 
Day02 a pi.
ABDEL RAHMAN KARIM
 
Don't touch that server
crdant
 
Automated testing DrupalCamp in Asheville
Promet Source
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Michael Lihs
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
Puppet for Sys Admins
Puppet
 
Mastering Laravel Christopher John Pecoraro
ajiyalovelu
 
Os Harkins
oscon2007
 
Live deployment, ci, drupal
Andrii Podanenko
 
CI workflow in a web studio
deWeb
 
Drupal Continuous Integration Workflow
Andrii Podanenko
 
Deployment Tactics
Ian Barber
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Brian Ritchie
 
Puppet camp london nov 2014 slides (1)
Puppet
 
Ad

Recently uploaded (20)

PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Ad

Automatisation in development and testing - within budget