This commit is contained in:
zhaoyafan 2023-03-21 01:18:45 +08:00
commit 93496bdd1d
4 changed files with 130 additions and 0 deletions

1
Data/accounts.csv Normal file
View File

@ -0,0 +1 @@
user,user
1 user user

25
Library/LocustBasic.py Normal file
View File

@ -0,0 +1,25 @@
from locust import task, FastHttpUser, constant, between
from locust.main import main
import csv
import sys
import os
class CsvDataReader:
__point = 0
def __init__(self, filename: str, encoding=None):
filename = '%s%s%s/%s' % (os.path.dirname(os.path.dirname(__file__)), os.sep, 'Data', filename)
try:
open(filename).read(4096)
except UnicodeDecodeError:
encoding = 'utf-8'
self.csv_data = [row for row in csv.reader(open(filename, encoding=encoding))]
self.csv_data_length = len(self.csv_data)
if self.csv_data_length == 0:
raise Exception('No data in file %s.' % filename)
def read(self):
data = self.csv_data[self.__point % self.csv_data_length]
self.__point += 1
return data

104
locustfile.py Normal file
View File

@ -0,0 +1,104 @@
from Library.LocustBasic import *
Account = CsvDataReader('accounts.csv')
class Test(FastHttpUser):
token = ''
wait_time = between(0.5, 0.8)
def on_start(self):
account = Account.read()
with self.client.request(
method='POST',
url='/api/user/login',
data={
'username': account[0],
'password': account[1]
},
catch_response=True
) as response:
pass
if response.status_code == 200 and response.json()['code'] == 0:
self.token = response.json()['data']['token']
else:
response.failure(Exception('Login failed.'))
self.stop()
@task(30)
def api_task(self):
with self.client.request(
method='GET',
url='/api/task?page_size=20&page=1&id=&protocol=&name=&tag=&host_id=&status=',
headers={
'Auth-Token': self.token
},
catch_response=True
) as response:
if response.status_code == 200 and response.json()['code'] == 0:
pass
else:
response.failure(Exception('%s: %.64s' % (response.status_code, response.text)))
@task(30)
def api_logs(self):
with self.client.request(
method='GET',
url='/api/task/log?page_size=20&page=1&task_id=&protocol=&status=',
headers={
'Auth-Token': self.token
},
catch_response=True
) as response:
if response.status_code == 200 and response.json()['code'] == 0:
pass
else:
response.failure(Exception('%s: %.64s' % (response.status_code, response.text)))
@task(25)
def api_host(self):
with self.client.request(
method='GET',
url='/api/host?page_size=20&page=1&id=&name=&alias=',
headers={
'Auth-Token': self.token
},
catch_response=True
) as response:
if response.status_code == 200 and response.json()['code'] == 0:
pass
else:
response.failure(Exception('%s: %.64s' % (response.status_code, response.text)))
@task(15)
def api_user(self):
with self.client.request(
method='GET',
url='/api/user',
headers={
'Auth-Token': self.token
},
catch_response=True
) as response:
if response.status_code == 200 and response.json()['code'] == 0:
pass
else:
response.failure(Exception('%s: %.64s' % (response.status_code, response.text)))
if __name__ == '__main__':
# Locust file, default self.
sys.argv.append('--locustfile=%s' % __file__)
# Host to load test.
sys.argv.append('--host=http://fanscloud.net:5920')
# Host to bind the web interface to. Defaults to '*' (all interfaces)
sys.argv.append('--web-host=127.0.0.1')
# Peak number of concurrent Locust users.
# Primarily used together with --headless or --autostart.
sys.argv.append('--users=250')
# Rate to spawn users at (users per second).
# Primarily used together with --headless or --autostart
sys.argv.append('--spawn-rate=10')
# Primarily used together with --headless or --autostart
sys.argv.append('--run-time=3m')
sys.exit(main())

BIN
requirements.txt Normal file

Binary file not shown.