#python #unit-testing #pytest #fastapi
Вопрос:
Я новичок в pytest и работаю над тестированием кода. Как бы то ни было, результат теста, показывающий, не удался.
**main.py**
@app.post("/loginsuccess/", response_class=HTMLResponse)
async def login_success(request: Request, username: str = Form(...), password: str = Form(...)):
p = await User_Pydantic.from_tortoise_orm(await User.get(username=username, password=password))
json_compatible_item_data = jsonable_encoder(p)
if json_compatible_item_data is not None:
logger.info("Logged in Successfully")
return templates.TemplateResponse("homepage.html", {"request": request, "username":username})
else:
status_code:int
status_code = 500
logger.error("Invalid Credentials")
return templates.TemplateResponse("index.html", {"request":request, "status_code":status_code})
**test_main.py**
def test_login_success():
response = client.get('/loginsuccess/', json={'username': 'sheik', 'password':'abdullah'})
assert response.status_code==200
Результат теста ниже
================================================================== short test summary info ==================================================================
FAILED test_main.py::test_login_success - assert 405 == 200
Комментарии:
1. 405 означает неправильный метод HTTP. Ваша конечная точка определена для использования функции POST (
@app.post
), но в вашем тесте используется функция GET (client.get
). Таким образом, ожидается, что тест завершится неудачей.2. Привет, Джино, спасибо за твой ответ. Я изменил его, и теперь я получаю эту ошибку
3. СБОЙ test_main.py::test_login_success — утверждение 422 == 200
4. Проверьте свою конечную точку. Проверьте, какой правильный URL-адрес. Проверьте ожидаемые параметры запроса, полезную нагрузку тела или данные формы. Затем назовите это правильно в своем тесте.
5. Конечная точка верна, но я застрял на том, как передать значения имени пользователя и пароля в тест, чтобы проверить это
Ответ №1:
на самом деле ответ, который вы получаете от сервера, равен 405, а не 200. Вот почему ваше утверждение терпит неудачу.
HTTP 405-метод Не разрешен Код статуса ответа указывает, что метод запроса известен серверу, но не поддерживается целевым ресурсом.
Просто убедитесь, что сервер/серверная часть обрабатывает /loginsuccess/
как Post-запрос, похоже, что ваш запрос содержит недопустимые аргументы или серверная часть настроена неправильно.
Комментарии:
1. Я изменил его, теперь я получаю эту ошибку с ошибкой test_main.py::test_login_success — утверждение 422 == 200
2. Не могли бы вы, пожалуйста, подсказать мне, как это исправить
3. вы использовали client.post сейчас?
4. да, я использовал его…после его использования я получаю эту ошибку с ошибкой test_main.py::test_login_success — assert 422 == 200
5. вам также необходимо передать данные в виде объекта json, импортировать J=json foo = {«имя пользователя»: «шейх», «пароль»: «абдулла»} json_data = json.dumps(foo), затем передать эти данные клиенту.post()
Ответ №2:
вам также необходимо передать данные в виде объекта json,
import json
foo = {'username': 'sheik', 'password':'abdullah'}
json_data = json.dumps(foo)
затем передайте эти данные клиенту.post()