SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
TESTING SERVICES
effectively
Alberto Leal @albertoleal
http://albertoleal.me
What is a service?
External

Service
Internal
Service
ad$
A
http://api.example.com/cars
Request Response
Connection: keep-alive	
Content-Length: 1466	
Content-Type: application/json; 	
Date: Sat, 02 Aug 2014 19:42:38 GMT	
ETag: W/"5ba-70348105"
{	
"cars": [	
{	
"created": "2014-07-25T19:27:56.919Z",	
"id": "53d2afbc7165355f0eaf79da",	
"modified": "2014-07-25T19:27:56.919Z",	
"name": "Ferrari"	
},	
{	
"created": "2014-07-25T19:27:56.874Z",	
"id": "53d2afbc7165355f0eaf79d9",	
"modified": "2014-07-25T19:27:56.874Z",	
"name": "Porshe"	
}	
	 ]	
}
Request Response
http://api.example.com/cars
Connection: keep-alive	
Content-Length: 1466	
Content-Type: application/json; 	
Date: Sat, 02 Aug 2014 19:42:38 GMT	
ETag: W/"5ba-70348105"
{	
"cars": [	
{	
"created": "2014-07-25T19:27:56.919Z",	
"id": "53d2afbc7165355f0eaf79da",	
"modified": "2014-07-25T19:27:56.919Z",	
"name": "Ferrari"	
},	
{	
"created": "2014-07-25T19:27:56.874Z",	
"id": "53d2afbc7165355f0eaf79d9",	
"modified": "2014-07-25T19:27:56.874Z",	
"name": "Porshe"	
}	
	 ]	
}
headers
Connection: keep-alive	
Content-Length: 1466	
Content-Type: application/json; 	
Date: Sat, 02 Aug 2014 19:42:38 GMT	
ETag: W/"5ba-70348105"
{	
"cars": [	
{	
"created": "2014-07-25T19:27:56.919Z",	
"id": "53d2afbc7165355f0eaf79da",	
"modified": "2014-07-25T19:27:56.919Z",	
"name": "Ferrari"	
},	
{	
"created": "2014-07-25T19:27:56.874Z",	
"id": "53d2afbc7165355f0eaf79d9",	
"modified": "2014-07-25T19:27:56.874Z",	
"name": "Porshe"	
}	
	 ]	
}
body
Failures:	
!
1) Car Service should retrieve all cars	
Failure/Error: response = RestClient.get ‘api.example.com/cars'	
SocketError:	
getaddrinfo: nodename nor servname provided, or not known	
# ./test_spec.rb:12:in `block (2 levels) in <top (required)>'	
!
Finished in 0.02436 seconds (files took 0.81924 seconds to load)	
1 example, 1 failure	
!
Failed examples:	
!
rspec ./test_spec.rb:11 # External Service should retrieve all cars
gem 'webmock'
https://github.com/bblimke/webmock
require 'webmock/rspec'	
require 'rest_client'	
!
describe 'Car Service’ do	
it 'should retrieve all cars' do	
response = RestClient.get ‘api.example.com/cars'	
expect(response).to be_an_instance_of(String)	
end	
end
------------------------------	
FAIL: 1 PASS: 0 PENDING: 0	
------------------------------	
Finished in 0.04571 seconds	
	
