SlideShare a Scribd company logo
odoo testing on steroids
Leonardo Pistone
Camptocamp
1 / 52
About me
Leonardo Pistone
Developer @ Camptocamp
OCA committer & delegate member
@lepistone
2 / 52
what I'd love
3 / 52
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
4 / 52
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
defcompute_tax(base,rate=0):
return0
5 / 52
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
defcompute_tax(base,rate=0):
return0
deftest_zero_rate(self):
assertcompute_tax(50,0)==50
6 / 52
defcompute_tax(base,rate=0):
returnbase
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
deftest_zero_rate(self):
assertcompute_tax(50,0)==50
7 / 52
defcompute_tax(base,rate=0):
returnbase
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
deftest_zero_rate(self):
assertcompute_tax(50,0)==50
deftest_positive_rate(self):
assertcompute_tax(100,0.05)==105
deftest_negative_rate(self):
assertcompute_tax(100,0.05)==95
8 / 52
defcompute_tax(base,rate=0):
returnbase*(1+rate)
deftest_no_price_no_tax(self):
assertcompute_tax(0)==0
deftest_zero_rate(self):
assertcompute_tax(50,0)==50
deftest_positive_rate(self):
assertcompute_tax(100,0.05)==105
deftest_negative_rate(self):
assertcompute_tax(100,0.05)==95
9 / 52
#python-munittestdiscover
....
---------------------
Ran4testsin0.002s
OK
10 / 52
#python-munittestdiscover
....
---------------------
Ran4testsin0.002s
OK
$python-munittestdiscover
F.F.
======================================================================
FAIL:test_positive_rate_increases_amount(test_tax.TestTax)
----------------------------------------------------------------------
Traceback(mostrecentcalllast):
File"tdd/test_tax.py",line13,intest_positive_rate_increases_amount
self.assertEqual(compute_tax(100,0.05),105)
AssertionError:100!=105
----------------------------------------------------------------------
Ran4testsin0.000s
FAILED(failures=2)
11 / 52
expressive
12 / 52
expressive
fast
13 / 52
expressive
fast
relevant output
14 / 52
expressive
fast
relevant output
maintainable
15 / 52
expressive
fast
relevant output
maintainable
¯_(ツ)_/¯
16 / 52
...really?
17 / 52
2015-03-1913:24:51,80623693INFOopenerp_testopenerp.addons.sale_exception_nostock.tests.test
2015-03-1913:24:51,81123693INFOopenerp_testopenerp.addons.sale_exception_nostock.tests.test
2015-03-1913:24:51,81223693INFOopenerp_testopenerp.addons.sale_exception_nostock.tests.test
2015-03-1913:24:51,81223693INFOopenerp_testopenerp.addons.sale_exception_nostock.tests.test
2015-03-1913:24:52,93323693INFOopenerp_testopenerp.modules.module:modulesale_owner_stock_
2015-03-1913:24:53,04823693INFOopenerp_testopenerp.modules.loading:loadingsale_owner_stoc
2015-03-1913:24:53,15523693INFOopenerp_testopenerp.modules.loading:loadingsale_owner_stoc
2015-03-1913:24:53,22723693INFOopenerp_testopenerp.modules.module:openerp.addons.sale_owne
2015-03-1913:24:53,22823693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:54,61823693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:55,71623693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:56,80923693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:58,53723693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:58,53723693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:58,53723693INFOopenerp_testopenerp.modules.module:openerp.addons.sale_owne
2015-03-1913:24:58,53823693INFOopenerp_testopenerp.modules.module:openerp.addons.sale_owne
2015-03-1913:24:58,53823693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:59,57223693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:59,99823693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:24:59,99923693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:24:59,99923693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:25:00,00023693ERRORopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.
2015-03-1913:25:00,00023693INFOopenerp_testopenerp.addons.sale_owner_stock_sourcing.tests.t
2015-03-1913:25:00,00023693ERRORopenerp_testopenerp.modules.module:Modulesale_owner_stock
2015-03-1913:25:01,30523693INFOopenerp_testopenerp.modules.module:modulesale_partner_orde
2015-03-1913:25:01,45923693INFOopenerp_testopenerp.modules.loading:loadingsale_partner_or
2015-03-1913:25:01,61123693INFOopenerp_testopenerp.modules.loading:loadingsale_partner_or
2015-03-1913:25:01,75323693INFOopenerp_testopenerp.modules.loading:45modulesloadedin25
2015-03-1913:25:03,31423693ERRORopenerp_testopenerp.modules.loading:Atleastonetestfail
2015-03-1913:25:03,34723693INFOopenerp_testopenerp.modules.module:openerp.addons.base.test
2015-03-1913:25:03,34823693INFOopenerp_testopenerp.addons.base.tests.test_xmlrpc:test_01_x
18 / 52
(╯°□°)╯︵ ┻━┻)
19 / 52
(╯°□°)╯︵ ┻━┻)
20 / 52
Problems
21 / 52
Problems
output
22 / 52
Problems
output
slowness
23 / 52
Problems
output
slowness
dependencies
24 / 52
Problems
output
slowness
dependencies
brittleness
25 / 52
unittest
classTestItBlocks(TransactionCase):
deftest_it_can_block(self):
self.order.order_line.budget_tot_price=80.0
self.order.order_line.price_unit=100.0
self.order.action_button_confirm()
self.assertEqual('draft',self.order.state)
26 / 52
unittest
classTestItBlocks(TransactionCase):
deftest_it_can_block(self):
self.order.order_line.budget_tot_price=80.0
self.order.order_line.price_unit=100.0
self.order.action_button_confirm()
self.assertEqual('draft',self.order.state)
defsetUp(self):
super(TestItBlocks,self).setUp()
#boringstuff
27 / 52
YAML
-
Icreateaquotationwithadropshippingline.
-
!record{model:sale.order,id:so_4}:
partner_id:base.res_partner_3
order_line:
-product_id:product.product_product_7
product_uom_qty:8
route_id:route_drop_shipping
-
Iconfirmthesaleorder,runthescheduler,andcheckthattheaddressof
thesaleorderhasbeenpropagatedtotheautomaticallygeneratedpurchase
order.
-
!python{model:sale.order,id:so_4}:|
fromnose.toolsimport*
self.action_button_confirm()
self.env['procurement.order'].run_scheduler()
proc=self.order_line[0].procurement_ids
assert_equal(
proc.purchase_id.dest_address_id.id,
ref('base.res_partner_3'),
)
28 / 52
OERPScenario
Feature:Invoiceworkflow
Scenario:Validationofaninvoice
GivenIenteredasupplierinvoicefor1000EUR
WhenIvalidatetheinvoice
Thenthestateoftheinvoiceis"open"
29 / 52
OERPScenario
Feature:Invoiceworkflow
Scenario:Validationofaninvoice
GivenIenteredasupplierinvoicefor1000EUR
WhenIvalidatetheinvoice
Thenthestateoftheinvoiceis"open"
need to write steps to implement phrases
30 / 52
OERPScenario
Feature:Invoiceworkflow
Scenario:Validationofaninvoice
GivenIenteredasupplierinvoicefor1000EUR
WhenIvalidatetheinvoice
Thenthestateoftheinvoiceis"open"
need to write steps to implement phrases
can abstract from implementation
31 / 52
OERPScenario
Feature:Invoiceworkflow
Scenario:Validationofaninvoice
GivenIenteredasupplierinvoicefor1000EUR
WhenIvalidatetheinvoice
Thenthestateoftheinvoiceis"open"
need to write steps to implement phrases
can abstract from implementation
same test could be used for backend + browser
32 / 52
OERPScenario
Feature:Invoiceworkflow
Scenario:Validationofaninvoice
GivenIenteredasupplierinvoicefor1000EUR
WhenIvalidatetheinvoice
Thenthestateoftheinvoiceis"open"
need to write steps to implement phrases
can abstract from implementation
same test could be used for backend + browser
readable by non-developers
33 / 52
new()
classTestUnitCheck(TransactionCase):
deftest_over_budget(self):
order=self.env['sale.order'].new({
'total_budget':80.0,
'amount_total':100.0,
})
self.assertTrue(order.over_budget())
34 / 52
new()
classTestUnitCheck(TransactionCase):
deftest_over_budget(self):
order=self.env['sale.order'].new({
'total_budget':80.0,
'amount_total':100.0,
})
self.assertTrue(order.over_budget())
required fields are not enforced
35 / 52
new()
classTestUnitCheck(TransactionCase):
deftest_over_budget(self):
order=self.env['sale.order'].new({
'total_budget':80.0,
'amount_total':100.0,
})
self.assertTrue(order.over_budget())
required fields are not enforced
not stored to the database
36 / 52
new()
classTestUnitCheck(TransactionCase):
deftest_over_budget(self):
order=self.env['sale.order'].new({
'total_budget':80.0,
'amount_total':100.0,
})
self.assertTrue(order.over_budget())
required fields are not enforced
not stored to the database
otherwise pretty real
37 / 52
mock
product=Mock(
spec_set=self.env['product.product'],
qty_available=20,
)
38 / 52
mock
product=Mock(
spec_set=self.env['product.product'],
qty_available=20,
)
fake objects
39 / 52
mock
product=Mock(
spec_set=self.env['product.product'],
qty_available=20,
)
fake objects
canned responses
40 / 52
anybox.buildout.odoo / nosetests
41 / 52
anybox.buildout.odoo / nosetests
$bin/nosetests_odoo-dd---wmodule_dir
INFO?anybox.recipe.openerp.runtime.session:Openingdatabase'd'
.........
------------------------------------------------------------------
Ran9testsin21.794s
OK
42 / 52
anybox.buildout.odoo / nosetests
$bin/nosetests_odoo-dd---wmodule_dir
INFO?anybox.recipe.openerp.runtime.session:Openingdatabase'd'
.........
------------------------------------------------------------------
Ran9testsin21.794s
OK
no update
43 / 52
anybox.buildout.odoo / nosetests
$bin/nosetests_odoo-dd---wmodule_dir
INFO?anybox.recipe.openerp.runtime.session:Openingdatabase'd'
.........
------------------------------------------------------------------
Ran9testsin21.794s
OK
no update
no irrelevant logging
44 / 52
anybox.buildout.odoo / nosetests
$bin/nosetests_odoo-dd---wmodule_dir
INFO?anybox.recipe.openerp.runtime.session:Openingdatabase'd'
.........
------------------------------------------------------------------
Ran9testsin21.794s
OK
no update
no irrelevant logging
rerun only failing tests
45 / 52
anybox.buildout.odoo / nosetests
$bin/nosetests_odoo-dd---wmodule_dir
INFO?anybox.recipe.openerp.runtime.session:Openingdatabase'd'
.........
------------------------------------------------------------------
Ran9testsin21.794s
OK
no update
no irrelevant logging
rerun only failing tests
keep your old tests
46 / 52
split decisions and dependencies
47 / 52
split decisions and dependencies
classInvoice:
defcompute(amount,rate): #putdecisionshere
returnamount*(rate+1)
48 / 52
split decisions and dependencies
classInvoice:
defcompute(amount,rate): #putdecisionshere
returnamount*(rate+1)
defupdate_tax(self): #putdependencieshere
tax=Tax.search(self.partner.tax_conditions)
self.amount_with_tax=self.compute(
self.amount_untaxed,
tax.rate,
)
49 / 52
split decisions and dependencies
classInvoice:
defcompute(amount,rate): #putdecisionshere
returnamount*(rate+1)
defupdate_tax(self): #putdependencieshere
tax=Tax.search(self.partner.tax_conditions)
self.amount_with_tax=self.compute(
self.amount_untaxed,
tax.rate,
)
functional core, imperative shell (Gary Bernhardt)
50 / 52
thanks!
51 / 52
thanks!
OCA sponsors
52 / 52

More Related Content

Viewers also liked

Présentation GeoMapFish
Présentation GeoMapFishPrésentation GeoMapFish
Présentation GeoMapFish
Camptocamp
 
OpenLayers 3.0
OpenLayers 3.0OpenLayers 3.0
OpenLayers 3.0Camptocamp
 
MapFish Print 3
MapFish Print 3MapFish Print 3
MapFish Print 3
Camptocamp
 
Odoo verticalization for NGO
Odoo verticalization for NGOOdoo verticalization for NGO
Odoo verticalization for NGO
Camptocamp
 
MapFish Print 3 : Printing maps like a boss
MapFish Print 3 : Printing maps like a bossMapFish Print 3 : Printing maps like a boss
MapFish Print 3 : Printing maps like a boss
Camptocamp
 
A jobs queue for processing tasks asynchronously
A jobs queue for processing tasks asynchronouslyA jobs queue for processing tasks asynchronously
A jobs queue for processing tasks asynchronously
Camptocamp
 
Odoo Connector (formerly OpenERP Connector)
Odoo Connector (formerly OpenERP Connector)Odoo Connector (formerly OpenERP Connector)
Odoo Connector (formerly OpenERP Connector)
Camptocamp
 
Contributing to the Odoo Community Association (OCA)
Contributing to the Odoo Community Association (OCA)Contributing to the Odoo Community Association (OCA)
Contributing to the Odoo Community Association (OCA)
Camptocamp
 
