SlideShare a Scribd company logo
1 of 70
Download to read offline
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

Bugzilla Installation Process
Bugzilla Installation ProcessBugzilla Installation Process
Bugzilla Installation Process
Vino Harikrishnan
 

What's hot (20)

BOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyoBOSH / CF Deployment in modern ways #cf_tokyo
BOSH / CF Deployment in modern ways #cf_tokyo
 
Jenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And GroovyJenkins Plugin Development With Gradle And Groovy
Jenkins Plugin Development With Gradle And Groovy
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
Spring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷JavaSpring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷Java
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
CPAN Dependency Heaven
CPAN Dependency HeavenCPAN Dependency Heaven
CPAN Dependency Heaven
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
Intro to Laravel
Intro to LaravelIntro to Laravel
Intro to Laravel
 
Bugzilla Installation Process
Bugzilla Installation ProcessBugzilla Installation Process
Bugzilla Installation Process
 
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with BehatGrand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetPuppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and Puppet
 
Search and play more than 50 clips
Search and play more than 50 clipsSearch and play more than 50 clips
Search and play more than 50 clips
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 TutorialAdventures in Laravel 5 SunshinePHP 2016 Tutorial
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package development
 
Rails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on RailsRails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on Rails
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
A Tour of Wyriki
A Tour of WyrikiA Tour of Wyriki
A Tour of Wyriki
 

Similar to Automatisation in development and testing - within budget

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

Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Automatisation in development and testing - within budget [IronCamp prague 20...
Automatisation in development and testing - within budget [IronCamp prague 20...Automatisation in development and testing - within budget [IronCamp prague 20...
Automatisation in development and testing - within budget [IronCamp prague 20...
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
 
Minimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestrationMinimum Viable Docker: our journey towards orchestration
Minimum Viable Docker: our journey towards orchestration
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Control your deployments with Capistrano
Control your deployments with CapistranoControl your deployments with Capistrano
Control your deployments with Capistrano
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
Fullstack workshop
Fullstack workshopFullstack workshop
Fullstack workshop
 
How to create your own hack environment
How to create your own hack environmentHow to create your own hack environment
How to create your own hack environment
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Revoke-Obfuscation
Revoke-ObfuscationRevoke-Obfuscation
Revoke-Obfuscation
 
Continuous Integration & Development with Gitlab
Continuous Integration & Development with GitlabContinuous Integration & Development with Gitlab
Continuous Integration & Development with Gitlab
 
Getting started with open mobile development on the Openmoko platform
Getting started with open mobile development on the Openmoko platformGetting started with open mobile development on the Openmoko platform
Getting started with open mobile development on the Openmoko platform
 
Lightning branches at RedMart (Js conf Asia 2014 Talk)
Lightning branches at RedMart (Js conf Asia 2014  Talk)Lightning branches at RedMart (Js conf Asia 2014  Talk)
Lightning branches at RedMart (Js conf Asia 2014 Talk)
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Container (Docker) Orchestration Tools
Container (Docker) Orchestration ToolsContainer (Docker) Orchestration Tools
Container (Docker) Orchestration Tools
 

Recently uploaded

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 

Automatisation in development and testing - within budget