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}")