Я пытаюсь запустить скрипт саранчи на моем сайте, чтобы выполнить нагрузочные тесты.Я создал фиктивного пользователя на своем сайте и настроил этот скрипт для саранчи
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
""" on_start is called when a Locust start before any task is scheduled """
self.login()
def on_stop(self):
""" on_stop is called when the TaskSet is stopping """
self.logout()
def login(self):
response = self.client.post("/auth/login", {"email": LOCUST_USER_EMAIL, "password": LOCUST_USER_PASSWORD})
def logout(self):
self.client.get("/auth/logout")
@task(10)
def index(self):
self.client.get("/")
@task(5)
def access_protected_view(self):
self.client.get("/protected_view")
class WebsiteUser(HttpLocust):
host = "https://example.com"
task_set = UserBehavior
min_wait = 5000
max_wait = 9000
Если я запускаю его с помощью веб-приложения саранчи, я получаю
36 GET /protected_view HTTPError('403 Client Error: FORBIDDEN for url: https://example.com/protected_view',)
Я могувойдите в систему, используя учетные данные этого фиктивного пользователя, и без проблем наберите protected_view
.Я использую flask_login
для аутентификации моих пользователей, в частности
@auth.route('/auth/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user is not None and user.verify_password(form.password.data):
login_user(user, form.remember_me.data)
flash('Login successful.', 'success')
next = request.args.get('next')
if next is None or not next.startswith('/'):
next = url_for('main.index')
return redirect(next)
flash('Invalid username or password.', 'warning')
return render_template('auth/login.html', form=form)
@auth.route('/auth/logout')
@login_required
def logout():
logout_user()
flash("You have been succesfully logged out", 'success')
return "logout" # "main blueprint
Я не знаю, есть ли что-то, но для моего защищенного представления используется декоратор, который требует группу пользователей (к которому мой фиктивный пользователь тоже имеет доступ)
from flask_login import current_user
def group_required(group):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.is_member_of(group) or current_user.is_anonymous:
abort(403)
return f(*args, **kwargs)
return decorated_function
return decorator
это украшает представление
@app.route('/protected_view')
@group_required('group1') # dummy user has access to group1
def protected_view():
return "okay"
, чтобы подвести итог: как я должен получить доступ к защищенным представлениям с пользователями саранчи?Что мне здесь не хватает?