from locust import HttpUser, task, between
import random
import uuid
class RantCommunityUser(HttpUser):
wait_time = between(1, 5)
host = "http://127.0.0.1:8111"
def on_start(self):
self.token_id = random.randint(1, 1000)
self.token_key = str(uuid.uuid4())
self.user_id = random.randint(1, 1000)
self.username = f"user_{self.user_id}"
self.password = "testpassword123"
@task(2)
def home_page(self):
self.client.get(f"/?sort=recent")
@task(2)
def rant_detail(self):
rant_id = random.randint(1, 100)
self.client.get(f"/rant/{rant_id}")
@task(2)
def profile_page(self):
user_id = random.randint(1, 100)
tab = random.choice(["rants", "comments", "favorites"])
self.client.get(f"/profile/{user_id}?tab={tab}")
@task(1)
def search_page(self):
term = random.choice(["test", "rant", "community"])
self.client.get(f"/search?term={term}")
@task(1)
def notifications(self):
self.client.get("/notifications")
@task(1)
def classic_page(self):
self.client.get("/classic")
@task(1)
def login(self):
self.client.post("/login", data={
"username": self.username,
"password": self.password
})
@task(1)
def logout(self):
self.client.get("/logout")
@task(1)
def register_user(self):
self.client.post("/api/users", data={
"email": f"{self.username}@example.com",
"username": self.username,
"password": self.password,
"type": 1,
"app": 3
})
@task(1)
def auth_token(self):
self.client.post("/api/users/auth-token", data={
"username": self.username,
"password": self.password,
"app": 3
})
@task(3)
def get_rants(self):
self.client.get(f"/api/rant/rants?sort=recent&limit=20&skip=0&app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(2)
def create_rant(self):
self.client.post("/api/rant/rants", data={
"rant": "This is a test rant",
"tags": "test,example",
"type": 1,
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(2)
def get_rant(self):
rant_id = random.randint(1, 100)
self.client.get(f"/api/rant/rants/{rant_id}?app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(1)
def update_rant(self):
rant_id = random.randint(1, 100)
self.client.post(f"/api/rant/rants/{rant_id}", data={
"rant": "Updated test rant",
"tags": "test,updated",
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def delete_rant(self):
rant_id = random.randint(1, 100)
self.client.delete(f"/api/rant/rants/{rant_id}?app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(2)
def vote_rant(self):
rant_id = random.randint(1, 100)
self.client.post(f"/api/rant/rants/{rant_id}/vote", data={
"vote": random.choice([1, -1]),
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def favorite_rant(self):
rant_id = random.randint(1, 100)
self.client.post(f"/api/rant/rants/{rant_id}/favorite", data={
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def unfavorite_rant(self):
rant_id = random.randint(1, 100)
self.client.post(f"/api/rant/rants/{rant_id}/unfavorite", data={
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(2)
def create_comment(self):
rant_id = random.randint(1, 100)
self.client.post(f"/api/rant/rants/{rant_id}/comments", data={
"comment": "Test comment",
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def get_comment(self):
comment_id = random.randint(1, 100)
self.client.get(f"/api/comments/{comment_id}?app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(1)
def update_comment(self):
comment_id = random.randint(1, 100)
self.client.post(f"/api/comments/{comment_id}", data={
"comment": "Updated test comment",
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def delete_comment(self):
comment_id = random.randint(1, 100)
self.client.delete(f"/api/comments/{comment_id}?app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(1)
def vote_comment(self):
comment_id = random.randint(1, 100)
self.client.post(f"/api/comments/{comment_id}/vote", data={
"vote": random.choice([1, -1]),
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def get_profile(self):
user_id = random.randint(1, 100)
self.client.get(f"/api/users/{user_id}?app=3&token_id={self.token_id}&token_key={self.token_key}&auth_user_id={self.user_id}")
@task(1)
def get_user_id(self):
self.client.get(f"/api/get-user-id?username={self.username}&app=3")
@task(1)
def search(self):
term = random.choice(["test", "rant", "community"])
self.client.get(f"/api/rant/search?term={term}&app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(1)
def get_notifications(self):
self.client.get(f"/api/users/me/notif-feed?ext_prof=1&app=3&token_id={self.token_id}&token_key={self.token_key}&user_id={self.user_id}")
@task(1)
def clear_notifications(self):
self.client.delete(f"/api/users/me/notif-feed", data={
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def edit_profile(self):
self.client.post("/api/users/me/edit-profile", data={
"profile_about": "Test about",
"profile_skills": "Python,Testing",
"profile_location": "Test City",
"profile_website": "http://example.com",
"profile_github": "http://github.com/test",
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def forgot_password(self):
self.client.post("/api/users/forgot-password", data={
"username": self.username,
"app": 3
})
@task(1)
def resend_confirmation(self):
self.client.post("/api/users/me/resend-confirm", data={
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def mark_news_read(self):
news_id = str(uuid.uuid4())
self.client.post("/api/users/me/mark-news-read", data={
"news_id": news_id,
"app": 3,
"token_id": self.token_id,
"token_key": self.token_key,
"user_id": self.user_id
})
@task(1)
def get_upload(self):
filename = f"test_{random.randint(1, 100)}.jpg"
self.client.get(f"/uploads/{filename}")