OpenLayers 3
OpenLayers 3OpenLayers 3
OpenLayers 3
Camptocamp
 
OpenERP7, 2014 community days : banking framework talk
OpenERP7, 2014 community days : banking framework talkOpenERP7, 2014 community days : banking framework talk
OpenERP7, 2014 community days : banking framework talk
Camptocamp
 
Cesium : Virtueller 3D Globus im Web
Cesium : Virtueller 3D Globus im WebCesium : Virtueller 3D Globus im Web
Cesium : Virtueller 3D Globus im Web
Camptocamp
 
OpenLayers 3 & Google Closure Compiler
OpenLayers 3 & Google Closure CompilerOpenLayers 3 & Google Closure Compiler
OpenLayers 3 & Google Closure Compiler
Camptocamp
 
Mapfish print-v3
Mapfish print-v3Mapfish print-v3
Mapfish print-v3
Camptocamp
 
GeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGISGeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGIS
Camptocamp
 
QGIS et WebSIG(s), la convergence ?
QGIS et WebSIG(s), la convergence ?QGIS et WebSIG(s), la convergence ?
QGIS et WebSIG(s), la convergence ?Camptocamp
 
OpenLayers 3
OpenLayers 3OpenLayers 3
OpenLayers 3
Camptocamp
 
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
Camptocamp
 
