diff --git a/README.md b/README.md index cf46b34..3cc4d86 100644 --- a/README.md +++ b/README.md @@ -1 +1,30 @@ -# Diplom_2 \ No newline at end of file +# Diplom_2 +# Автотесты для API +Протестированы эндпоинты API для Stellar Burgers. +URL: https://stellarburgers.education-services.ru/ +API документация: https://code.s3.yandex.net/qa-automation-engineer/python-full/diploma/Api-Stellar_Burgers.pdf + +# Протестировано +Создание пользователя: +- создать уникального пользователя; +- создать пользователя, который уже зарегистрирован; +- создать пользователя и не заполнить одно из обязательных полей. +Логин пользователя: +- вход под существующим пользователем; +- вход с неверным логином и паролем. +Создание заказа: +- с авторизацией; +- без авторизации; +- с ингредиентами; +- без ингредиентов; +- с неверным хешем ингредиентов. + +# Инструкция по запуску: +1. Установка зависимостей: +pip install -r requirements.txt + +2. Запуск всех тестов и запись отчета: +pytest --alluredir=./allure-results + +3. Просмотр отчета по прогону html +allure serve ./allure-results \ No newline at end of file diff --git a/allure-results/0b35f644-dfda-451f-b58c-6340ee7f9541-container.json b/allure-results/0b35f644-dfda-451f-b58c-6340ee7f9541-container.json new file mode 100644 index 0000000..d79d01e --- /dev/null +++ b/allure-results/0b35f644-dfda-451f-b58c-6340ee7f9541-container.json @@ -0,0 +1 @@ +{"uuid": "bda0e1f6-a713-4c14-b3bc-ac9658d80abe", "befores": [{"name": "field", "status": "passed", "start": 1771964743803, "stop": 1771964743803}], "start": 1771964743803, "stop": 1771964744303} \ No newline at end of file diff --git a/allure-results/1209faa5-e95b-4ded-a267-dc9cd18a8bfb-result.json b/allure-results/1209faa5-e95b-4ded-a267-dc9cd18a8bfb-result.json new file mode 100644 index 0000000..8ce31c2 --- /dev/null +++ b/allure-results/1209faa5-e95b-4ded-a267-dc9cd18a8bfb-result.json @@ -0,0 +1 @@ +{"name": "Создание заказа без авторизации", "status": "failed", "statusDetails": {"message": "AssertionError: assert 200 == 401\n + where 200 = .status_code", "trace": "self = , get_available_ingredients = ['61c0c5a71d1f82001bdaaa6d', '61c0c5a71d1f82001bdaaa6f']\n\n @allure.title('Создание заказа без авторизации')\n def test_create_order_without_auth_error_401(self, get_available_ingredients):\n with allure.step('Отправить POST-запрос на создание заказа без токена'):\n response = OrderMethods.create_order(get_available_ingredients)\n \n with allure.step('Проверить, что статус-код 401 и ошибка \"You should be authorised\"'):\n> assert response.status_code == 401 # Ожидаем 401 по документации, но сервер возвращает 200, тест будет падать\nE assert 200 == 401\nE + where 200 = .status_code\n\ntests\\test_order_create.py:59: AssertionError"}, "steps": [{"name": "Отправить POST-запрос на создание заказа без токена", "status": "passed", "start": 1771964737621, "stop": 1771964738127}, {"name": "Проверить, что статус-код 401 и ошибка \"You should be authorised\"", "status": "failed", "statusDetails": {"message": "AssertionError: assert 200 == 401\n + where 200 = .status_code\n", "trace": " File \"C:\\Users\\BOSS\\Diplom\\Diplom_2\\tests\\test_order_create.py\", line 59, in test_create_order_without_auth_error_401\n assert response.status_code == 401 # Ожидаем 401 по документации, но сервер возвращает 200, тест будет падать\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"}, "start": 1771964738128, "stop": 1771964738128}], "start": 1771964737621, "stop": 1771964738134, "uuid": "9de0406e-9c2f-4b33-b0f9-30e52af798b6", "historyId": "ba1c41154d9a5c5a9443de1c4c141fb5", "testCaseId": "ba1c41154d9a5c5a9443de1c4c141fb5", "fullName": "tests.test_order_create.TestOrderCreation#test_create_order_without_auth_error_401", "labels": [{"name": "feature", "value": "Создание заказа"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_order_create"}, {"name": "subSuite", "value": "TestOrderCreation"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_order_create"}]} \ No newline at end of file diff --git a/allure-results/154079fb-9b30-446c-a2f9-8c039c835266-container.json b/allure-results/154079fb-9b30-446c-a2f9-8c039c835266-container.json new file mode 100644 index 0000000..ca46e68 --- /dev/null +++ b/allure-results/154079fb-9b30-446c-a2f9-8c039c835266-container.json @@ -0,0 +1 @@ +{"uuid": "66335898-4a6a-46a9-bb74-52178ff6cc02", "children": ["eb8b4127-e922-4988-a077-cb38b8a5858e"], "befores": [{"name": "cleanup_user", "status": "passed", "start": 1771964738291, "stop": 1771964738291}], "afters": [{"name": "cleanup_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'john@russell-haynes.net'"}, {"name": "password", "value": "'T2#PQz5V^V'"}], "start": 1771964738840, "stop": 1771964739397}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTQyOTg0MjcwMDAxYmU1NzM2YSIsImlhdCI6MTc3MTk2NDczOSwiZXhwIjoxNzcxOTY1OTM5fQ.nTMGQhMgFm7TBKuE8vTugmIRd1gr3ckBQ29GJznKk-Q'"}], "start": 1771964739397, "stop": 1771964740483}], "start": 1771964738840, "stop": 1771964740492}], "start": 1771964738291, "stop": 1771964740493} \ No newline at end of file diff --git a/allure-results/2e9c8afb-c85c-4a42-9d55-3e7a9c556419-result.json b/allure-results/2e9c8afb-c85c-4a42-9d55-3e7a9c556419-result.json new file mode 100644 index 0000000..6945297 --- /dev/null +++ b/allure-results/2e9c8afb-c85c-4a42-9d55-3e7a9c556419-result.json @@ -0,0 +1 @@ +{"name": "Нельзя создать пользователя без обязательного поля email, password, name", "status": "passed", "steps": [{"name": "Сгенерировать валидные данные и удалить поле", "status": "passed", "start": 1771964744311, "stop": 1771964744312}, {"name": "Отправить POST-запрос на регистрацию", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'gregory@hebert.org', 'password': 'Nn_y2XFCP('}"}], "start": 1771964744312, "stop": 1771964744847}], "start": 1771964744312, "stop": 1771964744847}, {"name": "Проверить, что статус 403 и ошибка \"Email, password and name are required fields\"", "status": "passed", "start": 1771964744847, "stop": 1771964744848}], "parameters": [{"name": "field", "value": "'name'"}], "start": 1771964744311, "stop": 1771964744853, "uuid": "4dea6bae-8ab2-41e3-842a-983342ac3932", "historyId": "fe3839d72775b2c7dc1cdd99a1937fb6", "testCaseId": "f45547c715a31beab06cc5c121de4dd7", "fullName": "tests.test_user_create.TestCreateUser#test_create_user_missing_field", "labels": [{"name": "feature", "value": "Создание пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_create"}, {"name": "subSuite", "value": "TestCreateUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_create"}]} \ No newline at end of file diff --git a/allure-results/309b149c-fc3a-45ae-a728-c581744b47c3-result.json b/allure-results/309b149c-fc3a-45ae-a728-c581744b47c3-result.json new file mode 100644 index 0000000..18a26ee --- /dev/null +++ b/allure-results/309b149c-fc3a-45ae-a728-c581744b47c3-result.json @@ -0,0 +1 @@ +{"name": "Создание заказа без ингредиентов", "status": "passed", "steps": [{"name": "Авторизоваться под пользователем", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'teresa@lopez.com'"}, {"name": "password", "value": "'mb0Wlvv2I*'"}], "start": 1771964731570, "stop": 1771964732125}], "start": 1771964731569, "stop": 1771964732127}, {"name": "Отправить POST-запрос на создание заказа с пустым списком ингредиентов", "status": "passed", "start": 1771964732127, "stop": 1771964732639}, {"name": "Проверить, что статус-код 400 и ошибка \"Ingredient ids must be provided\"", "status": "passed", "start": 1771964732639, "stop": 1771964732639}], "start": 1771964731569, "stop": 1771964732644, "uuid": "e68d9c1e-614e-40b4-af5f-4149547c9583", "historyId": "7b9e7df3576d5e35fdc7ceb9f9fab054", "testCaseId": "7b9e7df3576d5e35fdc7ceb9f9fab054", "fullName": "tests.test_order_create.TestOrderCreation#test_create_order_without_ingredients_error_400", "labels": [{"name": "feature", "value": "Создание заказа"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_order_create"}, {"name": "subSuite", "value": "TestOrderCreation"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_order_create"}]} \ No newline at end of file diff --git a/allure-results/32cf4319-a3d5-4412-a0b7-32194b8611d7-container.json b/allure-results/32cf4319-a3d5-4412-a0b7-32194b8611d7-container.json new file mode 100644 index 0000000..05d66a5 --- /dev/null +++ b/allure-results/32cf4319-a3d5-4412-a0b7-32194b8611d7-container.json @@ -0,0 +1 @@ +{"uuid": "55abefe5-2108-4e55-9876-620fe45c6ac0", "children": ["2c1f1486-185a-4eeb-a531-22974482984d"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'henry@jones.com', 'password': 'sL%0mNsy+4', 'name': 'Henry'}"}], "start": 1771964747685, "stop": 1771964748296}], "start": 1771964747684, "stop": 1771964748299}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'henry@jones.com'"}, {"name": "password", "value": "'sL%0mNsy+4'"}], "start": 1771964748860, "stop": 1771964749446}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTRjOTg0MjcwMDAxYmU1NzM3NCIsImlhdCI6MTc3MTk2NDc0OSwiZXhwIjoxNzcxOTY1OTQ5fQ.-U_gJ8Dx5nskr1s15tw4jlKb_UPWWGb_S3pUMgaHwDk'"}], "start": 1771964749446, "stop": 1771964750548}], "start": 1771964748860, "stop": 1771964750554}], "start": 1771964747684, "stop": 1771964750554} \ No newline at end of file diff --git a/allure-results/4f2bb806-8f7c-40bb-95d6-933966e9b612-result.json b/allure-results/4f2bb806-8f7c-40bb-95d6-933966e9b612-result.json new file mode 100644 index 0000000..f9d087f --- /dev/null +++ b/allure-results/4f2bb806-8f7c-40bb-95d6-933966e9b612-result.json @@ -0,0 +1 @@ +{"name": "Успешный вход под существующим пользователем", "status": "passed", "steps": [{"name": "Отправить POST-запрос на авторизацию пользователя", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'warren@fox.com'"}, {"name": "password", "value": "'t4YW&78P$w'"}], "start": 1771964745433, "stop": 1771964746019}], "start": 1771964745433, "stop": 1771964746020}, {"name": "Проверить, что статус-код 200 и ответ содержит ожидаемые данные (email)", "status": "passed", "start": 1771964746020, "stop": 1771964746020}], "start": 1771964745433, "stop": 1771964746025, "uuid": "f9073cf8-b72f-4347-ab34-2072818f06f6", "historyId": "be958ea51886d9503f460a7df9eb51bf", "testCaseId": "be958ea51886d9503f460a7df9eb51bf", "fullName": "tests.test_user_login.TestLoginUser#test_login_user_success", "labels": [{"name": "feature", "value": "Логин пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_login"}, {"name": "subSuite", "value": "TestLoginUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_login"}]} \ No newline at end of file diff --git a/allure-results/53f12818-d852-4eef-b36f-9be71ae9b3a8-container.json b/allure-results/53f12818-d852-4eef-b36f-9be71ae9b3a8-container.json new file mode 100644 index 0000000..8657887 --- /dev/null +++ b/allure-results/53f12818-d852-4eef-b36f-9be71ae9b3a8-container.json @@ -0,0 +1 @@ +{"uuid": "fc9f279a-0e54-4d2c-a870-4a95db8ea967", "children": ["fe222416-bf4b-42e0-9a6f-7720bd5b1a51", "9de0406e-9c2f-4b33-b0f9-30e52af798b6"], "befores": [{"name": "get_available_ingredients", "status": "passed", "start": 1771964723940, "stop": 1771964724549}], "start": 1771964723940, "stop": 1771964753399} \ No newline at end of file diff --git a/allure-results/60514aa7-62fd-411d-a3ed-6b5f1d78d422-container.json b/allure-results/60514aa7-62fd-411d-a3ed-6b5f1d78d422-container.json new file mode 100644 index 0000000..8117310 --- /dev/null +++ b/allure-results/60514aa7-62fd-411d-a3ed-6b5f1d78d422-container.json @@ -0,0 +1 @@ +{"uuid": "01ac6e31-dc90-4f99-b984-7eb6dc0fbd2c", "children": ["9e670423-640d-4a5e-b04c-9575001045dc"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'kimberly@wright.com', 'password': '59CstXSt&w', 'name': 'Kimberly'}"}], "start": 1771964750570, "stop": 1771964751132}], "start": 1771964750569, "stop": 1771964751138}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'kimberly@wright.com'"}, {"name": "password", "value": "'59CstXSt&w'"}], "start": 1771964751708, "stop": 1771964752277}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTRmOTg0MjcwMDAxYmU1NzM3NyIsImlhdCI6MTc3MTk2NDc1MiwiZXhwIjoxNzcxOTY1OTUyfQ.JW1MNs6xRmpW3Va3UVFYoS0GVPiHLcQiOhI_nxRMFCQ'"}], "start": 1771964752277, "stop": 1771964753376}], "start": 1771964751708, "stop": 1771964753386}], "start": 1771964750569, "stop": 1771964753386} \ No newline at end of file diff --git a/allure-results/62bffd30-458d-448b-adb6-45f9f6516749-container.json b/allure-results/62bffd30-458d-448b-adb6-45f9f6516749-container.json new file mode 100644 index 0000000..c3824a8 --- /dev/null +++ b/allure-results/62bffd30-458d-448b-adb6-45f9f6516749-container.json @@ -0,0 +1 @@ +{"uuid": "40b12bd1-6e61-428c-a212-71670c8fc082", "children": ["425c712b-3e0a-4960-b23d-389e514c6c9c"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'david@osborne.com', 'password': 'g+ti8Poqj0', 'name': 'David'}"}], "start": 1771964740505, "stop": 1771964741092}], "start": 1771964740503, "stop": 1771964741096}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'david@osborne.com'"}, {"name": "password", "value": "'g+ti8Poqj0'"}], "start": 1771964741606, "stop": 1771964742196}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTQ1OTg0MjcwMDAxYmU1NzM2ZCIsImlhdCI6MTc3MTk2NDc0MiwiZXhwIjoxNzcxOTY1OTQyfQ.PsqfJxULm_yt25VgL8JDxsOBnpbCmLOnfzPGqNGa0wA'"}], "start": 1771964742196, "stop": 1771964743262}], "start": 1771964741606, "stop": 1771964743271}], "start": 1771964740503, "stop": 1771964743272} \ No newline at end of file diff --git a/allure-results/6ba9251c-e02f-42b5-86bf-33601e82ad8d-result.json b/allure-results/6ba9251c-e02f-42b5-86bf-33601e82ad8d-result.json new file mode 100644 index 0000000..cda62d1 --- /dev/null +++ b/allure-results/6ba9251c-e02f-42b5-86bf-33601e82ad8d-result.json @@ -0,0 +1 @@ +{"name": "Вход с неверным паролем", "status": "passed", "steps": [{"name": "Получить данные пользователя и изменить пароль", "status": "passed", "start": 1771964751140, "stop": 1771964751140}, {"name": "Отправить POST-запрос на авторизацию с неверным паролем", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'kimberly@wright.com'"}, {"name": "password", "value": "'unknown_password_123_error'"}], "start": 1771964751140, "stop": 1771964751701}], "start": 1771964751140, "stop": 1771964751701}, {"name": "Проверить, что статус-код 401 и сообщение об ошибке \"email or password are incorrect\"", "status": "passed", "start": 1771964751701, "stop": 1771964751701}], "start": 1771964751139, "stop": 1771964751707, "uuid": "9e670423-640d-4a5e-b04c-9575001045dc", "historyId": "c80f50888dc9f0f7bc3bf418c97b6276", "testCaseId": "c80f50888dc9f0f7bc3bf418c97b6276", "fullName": "tests.test_user_login.TestLoginUser#test_login_invalid_password", "labels": [{"name": "feature", "value": "Логин пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_login"}, {"name": "subSuite", "value": "TestLoginUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_login"}]} \ No newline at end of file diff --git a/allure-results/6de2b03e-1a27-434b-bb44-f459b0a59372-result.json b/allure-results/6de2b03e-1a27-434b-bb44-f459b0a59372-result.json new file mode 100644 index 0000000..0161c22 --- /dev/null +++ b/allure-results/6de2b03e-1a27-434b-bb44-f459b0a59372-result.json @@ -0,0 +1 @@ +{"name": "Нельзя создать пользователя без обязательного поля email, password, name", "status": "passed", "steps": [{"name": "Сгенерировать валидные данные и удалить поле", "status": "passed", "start": 1771964743804, "stop": 1771964743805}, {"name": "Отправить POST-запрос на регистрацию", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'jose@lopez.biz', 'name': 'Jose'}"}], "start": 1771964743805, "stop": 1771964744297}], "start": 1771964743805, "stop": 1771964744297}, {"name": "Проверить, что статус 403 и ошибка \"Email, password and name are required fields\"", "status": "passed", "start": 1771964744297, "stop": 1771964744297}], "parameters": [{"name": "field", "value": "'password'"}], "start": 1771964743804, "stop": 1771964744302, "uuid": "30208f44-5bcb-4ca2-a0df-c469c3fc066d", "historyId": "c2b5c99300c8d8bef759a85a31dcd55e", "testCaseId": "f45547c715a31beab06cc5c121de4dd7", "fullName": "tests.test_user_create.TestCreateUser#test_create_user_missing_field", "labels": [{"name": "feature", "value": "Создание пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_create"}, {"name": "subSuite", "value": "TestCreateUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_create"}]} \ No newline at end of file diff --git a/allure-results/7433960d-d069-4be3-ae98-8b359dbf800e-container.json b/allure-results/7433960d-d069-4be3-ae98-8b359dbf800e-container.json new file mode 100644 index 0000000..3a0869b --- /dev/null +++ b/allure-results/7433960d-d069-4be3-ae98-8b359dbf800e-container.json @@ -0,0 +1 @@ +{"uuid": "de0b870e-ae55-47c2-bd83-4e3429cd8b44", "children": ["e68d9c1e-614e-40b4-af5f-4149547c9583"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'teresa@lopez.com', 'password': 'mb0Wlvv2I*', 'name': 'Teresa'}"}], "start": 1771964730984, "stop": 1771964731562}], "start": 1771964730983, "stop": 1771964731567}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'teresa@lopez.com'"}, {"name": "password", "value": "'mb0Wlvv2I*'"}], "start": 1771964732646, "stop": 1771964733220}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTNiOTg0MjcwMDAxYmU1NzM2MiIsImlhdCI6MTc3MTk2NDczMywiZXhwIjoxNzcxOTY1OTMzfQ.Ll4B0MR01zhdW6nl_qpEeGj6tQTWe8YW7EQAw3UByEM'"}], "start": 1771964733221, "stop": 1771964734266}], "start": 1771964732646, "stop": 1771964734272}], "start": 1771964730983, "stop": 1771964734272} \ No newline at end of file diff --git a/allure-results/7d8a2f05-b153-471d-ac48-00f549cd91c4-container.json b/allure-results/7d8a2f05-b153-471d-ac48-00f549cd91c4-container.json new file mode 100644 index 0000000..0360497 --- /dev/null +++ b/allure-results/7d8a2f05-b153-471d-ac48-00f549cd91c4-container.json @@ -0,0 +1 @@ +{"uuid": "30095d3e-4493-4f74-8379-71729452d1e1", "children": ["425c712b-3e0a-4960-b23d-389e514c6c9c", "f9073cf8-b72f-4347-ab34-2072818f06f6"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'warren@fox.com', 'password': 't4YW&78P$w', 'name': 'Warren'}"}], "start": 1771964744867, "stop": 1771964745427}], "start": 1771964744864, "stop": 1771964745431}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'warren@fox.com'"}, {"name": "password", "value": "'t4YW&78P$w'"}], "start": 1771964746025, "stop": 1771964746604}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTQ5OTg0MjcwMDAxYmU1NzM3MCIsImlhdCI6MTc3MTk2NDc0NiwiZXhwIjoxNzcxOTY1OTQ2fQ.IT9w_tBlkLoOWIjgUXdlfveyGpwAUJF07ZSfpVydA4M'"}], "start": 1771964746604, "stop": 1771964747676}], "start": 1771964746025, "stop": 1771964747681}], "start": 1771964744864, "stop": 1771964747681} \ No newline at end of file diff --git a/allure-results/898a7694-2cc2-42f6-885f-d2c5c7c30d5d-result.json b/allure-results/898a7694-2cc2-42f6-885f-d2c5c7c30d5d-result.json new file mode 100644 index 0000000..10f0401 --- /dev/null +++ b/allure-results/898a7694-2cc2-42f6-885f-d2c5c7c30d5d-result.json @@ -0,0 +1 @@ +{"name": "Успешное создание уникального пользователя", "status": "passed", "steps": [{"name": "Сгенерировать валидные данные пользователя", "status": "passed", "start": 1771964738291, "stop": 1771964738292}, {"name": "Отправить POST-запрос на регистрацию", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'john@russell-haynes.net', 'password': 'T2#PQz5V^V', 'name': 'John'}"}], "start": 1771964738292, "stop": 1771964738835}], "start": 1771964738292, "stop": 1771964738835}, {"name": "Проверить, что статус-код 200 и ответ содержит ожидаемые данные (email)", "status": "passed", "start": 1771964738835, "stop": 1771964738835}], "start": 1771964738291, "stop": 1771964738839, "uuid": "eb8b4127-e922-4988-a077-cb38b8a5858e", "historyId": "2abeb20cfab92224daf0cecec488418c", "testCaseId": "2abeb20cfab92224daf0cecec488418c", "fullName": "tests.test_user_create.TestCreateUser#test_create_user_success", "labels": [{"name": "feature", "value": "Создание пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_create"}, {"name": "subSuite", "value": "TestCreateUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_create"}]} \ No newline at end of file diff --git a/allure-results/9af4477c-e547-4dc8-b5e1-ab6a0e7d9158-container.json b/allure-results/9af4477c-e547-4dc8-b5e1-ab6a0e7d9158-container.json new file mode 100644 index 0000000..ff7cfab --- /dev/null +++ b/allure-results/9af4477c-e547-4dc8-b5e1-ab6a0e7d9158-container.json @@ -0,0 +1 @@ +{"uuid": "9205f590-cd04-4bb0-8f36-c0d8e2c153b9", "befores": [{"name": "field", "status": "passed", "start": 1771964744310, "stop": 1771964744310}], "start": 1771964744310, "stop": 1771964744854} \ No newline at end of file diff --git a/allure-results/a425ac0c-fab4-47ee-b70a-30387ce68b25-container.json b/allure-results/a425ac0c-fab4-47ee-b70a-30387ce68b25-container.json new file mode 100644 index 0000000..89e61d5 --- /dev/null +++ b/allure-results/a425ac0c-fab4-47ee-b70a-30387ce68b25-container.json @@ -0,0 +1 @@ +{"uuid": "bbdc641b-9fbc-4bbe-94b3-722105b8ffca", "befores": [{"name": "field", "status": "passed", "start": 1771964743282, "stop": 1771964743282}], "start": 1771964743282, "stop": 1771964743800} \ No newline at end of file diff --git a/allure-results/a88b2c60-a708-4164-bce0-676d4a3ab47d-result.json b/allure-results/a88b2c60-a708-4164-bce0-676d4a3ab47d-result.json new file mode 100644 index 0000000..89936b1 --- /dev/null +++ b/allure-results/a88b2c60-a708-4164-bce0-676d4a3ab47d-result.json @@ -0,0 +1 @@ +{"name": "Вход с неверным логином (email)", "status": "passed", "steps": [{"name": "Получить данные пользователя и изменить email", "status": "passed", "start": 1771964748301, "stop": 1771964748301}, {"name": "Отправить POST-запрос на авторизацию с неверным email", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'unknown_login_123_error'"}, {"name": "password", "value": "'sL%0mNsy+4'"}], "start": 1771964748301, "stop": 1771964748853}], "start": 1771964748301, "stop": 1771964748853}, {"name": "Проверить, что статус-код 401 и сообщение об ошибке \"email or password are incorrect\"", "status": "passed", "start": 1771964748853, "stop": 1771964748853}], "start": 1771964748301, "stop": 1771964748859, "uuid": "2c1f1486-185a-4eeb-a531-22974482984d", "historyId": "4d3cc780e57202877930af4add23201f", "testCaseId": "4d3cc780e57202877930af4add23201f", "fullName": "tests.test_user_login.TestLoginUser#test_login_invalid_email", "labels": [{"name": "feature", "value": "Логин пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_login"}, {"name": "subSuite", "value": "TestLoginUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_login"}]} \ No newline at end of file diff --git a/allure-results/aa2d8aed-19ea-47f4-91dd-3888bf9a729f-result.json b/allure-results/aa2d8aed-19ea-47f4-91dd-3888bf9a729f-result.json new file mode 100644 index 0000000..494275f --- /dev/null +++ b/allure-results/aa2d8aed-19ea-47f4-91dd-3888bf9a729f-result.json @@ -0,0 +1 @@ +{"name": "Создание заказа с авторизацией и с валидными ингредиентами", "status": "passed", "steps": [{"name": "Авторизоваться под пользователем", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'mark@smith.com'"}, {"name": "password", "value": "'D&e5XmLz#g'"}], "start": 1771964725175, "stop": 1771964725808}], "start": 1771964725175, "stop": 1771964725812}, {"name": "Отправить POST-запрос на создание заказа с токеном", "status": "passed", "start": 1771964725813, "stop": 1771964729286}, {"name": "Проверить, что статус-код 200 и заказ успешно создан", "status": "passed", "start": 1771964729286, "stop": 1771964729287}], "start": 1771964725174, "stop": 1771964729291, "uuid": "fe222416-bf4b-42e0-9a6f-7720bd5b1a51", "historyId": "42f36815dc3c8d154fcded82660d3b6b", "testCaseId": "42f36815dc3c8d154fcded82660d3b6b", "fullName": "tests.test_order_create.TestOrderCreation#test_create_order_with_auth_and_ingredients_success", "labels": [{"name": "feature", "value": "Создание заказа"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_order_create"}, {"name": "subSuite", "value": "TestOrderCreation"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_order_create"}]} \ No newline at end of file diff --git a/allure-results/b88c3479-1cb6-4346-81c8-dc22d5181ad0-result.json b/allure-results/b88c3479-1cb6-4346-81c8-dc22d5181ad0-result.json new file mode 100644 index 0000000..f186923 --- /dev/null +++ b/allure-results/b88c3479-1cb6-4346-81c8-dc22d5181ad0-result.json @@ -0,0 +1 @@ +{"name": "Нельзя создать пользователя без обязательного поля email, password, name", "status": "passed", "steps": [{"name": "Сгенерировать валидные данные и удалить поле", "status": "passed", "start": 1771964743284, "stop": 1771964743285}, {"name": "Отправить POST-запрос на регистрацию", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'password': '!0Pp18WOf3', 'name': 'Brent'}"}], "start": 1771964743285, "stop": 1771964743795}], "start": 1771964743285, "stop": 1771964743795}, {"name": "Проверить, что статус 403 и ошибка \"Email, password and name are required fields\"", "status": "passed", "start": 1771964743795, "stop": 1771964743796}], "parameters": [{"name": "field", "value": "'email'"}], "start": 1771964743284, "stop": 1771964743799, "uuid": "11a1b168-e0a9-4c72-ad08-ace99bb819e6", "historyId": "3fb51e88cbf25f3001357094abc2bb65", "testCaseId": "f45547c715a31beab06cc5c121de4dd7", "fullName": "tests.test_user_create.TestCreateUser#test_create_user_missing_field", "labels": [{"name": "feature", "value": "Создание пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_create"}, {"name": "subSuite", "value": "TestCreateUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_create"}]} \ No newline at end of file diff --git a/allure-results/b99c109e-f746-423c-b93d-3d80459a99f1-container.json b/allure-results/b99c109e-f746-423c-b93d-3d80459a99f1-container.json new file mode 100644 index 0000000..db149d7 --- /dev/null +++ b/allure-results/b99c109e-f746-423c-b93d-3d80459a99f1-container.json @@ -0,0 +1 @@ +{"uuid": "709b2cc4-74a5-4d46-bb7a-8ef3dda9ee5b", "children": ["fe222416-bf4b-42e0-9a6f-7720bd5b1a51"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'mark@smith.com', 'password': 'D&e5XmLz#g', 'name': 'Mark'}"}], "start": 1771964724553, "stop": 1771964725171}], "start": 1771964724550, "stop": 1771964725173}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'mark@smith.com'"}, {"name": "password", "value": "'D&e5XmLz#g'"}], "start": 1771964729292, "stop": 1771964729857}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTM1OTg0MjcwMDAxYmU1NzM1ZCIsImlhdCI6MTc3MTk2NDcyOSwiZXhwIjoxNzcxOTY1OTI5fQ.31kkO2A1FZI6F6nXqJgoiueFI_e8Mcs9oU6BFD3vpYs'"}], "start": 1771964729858, "stop": 1771964730954}], "start": 1771964729292, "stop": 1771964730964}], "start": 1771964724549, "stop": 1771964730964} \ No newline at end of file diff --git a/allure-results/d7b2c3d6-5b1d-4ae5-81d3-04329cdd7fe9-container.json b/allure-results/d7b2c3d6-5b1d-4ae5-81d3-04329cdd7fe9-container.json new file mode 100644 index 0000000..27f7f1e --- /dev/null +++ b/allure-results/d7b2c3d6-5b1d-4ae5-81d3-04329cdd7fe9-container.json @@ -0,0 +1 @@ +{"uuid": "c7826fc8-44d9-4283-80b6-995fd7fa98ff", "children": ["36657dfd-216c-4a52-b03f-12c7230d10f5"], "befores": [{"name": "create_and_delete_user", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'caleb@boyd.biz', 'password': 'm^2Zx51Pjz', 'name': 'Caleb'}"}], "start": 1771964734277, "stop": 1771964734861}], "start": 1771964734276, "stop": 1771964734865}], "afters": [{"name": "create_and_delete_user::0", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'caleb@boyd.biz'"}, {"name": "password", "value": "'m^2Zx51Pjz'"}], "start": 1771964735958, "stop": 1771964736536}, {"name": "Удаление пользователя", "status": "passed", "parameters": [{"name": "token", "value": "'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY5OWUwOTNlOTg0MjcwMDAxYmU1NzM2NiIsImlhdCI6MTc3MTk2NDczNiwiZXhwIjoxNzcxOTY1OTM2fQ.3MqLJSUcV7dNak0AQQDuHxDFPXv1IMqujmrR4ymOGv4'"}], "start": 1771964736536, "stop": 1771964737613}], "start": 1771964735958, "stop": 1771964737618}], "start": 1771964734276, "stop": 1771964737618} \ No newline at end of file diff --git a/allure-results/dba8e7ca-57f0-4499-9bd3-2a0624bbfcc6-result.json b/allure-results/dba8e7ca-57f0-4499-9bd3-2a0624bbfcc6-result.json new file mode 100644 index 0000000..d11ea59 --- /dev/null +++ b/allure-results/dba8e7ca-57f0-4499-9bd3-2a0624bbfcc6-result.json @@ -0,0 +1 @@ +{"name": "Нельзя создать пользователя, который уже зарегистрирован", "status": "passed", "steps": [{"name": "Получить данные существующего пользователя", "status": "passed", "start": 1771964741098, "stop": 1771964741098}, {"name": "Повторно отправить запрос на регистрацию", "status": "passed", "steps": [{"name": "Регистрация пользователя", "status": "passed", "parameters": [{"name": "body", "value": "{'email': 'david@osborne.com', 'password': 'g+ti8Poqj0', 'name': 'David'}"}], "start": 1771964741099, "stop": 1771964741601}], "start": 1771964741098, "stop": 1771964741601}, {"name": "Проверить, что статус 403 и ошибка \"User already exists\"", "status": "passed", "start": 1771964741602, "stop": 1771964741602}], "start": 1771964741098, "stop": 1771964741606, "uuid": "425c712b-3e0a-4960-b23d-389e514c6c9c", "historyId": "69c2ebe9cab8b8f253b8c94f61d727d3", "testCaseId": "69c2ebe9cab8b8f253b8c94f61d727d3", "fullName": "tests.test_user_create.TestCreateUser#test_create_user_existing_email", "labels": [{"name": "feature", "value": "Создание пользователя"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_user_create"}, {"name": "subSuite", "value": "TestCreateUser"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_user_create"}]} \ No newline at end of file diff --git a/allure-results/e5e9d384-a59f-4f43-a7fd-35b716ce32dd-result.json b/allure-results/e5e9d384-a59f-4f43-a7fd-35b716ce32dd-result.json new file mode 100644 index 0000000..ccebfaf --- /dev/null +++ b/allure-results/e5e9d384-a59f-4f43-a7fd-35b716ce32dd-result.json @@ -0,0 +1 @@ +{"name": "Создание заказа с неверным хешем ингредиентов", "status": "passed", "steps": [{"name": "Авторизоваться под пользователем", "status": "passed", "steps": [{"name": "Авторизация пользователя", "status": "passed", "parameters": [{"name": "email", "value": "'caleb@boyd.biz'"}, {"name": "password", "value": "'m^2Zx51Pjz'"}], "start": 1771964734868, "stop": 1771964735428}], "start": 1771964734867, "stop": 1771964735432}, {"name": "Отправить POST-запрос на создание заказа с невалидным хешем ингредиента", "status": "passed", "start": 1771964735432, "stop": 1771964735953}, {"name": "Проверить, что статус-код 500 (внутренняя ошибка сервера)", "status": "passed", "start": 1771964735953, "stop": 1771964735953}], "start": 1771964734867, "stop": 1771964735957, "uuid": "36657dfd-216c-4a52-b03f-12c7230d10f5", "historyId": "9c2542e5342fd48adcd2fe5522827086", "testCaseId": "9c2542e5342fd48adcd2fe5522827086", "fullName": "tests.test_order_create.TestOrderCreation#test_create_order_with_invalid_hash_error_500", "labels": [{"name": "feature", "value": "Создание заказа"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_order_create"}, {"name": "subSuite", "value": "TestOrderCreation"}, {"name": "host", "value": "DESKTOP-OOOSF5A"}, {"name": "thread", "value": "7664-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_order_create"}]} \ No newline at end of file diff --git a/allure-results/f7ce9430-909e-4b8d-ab71-062d9fc2947f-container.json b/allure-results/f7ce9430-909e-4b8d-ab71-062d9fc2947f-container.json new file mode 100644 index 0000000..dde80a4 --- /dev/null +++ b/allure-results/f7ce9430-909e-4b8d-ab71-062d9fc2947f-container.json @@ -0,0 +1 @@ +{"uuid": "fa41eea0-513e-4675-b7af-cdbca92bfcfa", "children": ["fe222416-bf4b-42e0-9a6f-7720bd5b1a51", "e68d9c1e-614e-40b4-af5f-4149547c9583", "36657dfd-216c-4a52-b03f-12c7230d10f5", "9de0406e-9c2f-4b33-b0f9-30e52af798b6", "eb8b4127-e922-4988-a077-cb38b8a5858e", "425c712b-3e0a-4960-b23d-389e514c6c9c", "11a1b168-e0a9-4c72-ad08-ace99bb819e6", "30208f44-5bcb-4ca2-a0df-c469c3fc066d", "4dea6bae-8ab2-41e3-842a-983342ac3932", "f9073cf8-b72f-4347-ab34-2072818f06f6", "2c1f1486-185a-4eeb-a531-22974482984d", "9e670423-640d-4a5e-b04c-9575001045dc"], "befores": [{"name": "_session_faker", "status": "passed", "start": 1771964723939, "stop": 1771964723940}], "start": 1771964723939, "stop": 1771964753401} \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..fd61ec5 --- /dev/null +++ b/conftest.py @@ -0,0 +1,39 @@ +import pytest +import requests +from generators import generate_user_data +from methods.auth_methods import AuthMethods +from urls import URL + + +@pytest.fixture(scope="function") +def create_and_delete_user(): + user_data = generate_user_data() + AuthMethods.register_user(user_data) + + yield user_data + + login_response = AuthMethods.login_user(user_data["email"], user_data["password"]) + access_token = login_response.json()["accessToken"] + + AuthMethods.delete_user(access_token) + + +@pytest.fixture(scope="function") +def cleanup_user(): + user_data = {} + + yield user_data + + login_response = AuthMethods.login_user(user_data["email"], user_data["password"]) + access_token = login_response.json()["accessToken"] + + AuthMethods.delete_user(access_token) + + +@pytest.fixture(scope="session") +def get_available_ingredients(): + response = requests.get(URL.INGREDIENTS_URL) + assert response.status_code == 200 + data = response.json() + assert data["success"] == True + return [ingredient["_id"] for ingredient in data["data"][:2]] \ No newline at end of file diff --git a/data.py b/data.py new file mode 100644 index 0000000..523d2ff --- /dev/null +++ b/data.py @@ -0,0 +1,39 @@ +class Message: + # тело ответа: пользователь уже существует + USER_EXISTS = { + "success": False, + "message": "User already exists" + } + + # тело ответа: не все поля заполнены + MISSING_FIELDS = { + "success": False, + "message": "Email, password and name are required fields" + } + + # тело ответа: ошибка логина + LOGIN_FAILED = { + "success": False, + "message": "email or password are incorrect" + } + + # тело ответа: не авторизован + UNAUTHORIZED = { + "success": False, + "message": "You should be authorised" + } + + # тело ответа: не переданы ингредиенты + NO_INGREDIENTS = { + "success": False, + "message": "Ingredient ids must be provided" + } + + +class TestData: + # несуществующий логин и пароль + NONEXISTENT_EMAIL = 'unknown_login_123_error' + NONEXISTENT_PASSWORD = 'unknown_password_123_error' + + # невалидный хеш ингредиентов + INVALID_INGREDIENT_HASH = ["invalid-hash-123-error"] \ No newline at end of file diff --git a/generators.py b/generators.py new file mode 100644 index 0000000..b474016 --- /dev/null +++ b/generators.py @@ -0,0 +1,14 @@ +from faker import Faker + +fake = Faker() + + +def generate_user_data(): + name = fake.first_name() + password = fake.password(length=10) + email = f"{name.lower()}@{fake.domain_name()}" + return { + "email": email, + "password": password, + "name": name + } \ No newline at end of file diff --git a/helper.py b/helper.py new file mode 100644 index 0000000..0991a19 --- /dev/null +++ b/helper.py @@ -0,0 +1,6 @@ +from methods.auth_methods import AuthMethods + + +def get_user_access_token(user_data): + login_response = AuthMethods.login_user(user_data["email"], user_data["password"]) + return login_response.json()["accessToken"] \ No newline at end of file diff --git a/methods/auth_methods.py b/methods/auth_methods.py new file mode 100644 index 0000000..df8e916 --- /dev/null +++ b/methods/auth_methods.py @@ -0,0 +1,21 @@ +import requests +import allure +from urls import URL + + +class AuthMethods: + @staticmethod + @allure.step('Регистрация пользователя') + def register_user(body): + return requests.post(URL.REGISTER_USER_URL, json=body) + + @staticmethod + @allure.step('Авторизация пользователя') + def login_user(email, password): + return requests.post(URL.LOGIN_USER_URL, json={"email": email, "password": password}) + + @staticmethod + @allure.step('Удаление пользователя') + def delete_user(token): + headers = {"Authorization": token} + return requests.delete(URL.USER_URL, headers=headers) \ No newline at end of file diff --git a/methods/order_methods.py b/methods/order_methods.py new file mode 100644 index 0000000..1fb9fd4 --- /dev/null +++ b/methods/order_methods.py @@ -0,0 +1,13 @@ +import requests +import allure +from urls import URL + + +class OrderMethods: + def create_order(ingredients, token=None): + headers = {} + if token: + clean_token = token.replace("Bearer ", "") + headers["Authorization"] = f"Bearer {clean_token}" + body = {"ingredients": ingredients} + return requests.post(URL.ORDERS_URL, json=body, headers=headers) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2b9566a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +allure-pytest==2.13.5 +allure-python-commons==2.13.5 +pytest==8.2.2 +pytest-cov==5.0.0 +requests==2.31.0 +faker==37.6.0 \ No newline at end of file diff --git a/tests/test_order_create.py b/tests/test_order_create.py new file mode 100644 index 0000000..fae340b --- /dev/null +++ b/tests/test_order_create.py @@ -0,0 +1,60 @@ +import pytest +import allure + +from methods.order_methods import OrderMethods +from data import Message, TestData +from helper import get_user_access_token + + +@allure.feature('Создание заказа') +class TestOrderCreation: + + @allure.title('Создание заказа с авторизацией и с валидными ингредиентами') + def test_create_order_with_auth_and_ingredients_success(self, create_and_delete_user, get_available_ingredients): + user_data = create_and_delete_user + + with allure.step('Авторизоваться под пользователем'): + access_token = get_user_access_token(user_data) + + with allure.step('Отправить POST-запрос на создание заказа с токеном'): + response = OrderMethods.create_order(get_available_ingredients, access_token) + + with allure.step('Проверить, что статус-код 200 и заказ успешно создан'): + assert response.status_code == 200 + assert response.json()["success"] == True + + @allure.title('Создание заказа без ингредиентов') + def test_create_order_without_ingredients_error_400(self, create_and_delete_user): + user_data = create_and_delete_user + + with allure.step('Авторизоваться под пользователем'): + access_token = get_user_access_token(user_data) + + with allure.step('Отправить POST-запрос на создание заказа с пустым списком ингредиентов'): + response = OrderMethods.create_order([], access_token) + + with allure.step('Проверить, что статус-код 400 и ошибка "Ingredient ids must be provided"'): + assert response.status_code == 400 + assert response.json() == Message.NO_INGREDIENTS + + @allure.title('Создание заказа с неверным хешем ингредиентов') + def test_create_order_with_invalid_hash_error_500(self, create_and_delete_user): + user_data = create_and_delete_user + + with allure.step('Авторизоваться под пользователем'): + access_token = get_user_access_token(user_data) + + with allure.step('Отправить POST-запрос на создание заказа с невалидным хешем ингредиента'): + response = OrderMethods.create_order(TestData.INVALID_INGREDIENT_HASH, access_token) + + with allure.step('Проверить, что статус-код 500 (внутренняя ошибка сервера)'): + assert response.status_code == 500 + + @allure.title('Создание заказа без авторизации') + def test_create_order_without_auth_error_401(self, get_available_ingredients): + with allure.step('Отправить POST-запрос на создание заказа без токена'): + response = OrderMethods.create_order(get_available_ingredients) + + with allure.step('Проверить, что статус-код 401 и ошибка "You should be authorised"'): + assert response.status_code == 401 # Ожидаем 401 по документации, но сервер возвращает 200, тест упадет + assert response.json() == Message.UNAUTHORIZED \ No newline at end of file diff --git a/tests/test_user_create.py b/tests/test_user_create.py new file mode 100644 index 0000000..27f52dc --- /dev/null +++ b/tests/test_user_create.py @@ -0,0 +1,49 @@ +import pytest +import allure + +from conftest import create_and_delete_user, cleanup_user +from generators import generate_user_data +from methods.auth_methods import AuthMethods +from data import Message + +@allure.feature('Создание пользователя') +class TestCreateUser: + @allure.title('Успешное создание уникального пользователя') + def test_create_user_success(self, cleanup_user): + with allure.step('Сгенерировать валидные данные пользователя'): + user_data = generate_user_data() + cleanup_user.update(user_data) + + with allure.step('Отправить POST-запрос на регистрацию'): + response = AuthMethods.register_user(user_data) + + with allure.step('Проверить, что статус-код 200 и ответ содержит ожидаемые данные (email)'): + assert response.status_code == 200 + assert response.json()["success"] == True + assert response.json()["user"]["email"] == user_data["email"] + + @allure.title('Нельзя создать пользователя, который уже зарегистрирован') + def test_create_user_existing_email(self, create_and_delete_user): + with allure.step('Получить данные существующего пользователя'): + user_data = create_and_delete_user + + with allure.step('Повторно отправить запрос на регистрацию'): + response = AuthMethods.register_user(user_data) + + with allure.step('Проверить, что статус 403 и ошибка "User already exists"'): + assert response.status_code == 403 + assert response.json() == Message.USER_EXISTS + + @pytest.mark.parametrize('field', ['email', 'password', 'name']) + @allure.title('Нельзя создать пользователя без обязательного поля email, password, name') + def test_create_user_missing_field(self, field): + with allure.step('Сгенерировать валидные данные и удалить поле'): + user_data = generate_user_data() + user_data.pop(field) + + with allure.step('Отправить POST-запрос на регистрацию'): + response = AuthMethods.register_user(user_data) + + with allure.step('Проверить, что статус 403 и ошибка "Email, password and name are required fields"'): + assert response.status_code == 403 + assert response.json() == Message.MISSING_FIELDS \ No newline at end of file diff --git a/tests/test_user_login.py b/tests/test_user_login.py new file mode 100644 index 0000000..0ac4350 --- /dev/null +++ b/tests/test_user_login.py @@ -0,0 +1,47 @@ +import pytest +import allure + +from methods.auth_methods import AuthMethods +from data import Message, TestData + + +@allure.feature('Логин пользователя') +class TestLoginUser: + + @allure.title('Успешный вход под существующим пользователем') + def test_login_user_success(self, create_and_delete_user): + user_data = create_and_delete_user + + with allure.step('Отправить POST-запрос на авторизацию пользователя'): + response = AuthMethods.login_user(user_data["email"], user_data["password"]) + + with allure.step('Проверить, что статус-код 200 и ответ содержит ожидаемые данные (email)'): + assert response.status_code == 200 + assert response.json()["success"] == True + assert response.json()["user"]["email"] == user_data["email"] + + @allure.title('Вход с неверным логином (email)') + def test_login_invalid_email(self, create_and_delete_user): + with allure.step('Получить данные пользователя и изменить email'): + user_data = create_and_delete_user + wrong_email = TestData.NONEXISTENT_EMAIL + + with allure.step('Отправить POST-запрос на авторизацию с неверным email'): + response = AuthMethods.login_user(wrong_email, user_data["password"]) + + with allure.step('Проверить, что статус-код 401 и сообщение об ошибке "email or password are incorrect"'): + assert response.status_code == 401 + assert response.json() == Message.LOGIN_FAILED + + @allure.title('Вход с неверным паролем') + def test_login_invalid_password(self, create_and_delete_user): + with allure.step('Получить данные пользователя и изменить пароль'): + user_data = create_and_delete_user + wrong_password = TestData.NONEXISTENT_PASSWORD + + with allure.step('Отправить POST-запрос на авторизацию с неверным паролем'): + response = AuthMethods.login_user(user_data["email"], wrong_password) + + with allure.step('Проверить, что статус-код 401 и сообщение об ошибке "email or password are incorrect"'): + assert response.status_code == 401 + assert response.json() == Message.LOGIN_FAILED \ No newline at end of file diff --git a/urls.py b/urls.py new file mode 100644 index 0000000..70a3da3 --- /dev/null +++ b/urls.py @@ -0,0 +1,11 @@ +class URL: + BASE_URL = 'https://stellarburgers.education-services.ru' # сайт Stellar Burgers + + # Пользователь: регистрация и авторизация + REGISTER_USER_URL = f'{BASE_URL}/api/auth/register' # POST - создание пользователя + LOGIN_USER_URL = f'{BASE_URL}/api/auth/login' # POST - авторизация пользователя + USER_URL = f'{BASE_URL}/api/auth/user' # GET/PATCH - получение и обновление инфо о пользователе + + # Ингредиенты и заказы + INGREDIENTS_URL = f'{BASE_URL}/api/ingredients' # GET - получение списка ингредиентов + ORDERS_URL = f'{BASE_URL}/api/orders' # POST - создание заказа, GET - получение заказов пользователя \ No newline at end of file