Using middleware to simulate network latencyΒΆ
See also
Please carefully read through Middleware alongside these tutorials to gain a high-level understanding of what we are about to cover.
We will use a Python script to apply a random delay of less than one second to every response in a simulation.
Before you proceed, please ensure that you have Python installed.
Let’s begin by writing our middleware. Save the following as middleware.py
:
#!/usr/bin/env python
import sys
import logging
import random
from time import sleep
logging.basicConfig(filename='random_delay_middleware.log', level=logging.DEBUG)
logging.debug('Random delay middleware is called')
# set delay to random value less than one second
SLEEP_SECS = random.random()
def main():
data = sys.stdin.readlines()
# this is a json string in one line so we are interested in that one line
payload = data[0]
logging.debug("sleeping for %s seconds" % SLEEP_SECS)
sleep(SLEEP_SECS)
# do not modifying payload, returning same one
print(payload)
if __name__ == "__main__":
main()
The middleware script delays each response by a random value of less than one second.
hoverctl start
hoverctl mode capture
curl --proxy http://localhost:8500 http://time.jsontest.com
hoverctl mode simulate
hoverctl middleware --binary python --script middleware.py
curl --proxy http://localhost:8500 http://time.jsontest.com
hoverctl stop
Middleware gives you control over the behaviour of a simulation, as well as the data.
Note
Middleware gives you flexibility when simulating network latency - allowing you to randomize the delay value for example - but a new process is spawned every time the middleware script is executed. This can impact Hoverfly’s performance under load.
If you need to simulate latency during a load test, it is recommended that you use Hoverfly’s native Delays functionality to simulate network latency (see Adding delays to a simulation) instead of writing middleware. The delays functionality sacrifices flexibility for performance.