georchestra SDI: Project Status Report
georchestra SDI: Project Status Reportgeorchestra SDI: Project Status Report
georchestra SDI: Project Status Report
Camptocamp
 
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...Odoo
 
FOSSGIS 2014: geOrchestra
FOSSGIS 2014: geOrchestraFOSSGIS 2014: geOrchestra
FOSSGIS 2014: geOrchestra
Camptocamp
 

Viewers also liked (20)

Présentation GeoMapFish
Présentation GeoMapFishPrésentation GeoMapFish
Présentation GeoMapFish
 
OpenLayers 3.0
OpenLayers 3.0OpenLayers 3.0
OpenLayers 3.0
 
MapFish Print 3
MapFish Print 3MapFish Print 3
MapFish Print 3
 
Odoo verticalization for NGO
Odoo verticalization for NGOOdoo verticalization for NGO
Odoo verticalization for NGO
 
MapFish Print 3 : Printing maps like a boss
MapFish Print 3 : Printing maps like a bossMapFish Print 3 : Printing maps like a boss
MapFish Print 3 : Printing maps like a boss
 
A jobs queue for processing tasks asynchronously
A jobs queue for processing tasks asynchronouslyA jobs queue for processing tasks asynchronously
A jobs queue for processing tasks asynchronously
 
Odoo Connector (formerly OpenERP Connector)
Odoo Connector (formerly OpenERP Connector)Odoo Connector (formerly OpenERP Connector)
Odoo Connector (formerly OpenERP Connector)
 
Contributing to the Odoo Community Association (OCA)
Contributing to the Odoo Community Association (OCA)Contributing to the Odoo Community Association (OCA)
Contributing to the Odoo Community Association (OCA)
 
OpenLayers 3
OpenLayers 3OpenLayers 3
OpenLayers 3
 
OpenERP7, 2014 community days : banking framework talk
OpenERP7, 2014 community days : banking framework talkOpenERP7, 2014 community days : banking framework talk
OpenERP7, 2014 community days : banking framework talk
 
Cesium : Virtueller 3D Globus im Web
Cesium : Virtueller 3D Globus im WebCesium : Virtueller 3D Globus im Web
Cesium : Virtueller 3D Globus im Web
 
OpenLayers 3 & Google Closure Compiler
OpenLayers 3 & Google Closure CompilerOpenLayers 3 & Google Closure Compiler
OpenLayers 3 & Google Closure Compiler
 
Mapfish print-v3
Mapfish print-v3Mapfish print-v3
Mapfish print-v3
 
GeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGISGeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGIS
 
QGIS et WebSIG(s), la convergence ?
QGIS et WebSIG(s), la convergence ?QGIS et WebSIG(s), la convergence ?
QGIS et WebSIG(s), la convergence ?
 
OpenLayers 3
OpenLayers 3OpenLayers 3
OpenLayers 3
 
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
Pourquoi intégrer Odoo, l'ERP de dernière génération full web, au sein de son...
 
