Skip to content

Instantly share code, notes, and snippets.

@sokoow
Created January 19, 2022 08:21
Show Gist options
  • Select an option

  • Save sokoow/f34a948568e772a415236a8c4f21f1e6 to your computer and use it in GitHub Desktop.

Select an option

Save sokoow/f34a948568e772a415236a8c4f21f1e6 to your computer and use it in GitHub Desktop.
import random
from locust import HttpUser, task, between, SequentialTaskSet
from datetime import date, timedelta
class BaseFlow(SequentialTaskSet):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.category_id = None
self.business_id = None
self.service_variant = None
self.time_slot = None
self.service = None
self.resource_id = None
self.booked_from = None
@task
def login(self):
client_email_id = random.randrange(1, 999)
payload = {
'email': f'locust{client_email_id}@business.net',
'password': '12345678'
}
response = self.get_response("/login/", payload)
self.user.access_token = response['access_token']
self.user.headers.update({
"x-access-token": response['access_token'],
})
@task
def my_welcome_screen(self):
url = '/customer_api/welcome_screen/'
response = self.get_response(url)
self.category_id = random.choice(response['welcome_categories_by_location'])
@task
def business_listing(self):
url = f'/customer_api/clients/?' \
f'no_thumbs=true&category={self.category_id}&'
response = self.get_response(url)
if not response['clients']:
self.interrupt()
self.business_id = random.choice(response['clients'])['id']
def get_response(self, url, payload=None):
if payload:
response = self.client.post(url, headers=self.user.headers, json=payload)
else:
response = self.client.get(url, headers=self.user.headers)
if response.status_code >= 400:
self.interrupt()
return response.json()
class BusinessUser(HttpUser):
wait_time = between(0.1, 1)
tasks = [BaseFlow]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.access_token = ''
self.headers = {
'api-key': 'test-perf-12345',
}
@sokoow
Copy link
Author

sokoow commented Jan 19, 2022

dockerfile:

version: '3'

services:
  master:
    image: locustio/locust
    ports:
     - "8089:8089"
    volumes:
      - ./:/mnt/locust
    command: -f /mnt/locust/locustfile.py --master -H https://moj-testowany-url.pl
  worker:
    image: locustio/locust
    volumes:
      - ./:/mnt/locust
    command: -f /mnt/locust/locustfile.py --worker --master-host master

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment