Files
robot-shop/load-gen/robot-shop.py

99 lines
3.8 KiB
Python
Raw Permalink Normal View History

2019-02-11 16:18:15 +00:00
import os
import random
2020-06-23 10:37:11 +01:00
from locust import HttpUser, task, between
2018-02-13 12:35:08 +00:00
from random import choice
2018-08-21 14:47:19 +01:00
from random import randint
2018-02-06 15:51:43 -05:00
2020-06-23 10:37:11 +01:00
class UserBehavior(HttpUser):
wait_time = between(2, 10)
# source: https://tools.tracemyip.org/search--ip/list
fake_ip_addresses = [
# white house
"156.33.241.5",
# Hollywood
"34.196.93.245",
# Chicago
"98.142.103.241",
# Los Angeles
"192.241.230.151",
# Berlin
"46.114.35.116",
# Singapore
"52.77.99.130",
# Sydney
"60.242.161.215"
]
2018-02-06 15:51:43 -05:00
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
print('Starting')
@task
2018-02-13 12:35:08 +00:00
def login(self):
fake_ip = random.choice(self.fake_ip_addresses)
2018-02-13 12:35:08 +00:00
credentials = {
'name': 'user',
'password': 'password'
}
res = self.client.post('/api/user/login', json=credentials, headers={'x-forwarded-for': fake_ip})
2018-02-13 12:35:08 +00:00
print('login {}'.format(res.status_code))
2018-02-06 15:51:43 -05:00
@task
2018-02-13 12:35:08 +00:00
def load(self):
fake_ip = random.choice(self.fake_ip_addresses)
self.client.get('/', headers={'x-forwarded-for': fake_ip})
user = self.client.get('/api/user/uniqueid', headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
uniqueid = user['uuid']
print('User {}'.format(uniqueid))
2020-11-02 13:27:45 +01:00
self.client.get('/api/catalogue/categories', headers={'x-forwarded-for': fake_ip})
2018-02-13 12:35:08 +00:00
# all products in catalogue
2020-11-02 13:27:45 +01:00
products = self.client.get('/api/catalogue/products', headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
for i in range(2):
item = None
while True:
item = choice(products)
if item['instock'] != 0:
break
2018-08-21 14:47:19 +01:00
# vote for item
if randint(1, 10) <= 3:
self.client.put('/api/ratings/api/rate/{}/{}'.format(item['sku'], randint(1, 5)), headers={'x-forwarded-for': fake_ip})
2018-08-21 14:47:19 +01:00
self.client.get('/api/catalogue/product/{}'.format(item['sku']), headers={'x-forwarded-for': fake_ip})
self.client.get('/api/ratings/api/fetch/{}'.format(item['sku']), headers={'x-forwarded-for': fake_ip})
self.client.get('/api/cart/add/{}/{}/1'.format(uniqueid, item['sku']), headers={'x-forwarded-for': fake_ip})
2018-02-13 12:35:08 +00:00
cart = self.client.get('/api/cart/cart/{}'.format(uniqueid), headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
item = choice(cart['items'])
self.client.get('/api/cart/update/{}/{}/2'.format(uniqueid, item['sku']), headers={'x-forwarded-for': fake_ip})
2018-02-13 12:35:08 +00:00
# country codes
code = choice(self.client.get('/api/shipping/codes', headers={'x-forwarded-for': fake_ip}).json())
city = choice(self.client.get('/api/shipping/cities/{}'.format(code['code']), headers={'x-forwarded-for': fake_ip}).json())
2018-02-13 12:35:08 +00:00
print('code {} city {}'.format(code, city))
shipping = self.client.get('/api/shipping/calc/{}'.format(city['uuid']), headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
shipping['location'] = '{} {}'.format(code['name'], city['name'])
print('Shipping {}'.format(shipping))
# POST
cart = self.client.post('/api/shipping/confirm/{}'.format(uniqueid), json=shipping, headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
print('Final cart {}'.format(cart))
order = self.client.post('/api/payment/pay/{}'.format(uniqueid), json=cart, headers={'x-forwarded-for': fake_ip}).json()
2018-02-13 12:35:08 +00:00
print('Order {}'.format(order))
2019-02-11 16:18:15 +00:00
@task
def error(self):
2021-03-17 15:30:51 +00:00
fake_ip = random.choice(self.fake_ip_addresses)
2019-03-04 12:52:55 +00:00
if os.environ.get('ERROR') == '1':
2019-02-11 16:18:15 +00:00
print('Error request')
cart = {'total': 0, 'tax': 0}
self.client.post('/api/payment/pay/partner-57', json=cart, headers={'x-forwarded-for': fake_ip})
2019-02-11 16:18:15 +00:00
2018-02-06 15:51:43 -05:00