georchestra SDI: Project Status Report
georchestra SDI: Project Status Reportgeorchestra SDI: Project Status Report
georchestra SDI: Project Status Report
 
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...
E-commerce: the new Magento - OpenERP Connector: a generic connector to any a...
 
FOSSGIS 2014: geOrchestra
FOSSGIS 2014: geOrchestraFOSSGIS 2014: geOrchestra
FOSSGIS 2014: geOrchestra
 

More from Camptocamp

ERP et customisation : comment éviter l’usine à gaz ?
ERP et customisation : comment éviter l’usine à gaz ?ERP et customisation : comment éviter l’usine à gaz ?
ERP et customisation : comment éviter l’usine à gaz ?
Camptocamp
 
10 points-clés incontournables pour réussir votre projet ERP
10 points-clés incontournables pour réussir votre projet ERP10 points-clés incontournables pour réussir votre projet ERP
10 points-clés incontournables pour réussir votre projet ERP
Camptocamp
 
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Camptocamp
 
Geo mapfish 2_foss4g-eu_2017
Geo mapfish 2_foss4g-eu_2017Geo mapfish 2_foss4g-eu_2017
Geo mapfish 2_foss4g-eu_2017
Camptocamp
 
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
Camptocamp
 
Data processing qgis3_foss4g-eu_2017
Data processing qgis3_foss4g-eu_2017Data processing qgis3_foss4g-eu_2017
Data processing qgis3_foss4g-eu_2017
Camptocamp
 
AGIT 2017: GeoMapFish_2.2, the open source WebGIS
AGIT 2017: GeoMapFish_2.2, the open source WebGISAGIT 2017: GeoMapFish_2.2, the open source WebGIS
AGIT 2017: GeoMapFish_2.2, the open source WebGIS
Camptocamp
 
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map EngineAGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
Camptocamp
 
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDIAGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
Camptocamp
 
[Geocom2017] geOrchestra and ngeo
[Geocom2017] geOrchestra and ngeo[Geocom2017] geOrchestra and ngeo
[Geocom2017] geOrchestra and ngeo
Camptocamp
 
[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring
Camptocamp
 
GeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGISGeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGIS
Camptocamp
 
NGEO – OpenLayers meets Angular
NGEO – OpenLayers meets AngularNGEO – OpenLayers meets Angular
NGEO – OpenLayers meets Angular
Camptocamp
 

More from Camptocamp (13)

ERP et customisation : comment éviter l’usine à gaz ?
ERP et customisation : comment éviter l’usine à gaz ?ERP et customisation : comment éviter l’usine à gaz ?
ERP et customisation : comment éviter l’usine à gaz ?
 
10 points-clés incontournables pour réussir votre projet ERP
10 points-clés incontournables pour réussir votre projet ERP10 points-clés incontournables pour réussir votre projet ERP
10 points-clés incontournables pour réussir votre projet ERP
 
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
 
Geo mapfish 2_foss4g-eu_2017
Geo mapfish 2_foss4g-eu_2017Geo mapfish 2_foss4g-eu_2017
Geo mapfish 2_foss4g-eu_2017
 
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
Ge orchestra open_source_inspire_sdi-project_status_foss4g-eu_2017
 
Data processing qgis3_foss4g-eu_2017
Data processing qgis3_foss4g-eu_2017Data processing qgis3_foss4g-eu_2017
Data processing qgis3_foss4g-eu_2017
 
AGIT 2017: GeoMapFish_2.2, the open source WebGIS
AGIT 2017: GeoMapFish_2.2, the open source WebGISAGIT 2017: GeoMapFish_2.2, the open source WebGIS
AGIT 2017: GeoMapFish_2.2, the open source WebGIS
 
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map EngineAGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
AGIT 2017: Cesium 1.35, WebGL Virtual Globe and Map Engine
 
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDIAGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
AGIT 2017: geOrchestra 16.12, the open source INSPIRE SDI
 
[Geocom2017] geOrchestra and ngeo
[Geocom2017] geOrchestra and ngeo[Geocom2017] geOrchestra and ngeo
[Geocom2017] geOrchestra and ngeo
 
[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring[Geocom2017] Georchestra & monitoring
[Geocom2017] Georchestra & monitoring
 
GeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGISGeoMapFish, the Open Source WebGIS
GeoMapFish, the Open Source WebGIS
 
NGEO – OpenLayers meets Angular
NGEO – OpenLayers meets AngularNGEO – OpenLayers meets Angular
NGEO – OpenLayers meets Angular
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
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
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
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
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 

Odoo testing on steroids