> For the complete documentation index, see [llms.txt](https://hanfak.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanfak.gitbook.io/workspace/testing-reading-maintaining/service-virtualization.md).

# Service-virtualization and api mocking

* is also called API simulation or an API mock.
* It is the practice of replacing real dependent components with test versions created using powerful service-virtualization tools.
* Service-virtualization tools allow a simulator-like experience but with less effort from developers and testers.
* Instead of building a custom test double per dependency, off-the-shelf tools take care of the boilerplate functionality that is common across typical handwritten implementations.
* Service-virtualization tools generally offer more features than stubs or mocks, like recording requests and responses or built-in support for multiple technologies like HTTP, JMS, FTP, or gRPC.
* Test without relying on the real service
* Test in hypothetical or hard to test scenarios
* Test more scenarios with less efforts
* Simulators are called virtual services

## why use

* Reduce costs
  * complexity
  * time to market
  * risk
* shift left , accelerate delivery
  * dev teams can work in parallel
  * test teams detect defects early
* simulate the dependencies
  * simulate test env
  * reduce infrastructure costs
  * remove bottle necks
  * less manual test data management
* automate sooner
  * create automated suites of tests with less effort
* simulate third party
  * reduce interaction with third party
  * reduce costs
* more agile
  * decouple other teams and systems

## Benefits

* unblocking testers and devs waiting for APIs
* easier and faster to reproduce bugs in prod
* speed up setting up test data
* eliminate the need for scheduling time on env
* reduce third party transaction costs
* performance tests become more reliable
* automated builds run faster

## Creating virtual services

* recording traffic and replaying it when systems is intereacting with it
* creating manually
  * using documentations and examples
* importing from logs
* generating from schemas ie swagger, open api

## What can you do

* test systems without relying on dependent components
* setting up test data
* simulating api Errors
* simulate protocol specific errors
* simulate slow responses
