|
import time, uuid |
|
from locust import HttpUser, task, between |
|
|
|
# В этом классе содержатся все действия: которые будет выполнять юзер |
|
class QuickstartUser(HttpUser): |
|
# сколько времени юзер ждет, прежде чем сделать следующий запрос |
|
wait_time = between(1, 2) |
|
|
|
# здесь и ниже - запросы, который делают юзер |
|
# чтобы добавить новую команду - нужно добавить аналогичный метод |
|
# например, добавляем запрос DELETE v2/[uuid]/logout: |
|
# |
|
# @task(1) |
|
# def logout(self): |
|
# self.make_request('logout', method='DELETE') |
|
# |
|
# если нужны параметры в GET-запрос, они добавляются через params={'key':'value'}: |
|
# self.make_request('something', params={'key':'value'}) |
|
# |
|
# если нужны json-данные в POST/PUT/PATCH - нужно исполбзовать json=: |
|
# self.make_request('something', method='POST', json={'key':'value'}) |
|
# |
|
@task(1) # 1 - это вес запроса, чем он больше - чем чаще этот запрос будет выполняться относительно других |
|
def profile(self): |
|
self.make_request('profile') |
|
|
|
@task(1) |
|
def configuration(self): |
|
self.make_request('configuration') |
|
|
|
@task(1) |
|
def quest_daily(self): |
|
self.make_request('quest/daily') |
|
|
|
@task(1) |
|
def profile_dailyBonus(self): |
|
self.make_request('profile/dailyBonus') |
|
|
|
@task(1) |
|
def profile_message(self): |
|
self.make_request('profile/message') |
|
|
|
@task(1) |
|
def achievement(self): |
|
self.make_request('achievement') |
|
|
|
@task(1) |
|
def shop(self): |
|
self.make_request('shop') |
|
|
|
@task(1) |
|
def roulette(self): |
|
self.make_request('roulette') |
|
|
|
@task(1) |
|
def quest_expedition(self): |
|
self.make_request('quest/expedition?type=free', params={"type":"free"}) |
|
|
|
@task(1) |
|
def level(self): |
|
self.make_request('level') |
|
|
|
@task(1) |
|
def level_idleReward_proportion(self): |
|
self.make_request('level/idleReward/proportion') |
|
|
|
@task(1) |
|
def level_idleReward(self): |
|
self.make_request('level/idleReward') |
|
|
|
@task(1) |
|
def post_level_idleReward(self): |
|
self.make_request('level/idleReward', method='POST') |
|
|
|
# здесь все, что происходит при создании нового юзера |
|
# - получение токена |
|
# - создание аккаунта |
|
# - логин |
|
def on_start(self): |
|
self.uuid = str(uuid.uuid4()) |
|
self.authToken = '' |
|
|
|
# client configuration |
|
self.make_request( |
|
'clientConfiguration', |
|
params={"applicationVersion": "0.0.1", "applicationPackageName": "com.wakeappgames.worldofheroes" }, |
|
) |
|
|
|
# client version |
|
self.make_request( |
|
'clientVersion', |
|
params={"version":"0.0.1","applicationPackageName":"com.wakeappgames.worldofheroes"} |
|
) |
|
|
|
# get the token |
|
response = self.make_request( |
|
'token', |
|
json={ |
|
"sessionId": str(uuid.uuid4()), |
|
"installId": str(uuid.uuid4()), |
|
"applicationPackageName":"com.wakeappgames.worldofheroes", |
|
"applicationVersion":"0.0.1", |
|
"appsflyerId":"", |
|
"idfa":"", |
|
"locale":"ru", |
|
"model":"MacBookPro11,5", |
|
"osVersion":"10.15.7", |
|
"platform":"Iphone", |
|
"pushToken":"", |
|
"udid":self.uuid |
|
}, |
|
method='POST' |
|
) |
|
|
|
self.authToken = response.json()['data']['token'] |
|
|
|
# create the user |
|
self.make_request( |
|
'account', |
|
json={ |
|
"login":self.uuid, |
|
"password":"", |
|
"type":"Device" |
|
}, |
|
method='POST' |
|
) |
|
|
|
# login |
|
self.make_request( |
|
'login', |
|
json={ |
|
"login":self.uuid, |
|
"password":"", |
|
"type":"Device" |
|
}, |
|
method='PUT' |
|
) |
|
|
|
# через этот метод делаются все запросы к бэку, сделан для удобства: |
|
# - сам генерирует url по заданному action и uuid пользователя |
|
# - подставляет авторизационный токен |
|
# - обрабатывает json-ответ от сервера и проверяет его успешность |
|
def make_request(self, action, params={}, data={}, json={}, method='GET'): |
|
with self.client.request( |
|
method, |
|
f'/v2/{self.uuid}/{action}', |
|
data=data, |
|
json=json, |
|
params=params, |
|
name=f'/v2/[uuid]/{action}', |
|
headers={"SignatureDisable": "1", "Authorization":f'Bearer {self.authToken}'}, |
|
catch_response=True, |
|
timeout=10 |
|
) as response: |
|
if response.status_code != 200: |
|
response.failure(str(response.text) or str(response.status_code)) |
|
return response |
|
|
|
message = response.json()['message'] |
|
if message == 'Successfully' or message == 'Успешно': |
|
response.success() |
|
else: |
|
response.failure(message) |
|
|
|
return response |