SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Testing for fun and profit – Part 2
                April, 27th 2010

             Timo Stollenwerk




                        
Part 1 – Why testing matters
    ●   Reduces defects
    ●   Find bugs early
    ●   Proof that you delivered what you were 
        contracted to produce
    ●   Refactor with confidence
    ●   Lots of small successes



                               
Testing pyramid




            
What are you going to learn today?
    ●   Set up integration and functional tests
        ●   Traditional test setup
        ●   Test setup with layers
    ●   Testing
        ●   Policy product
        ●   Dexterity types
        ●   Archetypes
        ●   Portlets


                                      
The current state of testing in Plone
    ●   Plone 3 / PPD / Paster
    ●   collective.testcaselayer
    ●   plone.testing




                                  
Plone 3 test structure
$ paster create ­t archetype upc.myarchetype 


    ●   tests
        ●   __init__.py
        ●   base.py
        ●   test_doctest.py



                               
Test setup: base.py
    ●   Import ZopeTestCase and PloneTestCase
    ●   setup_product function
    ●   setupPloneSite
    ●   TestCase & FunctionalTestCase




                              
Test setup: base.py (import)
from Testing import ZopeTestCase as ztc
from Products.PloneTestCase import 
PloneTestCase as ptc
from Products.PloneTestCase.layer import 
onsetup




                        
Test setup: base.py (setup_product)
@onsetup
def setup_product():


    fiveconfigure.debug_mode = True
    import upc.myarchetype
    zcml.load_config('configure.zcml', upcexample.myarchetype)
    fiveconfigure.debug_mode = False
    ztc.installPackage('upcexample.theme')



                                 
Test setup: base.py (test classes)
class TestCase(ptc.PloneTestCase):
    """We use this base class for all the tests in this package. If
    necessary, we can put common utility or setup code in here. This
    applies to unit test cases.
    """
