Using middleware to simulate network latency¶
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.
Let’s begin by writing our middleware. Save the following as
#!/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 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.
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.