Add locust perf testing

This commit is contained in:
Niklas Fondberg
2020-03-03 11:20:28 +01:00
committed by GitHub
parent 723aa1c026
commit 71cf7f5281
2 changed files with 87 additions and 8 deletions
+17 -8
View File
@@ -4,21 +4,23 @@ Provides a REST API to Photowall database.
## Installation ## Installation
Make sure that your system has Python version 3.4 installed. If you dont have it here is how you install it on Ubuntu 12.04: Make sure that your system has Python version 3.6 installed.
```
$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python3.4 python3.4-dev build-essential libpq-dev
```
Next its recommended that you create a [virtualenv](http://docs.python-guide.org/en/latest/dev/virtualenvs/) of python 3.4 and install all packages in it. Next its recommended that you create a [virtualenv](http://docs.python-guide.org/en/latest/dev/virtualenvs/) of python 3.6 and install all packages in it.
To do that execute the following commands in your project folder: To do that execute the following commands in your project folder:
``` ```
$ virtualenv -p /usr/bin/python3.4 venv $ virtualenv -p /usr/bin/python3.6 venv
$ source venv/bin/activate $ source venv/bin/activate
$ pip install -r requirements.txt $ pip install -r requirements.txt
``` ```
## Local testing with docker
Make sure you edit `docker-compose.yml` with correct environment variables.
This will launch the production image and listen on port 1881.
```
$ docker-compose up --force-recreate --build -d
```
## Documentation ## Documentation
Documentation is available [here](docs) Documentation is available [here](docs)
@@ -55,3 +57,10 @@ The staging branch is automatically synced from master on new commits to master.
To run unit tests: To run unit tests:
`$ python -m unittest` `$ python -m unittest`
## Performance testing with Locust
Run locally
```
$ pip install locust
$ USERNAME=user locust --host=http://localhost:1881
```
+70
View File
@@ -0,0 +1,70 @@
import random
import os
from locust import HttpLocust, TaskSet, task, between
"""
## Performance testing with Locust
Run locally
```
$ pip install locust
$ USERNAME=user locust --host=http://localhost:1880
```
"""
username = os.environ.get("USERNAME")
password = ""
products = {
"58339",
"46768",
"48067",
"60643",
"62101",
}
markets = {
"SE",
"GB",
"NO",
"DE"
}
product_query = {
"wallpaper?width=100&height=100",
"canvas?width=100&height=70",
"poster?width=70&height=50",
"framed-print?sku=GLOBAL-CFP-20x28"
}
def random_product():
return random.sample(products, 1)[0]
def random_market():
return random.sample(markets, 1)[0]
def random_product_query():
return random.sample(product_query, 1)[0]
class QueryTaskSet(TaskSet):
def on_start(self):
self.client.auth = (username, password)
@task(10)
def product_price(self):
""" get random product with details"""
self.client.get("/prices/{0}&territory={1}&product={2}".format(random_product_query(), random_market(),random_product()))
@task(1)
def stop(self):
self.interrupt()
class UserBehaviour(TaskSet):
tasks = {QueryTaskSet: 10}
class Api2Locust(HttpLocust):
task_set = UserBehaviour
wait_time = between(0.100, 3)