[Car Service]	
- should retrieve all cars	
Real HTTP connections are disabled. Unregistered request: GET http://
api.example.com/cars with headers {'Accept'=>'*/*; q=0.5, application/
xml', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>'Ruby'}You can
stub this request with the following snippet:stub_request(:get, “http://
api.example.com/cars”). with(:headers => {'Accept'=>'*/*; q=0.5,
application/xml', 'Accept-Encoding'=>'gzip, deflate', 'User-
Agent'=>'Ruby'}). to_return(:status => 200, :body => "", :headers => {})
require 'webmock/rspec'	
require 'rest_client'	
!
WebMock.allow_net_connect!	
!
describe 'Car Service' do	
it 'should retrieve all cars' do	
response = RestClient.get ‘api.example.com/cars'	
expect(response).to be_an_instance_of(String)	
end	
end
require 'webmock/rspec'	
require 'rest_client'	
!
# WebMock.allow_net_connect!	
!
describe 'Car Service' do	
before :all do	
stub_request(:get, ‘api.example.com/cars')	
	 .to_return(status: 200, headers: {}, body: 'This is a mock.')	
end	
!
it 'should retrieve all cars' do	
response = RestClient.get ‘http://api.example.com/cars'	
expect(response).to eq(‘This is a mock.')	
end	
end
gem 'vcr'gem 'vcr'
https://github.com/vcr/vcr
ENV["RAILS_ENV"] ||= 'test'	
require File.expand_path("../../config/environment", __FILE__)	
require 'rspec/rails'	
require 'rspec/autorun'	
!
RSpec.configure do |config|	
config.mock_with :rspec	
config.infer_base_class_for_anonymous_controllers = false	
config.order = "random"	
!
#Configuring VCR gem	
config.around(:each, :vcr) do |example|	
opts = example.metadata.slice(:record, :match_requests_on).except(:example_group)	
VCR.use_cassette(example.metadata[:cassette_name], opts) { example.call }	
end	
end
describe Car do	
...	
	
	 describe '.all' do	
	it 'should retrieve all available cars', :vcr, cassette_name: ‘cars/all’ do	
		 cars = Car.all	
	 	 expect(cars).to be_an_instance_of Array	
	 	 	 expect(cars).to have(2).items	
	end	
	end	
!
...	
end
gem 'puffing-billy'
https://github.com/oesmith/puffing-billy
require ‘billy/rspec'	
!
Capybara.javascript_driver = :selenium_billy
proxy.stub(‘http://api.example.com/cars').and_return(json: {cars: […]})
Integration

Tests
Contract
Tests
Consumer-Driven Contracts:
A Service Evolution Pattern
http://martinfowler.com/articles/consumerDrivenContracts.html
Contracts can couple
service providers
and
consumers
gem 'pact'
https://github.com/realestate-com-au/pact
class MyServiceProviderClient	
include HTTParty	
base_uri 'http://my-service'	
!
def get_something	
	 	 name = JSON.parse(self.class.get("/something").body)['name']	
Something.new(name)	
end	
end
Client
require 'pact/consumer/rspec'	
!
Pact.service_consumer "My Service Consumer" do	
has_pact_with "My Service Provider" do	
mock_service :my_service_provider do	
port 1234	
end	
end	
end
Mock Server
describe MyServiceProviderClient, pact: true do	
!
before do	
# Configure your client to point to the stub service on localhost using the port you have specified	
MyServiceProviderClient.base_uri 'localhost:1234'	
end	
!
subject { MyServiceProviderClient.new }	
!
describe "get_something" do	
!
before do	
my_service_provider.given("something exists").	
upon_receiving("a request for something").with(method: :get, path: '/something').	
will_respond_with(	
status: 200,	
headers: {'Content-Type' => 'application/json'},	
body: {name: 'A small something'} )	
end	
!
it "returns a Something" do	
expect(subject.get_something).to eq(Something.new('A small something'))	
end	
!
end	
!
end
thanks!
http://albertoleal.me
https://www.flickr.com/photos/robsmits/5452184206
https://www.flickr.com/photos/hotcherry/521006473
Photos:
https://www.flickr.com/photos/vern/5379218273/sizes/l

Mais conteúdo relacionado

Semelhante a Testing Services Effectively

Summit2011 satellites-robinf-20110605
Summit2011 satellites-robinf-20110605Summit2011 satellites-robinf-20110605
Summit2011 satellites-robinf-20110605Robin Fernandes
 
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Ontico
 
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the EdgeEdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the EdgeAkamai Developers & Admins
 
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...Bart Uelen
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜崇之 清水
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftOleksandr Stepanov
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...Wim Selles
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyLaunchAny
 
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...Amazon Web Services
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmsom_nangia
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpmwilburlo
 
Pyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web appsPyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web appsDylan Jay
 

Semelhante a Testing Services Effectively (20)

Summit2011 satellites-robinf-20110605
Summit2011 satellites-robinf-20110605Summit2011 satellites-robinf-20110605
Summit2011 satellites-robinf-20110605
 
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)Mасштабирование микросервисов на Go, Matt Heath (Hailo)
Mасштабирование микросервисов на Go, Matt Heath (Hailo)
 
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the EdgeEdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
 
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
Tadhack madrid June 2014: Joris Swinnen and WebRTC Nederland "Invite my colle...
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
 
Session 4
Session 4Session 4
Session 4
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
 
Build a boat with node.js and spark.io
Build a boat with node.js and spark.ioBuild a boat with node.js and spark.io
Build a boat with node.js and spark.io
 
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
How React Native, Appium and me made each other shine @ContinuousDeliveryAmst...
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Pyrax talk
Pyrax talkPyrax talk
Pyrax talk
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in Ruby
 
Sst hackathon express
Sst hackathon expressSst hackathon express
Sst hackathon express
 
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...
Re:inventing EC2 Instance Launches with Launch Templates - SRV335 - Chicago A...
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Psgi Plack Sfpm
Psgi Plack SfpmPsgi Plack Sfpm
Psgi Plack Sfpm
 
Pyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web appsPyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web apps
 
PSGI/Plack OSDC.TW
PSGI/Plack OSDC.TWPSGI/Plack OSDC.TW
PSGI/Plack OSDC.TW
 

Mais de Alberto Leal

Designing the APIs for an internal set of services
Designing the APIs for an internal set of servicesDesigning the APIs for an internal set of services
Designing the APIs for an internal set of servicesAlberto Leal
 
Contribuindo com a comunidade Open Source
Contribuindo com a comunidade Open SourceContribuindo com a comunidade Open Source
Contribuindo com a comunidade Open SourceAlberto Leal
 
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?Caipira Ágil - Afinal, testes atrasam o desenvolvimento?
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?Alberto Leal
 
Git - O Rebase Pode Te Assustar
Git - O Rebase Pode Te AssustarGit - O Rebase Pode Te Assustar
Git - O Rebase Pode Te AssustarAlberto Leal
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On RailsAlberto Leal
 

Mais de Alberto Leal (6)

Designing the APIs for an internal set of services
Designing the APIs for an internal set of servicesDesigning the APIs for an internal set of services
Designing the APIs for an internal set of services
 
Contribuindo com a comunidade Open Source
Contribuindo com a comunidade Open SourceContribuindo com a comunidade Open Source
Contribuindo com a comunidade Open Source
 
O que é dojo
O que é dojoO que é dojo
O que é dojo
 
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?Caipira Ágil - Afinal, testes atrasam o desenvolvimento?
Caipira Ágil - Afinal, testes atrasam o desenvolvimento?
 
Git - O Rebase Pode Te Assustar
Git - O Rebase Pode Te AssustarGit - O Rebase Pode Te Assustar
Git - O Rebase Pode Te Assustar
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On Rails
 

Último

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
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 Processorsdebabhi2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
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 2024The Digital Insurer
 

Último (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
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
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
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
 

Testing Services Effectively