Получение сообщения "Authentication Credentials Were not Provided" при тестировании конечной точки DRF на Locust
Я пытаюсь провести нагрузочное тестирование конечной точки, которая позволяет пользователям создавать посты с помощью locust, стоит упомянуть, что пользователи должны быть аутентифицированы, прежде чем они смогут получить доступ к этой конечной точке.
Проблема: Когда я обращаюсь к конечной точке с помощью locust, я продолжаю получать ошибку "Authentication provided were not provided", хотя я сделал это, и я также настроил свою конечную точку на прием токена (я использую функцию токена DRF по умолчанию). Есть идеи, что я делаю не так? Любая помощь будет принята с благодарностью. Ниже приведен мой код:
Файл саранчи
class ListPostUser(HttpUser):
wait_time = between(1, 5)
@task(3)
def create_post(self):
data = {
"title": "This is another random title",
"body": "This is the body of a randomly titled post"
}
headers = {
"Authorization": "Token 508e650b0ca1613818939089190a1661a75865b1"
}
response = self.client.post("blog/create", json=data, headers=headers)
print(response)
print(response.json())
@task
def comment_detail(self):
self.client.get("blog/comment/1")
@task(2)
def post_detail(self):
self.client.get("blog/post/1")
def on_start(self):
self.client.post("login/", json={"username": "username", "password": "mypassword"})
просматривает файл
class CreatePostAPI(APIView):
permission_classes = (IsAuthenticated, )
def post(self, request):
serializer = CreatePostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=self.request.user)
return Response(serializer.data, status=status.HTTP_200_OK)
Я также должен отметить, что конечная точка работает нормально на POSTMAN, я получаю ошибку только при нагрузочном тестировании с locust
Не уверен, что это поможет вам найти реальную проблему, но вы можете исследовать точную отправленную полезную нагрузку, изучив response.request
, например, так:
print(response.request.headers)
print(response.request.data)
Я наконец нашел решение проблемы, все, что мне нужно было сделать, это добавить TokenAuthentication
в список классов аутентификации по умолчанию в файле settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':
[
'rest_framework.authentication.TokenAuthentication',
...
],
}