class FunctionalTestCase(ptc.FunctionalTestCase):
    """We use this class for functional integration tests that use
    doctest syntax. Again, we can put basic common utility or setup
    code in here.
    ""”
                                     
TestCase
from upcexample.myproduct.tests.base import TestCase


class TestSetup(TestCase):
    
    def afterSetUp(self):
        self.workflow = getToolByName(self.portal, 'portal_workflow')
    
    def test_portal_title(self):
        self.assertEquals("UPC Portal", self.portal.getProperty('title'))


def test_suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestSetup))
    return suite


                                                         
FunctionalTestCase
import unittest
import doctest
from Testing import ZopeTestCase as ztc
from upctest.myproduct.tests import base


def test_suite():
    return unittest.TestSuite([


        # Demonstrate the main content types
        ztc.ZopeDocFileSuite(
            'README.txt', package=upctest.myproduct',
            test_class=base.FunctionalTestCase,
            optionflags=doctest.REPORT_ONLY_FIRST_FAILURE |
                doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS),


        ])


if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')



                                                                     
FunctionalTestCase Doctest
Being a doctest, we can tell a story here.
>>> from Products.Five.testbrowser import 
Browser
>>> browser = Browser()
>>> portal_url = self.portal.absolute_url()




                           
FunctionalTestCase: Login
    >>> from Products.PloneTestCase.setup import 
portal_owner, default_password
    >>> browser.open(portal_url)
We have the login portlet, so let's use that.
    >>> browser.getControl(name='__ac_name').value = 
portal_owner
    >>> browser.getControl(name='__ac_password').value = 
default_password
    >>> browser.getControl(name='submit').click()

                                 
FunctionalTestCase: Properties
    >>> browser.url == portal_url
    True
    >>> "You are now logged in" in 
browser.contents
    True
    >>> 'foo' in browser.headers
    False

                           
FunctionalTestCase: Actions
­ browser.open(url)
­ browser.reload()
­ browser.goBack(count=1)
­ browser.getLink(text=None, url=None, id=None)
­ browser.click()
­ browser.getControl(label=None, name=None, 
index=None)

                         
Zope Testrunner (Plone 3)
    ●   Test package


$ ./bin/instance test ­s upcexample.myproduct




                         
Zope Testrunner (Plone 3)
    ●   Test single file


$ ./bin/instance test ­s upcexample.myproduct ­t 
test_setup




                            
Zope Testrunner (Plone 3)
    ●   Unit/Integration tests only


$ ./bin/instance test ­s upcexample.myproduct ­u




                                 
Zope Testrunner (Plone 3)
    ●   Debug


$ ./bin/instance test ­D




                            
Setting Up Tests with Layers
    ●   Tests (upc.testingtutorial / example.conference)
        ●   __init__.py
        ●   layer.py
        ●   test_functional_doctest.py
        ●   functional.txt
        ●   test_task.py




                                    
Setting Up Tests with Layers: 
                  layer.py
# Imports
ptc.setupPloneSite(
    extension_profiles=('upc.testingtutorial:default', )
)


class IntegrationTestLayer(collective.testcaselayer.ptc.BasePTCLayer):


    def afterSetUp(self):
        self.addProfile('upc.testingtutorial:default')


Layer = IntegrationTestLayer([collective.testcaselayer.ptc.ptc_layer])
                                           
Setting Up Tests with Layers: 
              test_functional_doctest.py
# Imports
from upc.testingtutorial.tests.layer import Layer


def test_suite():
    return unittest.TestSuite([


        ztc.ZopeDocFileSuite(
            'functional.txt', package='upc.testingtutorial.tests',
            test_class=ptc.FunctionalTestCase,
            optionflags=doctest.REPORT_ONLY_FIRST_FAILURE | 
doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS),
        ])


                                                   
Setting Up Tests with Layers: 
                  functional.txt
==========================================
 UPC Testing Tutorial: Functional Doctest
==========================================


This package contains a functional doctest for the task content type of the
upc.testringtutorial package. In this testbrowser doctest, we will demonstrate 
how the task content type works. See tests/test_functional_doctest.py for how 
it is set up.
    >>> from Products.Five.testbrowser import Browser
    >>> browser = Browser()
    >>> portal_url = self.portal.absolute_url()



                                               
Setting Up Tests with Layers: 
                   test_task.py
class TestTaskIntegration(PloneTestCase):
    
    layer = Layer
    
    def test_adding(self):
        self.folder.invokeFactory('upc.testingtutorial.task', 'task1')
        t1 = self.folder['task1']
        self.failUnless(ITask.providedBy(t1))
    
def test_suite():
    return unittest.defaultTestLoader.loadTestsFromName(__name__)


                                               
Zope Testrunner (Plone 4)
[buildout]
parts = 
    ...
    test
…


[test]
recipe = zc.recipe.testrunner
eggs =  upcexample.myproduct
defaults = ['­v', '­­exit­with­status', '­­auto­color', '­­auto­progress']
                                       
Zope Testrunner (Plone 4)
    ●   Run all tests
$ ./bin/test
    ●   Test one package
$ ./bin/test ­s upcexample.mypackage
...




                            
Testing Portlets
class TestPortlet(TestCase):
    def afterSetUp(self):
        self.setRoles(('Manager',))
    …


class TestRenderer(TestCase):    
    def afterSetUp(self):
        self.setRoles(('Manager',))
        self.portal.invokeFactory('Folder', 'cf1')
    ....


http://svn.plone.org/svn/collective/collective.portlet.recentactivity/trunk/collective/portlet
/recentactivity/tests/test_portlet_recent_activity.py
                                                  
Testing Viewlets
class TestCommentsViewletIntegration(FunctionalTestCase):


    layer = DiscussionLayer


    def testCommentsViewlet(self):
        browser = Browser()
        portal_url = self.portal.absolute_url()
        browser.handleErrors = False
        from Products.PloneTestCase.setup import portal_owner, default_password
        browser.open(portal_url + '/login_form')


http://svn.plone.org/svn/plone/plone.app.discussion/trunk/plone/app/discussion/tests/te
st_comments_viewlet.py
                                                   
Summary
    ●   Setting up tests
        ●   Traditional way (PPD / Optilux / ZopeSkel)
        ●   Testcaselayer (Dexterity manual)
        ●   Future: plone.testing
    ●   Archetypes
        ●   PPD / Optilux / ZopeSkel
    ●   Dexterity
        ●   Dexterity manual (example.conference)
    ●   Portlet
        ●   ZopeSkel / Paster output
    ●   Viewlet
        ●   plone.app.discussion / plone.app.layout (search for *test*.py)
                                                   
Testing Resources
    ●   Plone Testing Tutorial
        ●   http://plone.org/documentation/kb/testing
    ●   Plone 3 / Archetypes 
        ●   PPD / Optilux
    ●   Plone 4 / Dexterity Manual / example.conference
        ●   http://plone.org/products/dexterity/documentation/manual/de
        ●   http://svn.plone.org/svn/collective/example.conference/ 


                                      
The End




        

Contenu connexe

Tendances

Test-driven Development for TYPO3
Test-driven Development for TYPO3Test-driven Development for TYPO3
Test-driven Development for TYPO3
Oliver Klee
 
Unit Testing Presentation
Unit Testing PresentationUnit Testing Presentation
Unit Testing Presentation
nicobn
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DE
Oliver Klee
 
White paper for unit testing using boost
White paper for unit testing using boostWhite paper for unit testing using boost
White paper for unit testing using boost
nkkatiyar
 

Tendances (20)

JUnit Pioneer
JUnit PioneerJUnit Pioneer
JUnit Pioneer
 
Phpunit testing
Phpunit testingPhpunit testing
Phpunit testing
 
Test-driven Development for TYPO3
Test-driven Development for TYPO3Test-driven Development for TYPO3
Test-driven Development for TYPO3
 
Unit Testing Presentation
Unit Testing PresentationUnit Testing Presentation
Unit Testing Presentation
 
Test-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DETest-Driven Development for TYPO3 @ T3CON12DE
Test-Driven Development for TYPO3 @ T3CON12DE
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
 
Unit Testng with PHP Unit - A Step by Step Training
Unit Testng with PHP Unit - A Step by Step TrainingUnit Testng with PHP Unit - A Step by Step Training
Unit Testng with PHP Unit - A Step by Step Training
 
Understanding JavaScript Testing
Understanding JavaScript TestingUnderstanding JavaScript Testing
Understanding JavaScript Testing
 
Junit and testNG
Junit and testNGJunit and testNG
Junit and testNG
 
Unit testing
Unit testingUnit testing
Unit testing
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
White paper for unit testing using boost
White paper for unit testing using boostWhite paper for unit testing using boost
White paper for unit testing using boost
 
Testing the frontend
Testing the frontendTesting the frontend
Testing the frontend
 
Confitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good TestsConfitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good Tests
 
GeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good TestsGeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good Tests
 
OSGi and Eclipse RCP
OSGi and Eclipse RCPOSGi and Eclipse RCP
OSGi and Eclipse RCP
 
Unit testing with PHPUnit - there's life outside of TDD
Unit testing with PHPUnit - there's life outside of TDDUnit testing with PHPUnit - there's life outside of TDD
Unit testing with PHPUnit - there's life outside of TDD
 
Understanding JavaScript Testing
Understanding JavaScript TestingUnderstanding JavaScript Testing
Understanding JavaScript Testing
 
(Unit )-Testing for Joomla
(Unit )-Testing for Joomla(Unit )-Testing for Joomla
(Unit )-Testing for Joomla
 

En vedette (6)

Upc
UpcUpc
Upc
 
Grabalo
GrabaloGrabalo
Grabalo
 
Gestión del conocimiento en la UPC y construción de una cultura del open access
Gestión del conocimiento en la UPC y construción de una cultura del open accessGestión del conocimiento en la UPC y construción de una cultura del open access
Gestión del conocimiento en la UPC y construción de una cultura del open access
 
A ind esc_ato_inf
A ind esc_ato_infA ind esc_ato_inf
A ind esc_ato_inf
 
iPhone and Rails integration
iPhone and Rails integrationiPhone and Rails integration
iPhone and Rails integration
 
La Web Social Aplicada a la Educación ¿Promesa o Realidad?
La Web Social Aplicada a la Educación ¿Promesa o Realidad?La Web Social Aplicada a la Educación ¿Promesa o Realidad?
La Web Social Aplicada a la Educación ¿Promesa o Realidad?
 

Similaire à UPC Testing talk 2

Plone testingdzug tagung2010
Plone testingdzug tagung2010Plone testingdzug tagung2010
Plone testingdzug tagung2010
Timo Stollenwerk
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suite
ericholscher
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic People
davismr
 
Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passage
Erik Rose
 

Similaire à UPC Testing talk 2 (20)

Plone testingdzug tagung2010
Plone testingdzug tagung2010Plone testingdzug tagung2010
Plone testingdzug tagung2010
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suite
 
Junit_.pptx
Junit_.pptxJunit_.pptx
Junit_.pptx
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic People
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1
 
Python testing
Python  testingPython  testing
Python testing
 
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
QA your code: The new Unity Test Framework – Unite Copenhagen 2019QA your code: The new Unity Test Framework – Unite Copenhagen 2019
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
 
ikp321-04
ikp321-04ikp321-04
ikp321-04
 
Testing Spring Applications
Testing Spring ApplicationsTesting Spring Applications
Testing Spring Applications
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
3 j unit
3 j unit3 j unit
3 j unit
 
8-testing.pptx
8-testing.pptx8-testing.pptx
8-testing.pptx
 
Unit testing
Unit testingUnit testing
Unit testing
 
Fighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnitFighting Fear-Driven-Development With PHPUnit
Fighting Fear-Driven-Development With PHPUnit
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passage
 
Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и Django
 
Introduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylightIntroduction to JUnit testing in OpenDaylight
Introduction to JUnit testing in OpenDaylight
 

Plus de Timo Stollenwerk

Einführung Test-driven Development
Einführung Test-driven DevelopmentEinführung Test-driven Development
Einführung Test-driven Development
Timo Stollenwerk
 

Plus de Timo Stollenwerk (20)

German Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web RelaunchGerman Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web Relaunch
 
Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)
 
Python & JavaScript
Python & JavaScriptPython & JavaScript
Python & JavaScript
 
Roadmap to a Headless Plone
Roadmap to a Headless PloneRoadmap to a Headless Plone
Roadmap to a Headless Plone
 
Plone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern webPlone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern web
 
Divide et impera
Divide et imperaDivide et impera
Divide et impera
 
The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)
 
Hypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonHypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und Python
 
Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014
 
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
 
The Butler and the Snake - JCICPH
The Butler and the Snake - JCICPHThe Butler and the Snake - JCICPH
The Butler and the Snake - JCICPH
 
The Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for PythonThe Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for Python
 
AngularJS & Plone
AngularJS & PloneAngularJS & Plone
AngularJS & Plone
 
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
 
Plone5
Plone5Plone5
Plone5
 
Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...
 
The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...
 
Plone Einführung
Plone EinführungPlone Einführung
Plone Einführung
 
Einführung Test-driven Development
Einführung Test-driven DevelopmentEinführung Test-driven Development
Einführung Test-driven Development
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 

Dernier

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
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
 

Dernier (20)

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
 
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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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
 
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...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
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
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 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...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 

UPC Testing talk 2