СБОЙ test_main.py::test_login_success — утверждение 405 == 200

#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()