From 9958f4d0d6b45ed5110693b30fc651179c3f6bae Mon Sep 17 00:00:00 2001 From: EvaV21 Date: Tue, 3 Mar 2026 17:55:49 +0300 Subject: [PATCH 1/3] Task 2: API tests with Allure report --- .gitignore | 12 +++++++ README.md | 73 +++++++++++++++++++++++++++++++++++++++ pytest.ini | 4 +++ requirements.txt | 3 ++ src/api.py | 31 +++++++++++++++++ src/config.py | 6 ++++ src/helpers.py | 15 ++++++++ tests/conftest.py | 42 ++++++++++++++++++++++ tests/test_create_user.py | 38 ++++++++++++++++++++ tests/test_login.py | 23 ++++++++++++ tests/test_orders.py | 50 +++++++++++++++++++++++++++ 11 files changed, 297 insertions(+) create mode 100644 .gitignore create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 src/api.py create mode 100644 src/config.py create mode 100644 src/helpers.py create mode 100644 tests/conftest.py create mode 100644 tests/test_create_user.py create mode 100644 tests/test_login.py create mode 100644 tests/test_orders.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ad4b08 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +venv/ +__pycache__/ +.pytest_cache/ +*.pyc +allure-results/ +allure-report/ +.coverage +htmlcov/ +.idea/ +.vscode/ +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/README.md b/README.md index 945c8b4..2ad60bd 100644 --- a/README.md +++ b/README.md @@ -1 +1,74 @@ # Diplom_2 +API-тесты Stellar Burgers +Описание + +В проекте реализованы автоматизированные тесты API сервиса Stellar Burgers. + +Тестирование выполняется с использованием: +pytest +requests +allure-pytest + +Отчёт формируется в Allure. + + Проверяемые сценарии + Создание пользователя + +Создание уникального пользователя +Создание пользователя, который уже зарегистрирован +Создание пользователя без одного из обязательных полей + +Логин пользователя + +Вход под существующим пользователем +Вход с неверным логином и паролем + + Создание заказа + +Создание заказа с авторизацией +Создание заказа без авторизации +Создание заказа с ингредиентами +Создание заказа без ингредиентов +Создание заказа с неверным хешем ингредиентов + + Структура проекта +Diplom_2 +├── src +│ ├── api.py +│ ├── config.py +│ └── helpers.py +├── tests +│ ├── conftest.py +│ ├── test_create_user.py +│ ├── test_login.py +│ └── test_orders.py +├── pytest.ini +├── requirements.txt +├── .gitignore +└── README.md + +Установка зависимостей + +python -m venv venv +source venv/Scripts/activate +pip install -r requirements.txt + +Запуск тестов +pytest + +Формирование отчёта Allure + +Сбор результатов +pytest --alluredir=allure-results + +Просмотр отчёта (если установлен Allure CLI) +allure serve allure-results + +Или создание HTML-отчёта: + +allure generate allure-results -o allure-report --clean + +Результат + +Все тесты проходят успешно. +Результаты выполнения тестов отображаются в отчёте Allure. \ No newline at end of file diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..046e179 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +testpaths = tests +pythonpath = . +addopts = -v \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b947473 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pytest +requests +allure-pytest \ No newline at end of file diff --git a/src/api.py b/src/api.py new file mode 100644 index 0000000..23a432e --- /dev/null +++ b/src/api.py @@ -0,0 +1,31 @@ +import allure +import requests + +from src.config import BASE_URL, REGISTER, LOGIN, INGREDIENTS, ORDERS + + +class StellarApi: + def __init__(self): + self.session = requests.Session() + + @allure.step("POST {path}") + def post(self, path: str, json: dict | None = None, headers: dict | None = None): + return self.session.post(BASE_URL + path, json=json, headers=headers) + + @allure.step("GET {path}") + def get(self, path: str, headers: dict | None = None): + return self.session.get(BASE_URL + path, headers=headers) + + def register(self, payload: dict): + return self.post(REGISTER, json=payload) + + def login(self, payload: dict): + return self.post(LOGIN, json=payload) + + def get_ingredients(self): + return self.get(INGREDIENTS) + + def create_order(self, ingredients: list[str] | None = None, token: str | None = None): + headers = {"Authorization": token} if token else None + body = {"ingredients": ingredients} if ingredients is not None else {} + return self.post(ORDERS, json=body, headers=headers) \ No newline at end of file diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..82f75f1 --- /dev/null +++ b/src/config.py @@ -0,0 +1,6 @@ +BASE_URL = "https://stellarburgers.education-services.ru/api" + +REGISTER = "/auth/register" +LOGIN = "/auth/login" +INGREDIENTS = "/ingredients" +ORDERS = "/orders" \ No newline at end of file diff --git a/src/helpers.py b/src/helpers.py new file mode 100644 index 0000000..054a22a --- /dev/null +++ b/src/helpers.py @@ -0,0 +1,15 @@ +import random +import string + + +def rand_str(n: int = 10) -> str: + chars = string.ascii_letters + string.digits + return "".join(random.choice(chars) for _ in range(n)) + + +def generate_user() -> dict: + return { + "email": f"eva_{rand_str(8).lower()}@yandex.ru", + "password": rand_str(12), + "name": f"Eva_{rand_str(6)}", + } \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..2c28795 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,42 @@ +import pytest +import allure + +from src.api import StellarApi +from src.helpers import generate_user + + +@pytest.fixture +def api(): + return StellarApi() + + +@pytest.fixture +def user_data(): + return generate_user() + + +@pytest.fixture +def registered_user(api, user_data): + with allure.step("Регистрируем пользователя"): + r = api.register(user_data) + assert r.status_code == 200, f"register failed: {r.status_code} {r.text}" + return user_data + + +@pytest.fixture +def token(api, registered_user): + with allure.step("Логинимся и получаем токен"): + r = api.login({"email": registered_user["email"], "password": registered_user["password"]}) + assert r.status_code == 200, f"login failed: {r.status_code} {r.text}" + body = r.json() + return body["accessToken"] + + +@pytest.fixture +def ingredient_ids(api): + with allure.step("Получаем список ингредиентов"): + r = api.get_ingredients() + assert r.status_code == 200, f"ingredients failed: {r.status_code} {r.text}" + ids = [i["_id"] for i in r.json()["data"]] + assert len(ids) > 1 + return ids[:2] \ No newline at end of file diff --git a/tests/test_create_user.py b/tests/test_create_user.py new file mode 100644 index 0000000..d7297f6 --- /dev/null +++ b/tests/test_create_user.py @@ -0,0 +1,38 @@ +import allure +import pytest + + +@allure.feature("Создание пользователя") +class TestCreateUser: + + @allure.title("Создать уникального пользователя") + def test_create_unique_user(self, api, user_data): + r = api.register(user_data) + assert r.status_code == 200 + body = r.json() + + assert body.get("success") is True + assert "accessToken" in body + assert "refreshToken" in body + assert body["user"]["email"] == user_data["email"] + + @allure.title("Создать пользователя, который уже зарегистрирован") + def test_create_existing_user(self, api, registered_user): + r = api.register(registered_user) + assert r.status_code == 403 + body = r.json() + + assert body.get("success") is False + assert "User already exists" in body.get("message", "") + + @allure.title("Создать пользователя без обязательного поля") + @pytest.mark.parametrize("field", ["email", "password", "name"]) + def test_create_user_missing_required_field(self, api, user_data, field): + payload = dict(user_data) + payload.pop(field) + + r = api.register(payload) + assert r.status_code == 403 + body = r.json() + + assert body.get("success") is False \ No newline at end of file diff --git a/tests/test_login.py b/tests/test_login.py new file mode 100644 index 0000000..8e0b3b6 --- /dev/null +++ b/tests/test_login.py @@ -0,0 +1,23 @@ +import allure + + +@allure.feature("Логин пользователя") +class TestLogin: + + @allure.title("Вход под существующим пользователем") + def test_login_existing_user(self, api, registered_user): + r = api.login({"email": registered_user["email"], "password": registered_user["password"]}) + assert r.status_code == 200 + body = r.json() + + assert body.get("success") is True + assert "accessToken" in body + assert "refreshToken" in body + + @allure.title("Вход с неверным логином и паролем") + def test_login_wrong_credentials(self, api): + r = api.login({"email": "nope@yandex.ru", "password": "wrong"}) + assert r.status_code == 401 + body = r.json() + + assert body.get("success") is False diff --git a/tests/test_orders.py b/tests/test_orders.py new file mode 100644 index 0000000..76e7f7b --- /dev/null +++ b/tests/test_orders.py @@ -0,0 +1,50 @@ +import allure + + +@allure.feature("Создание заказа") +class TestOrders: + + @allure.title("Создание заказа с авторизацией") + def test_create_order_with_auth(self, api, token, ingredient_ids): + r = api.create_order(ingredients=ingredient_ids, token=token) + assert r.status_code == 200 + body = r.json() + + assert body.get("success") is True + assert "order" in body + assert "number" in body["order"] + + @allure.title("Создание заказа без авторизации") + def test_create_order_without_auth(self, api, ingredient_ids): + r = api.create_order(ingredients=ingredient_ids, token=None) + assert r.status_code == 200 + body = r.json() + + assert body.get("success") is True + assert "order" in body + assert "number" in body["order"] + + @allure.title("Создание заказа с ингредиентами") + def test_create_order_with_ingredients(self, api, ingredient_ids): + r = api.create_order(ingredients=ingredient_ids, token=None) + assert r.status_code == 200 + body = r.json() + + assert body.get("success") is True + assert "order" in body + assert "number" in body["order"] + + @allure.title("Создание заказа без ингредиентов") + def test_create_order_without_ingredients(self, api): + r = api.create_order(ingredients=[]) + assert r.status_code == 400 + body = r.json() + + assert body.get("success") is False + + @allure.title("Создание заказа с неверным хешем ингредиентов") + def test_create_order_with_invalid_hash(self, api): + r = api.create_order(ingredients=["invalid_hash"]) + assert r.status_code == 400 + body = r.json() + assert body.get("success") is False \ No newline at end of file From 6101862daccbebb404ffea520f16ed069c660949 Mon Sep 17 00:00:00 2001 From: EvaV21 Date: Sun, 8 Mar 2026 16:43:43 +0300 Subject: [PATCH 2/3] API tests for Stellar Burgers with pytest, requests and allure --- src/api.py | 12 +++++-- src/config.py | 3 +- tests/conftest.py | 69 +++++++++++++++++++++++++++++---------- tests/test_create_user.py | 58 +++++++++++++++++++------------- tests/test_orders.py | 51 +++++++++++++++++++---------- 5 files changed, 131 insertions(+), 62 deletions(-) diff --git a/src/api.py b/src/api.py index 23a432e..65227d8 100644 --- a/src/api.py +++ b/src/api.py @@ -1,7 +1,7 @@ import allure import requests -from src.config import BASE_URL, REGISTER, LOGIN, INGREDIENTS, ORDERS +from src.config import BASE_URL, REGISTER, LOGIN, INGREDIENTS, ORDERS, USER class StellarApi: @@ -16,6 +16,10 @@ def post(self, path: str, json: dict | None = None, headers: dict | None = None) def get(self, path: str, headers: dict | None = None): return self.session.get(BASE_URL + path, headers=headers) + @allure.step("DELETE {path}") + def delete(self, path: str, headers: dict | None = None): + return self.session.delete(BASE_URL + path, headers=headers) + def register(self, payload: dict): return self.post(REGISTER, json=payload) @@ -28,4 +32,8 @@ def get_ingredients(self): def create_order(self, ingredients: list[str] | None = None, token: str | None = None): headers = {"Authorization": token} if token else None body = {"ingredients": ingredients} if ingredients is not None else {} - return self.post(ORDERS, json=body, headers=headers) \ No newline at end of file + return self.post(ORDERS, json=body, headers=headers) + + def delete_user(self, token: str): + headers = {"Authorization": token} + return self.delete(USER, headers=headers) \ No newline at end of file diff --git a/src/config.py b/src/config.py index 82f75f1..295f324 100644 --- a/src/config.py +++ b/src/config.py @@ -3,4 +3,5 @@ REGISTER = "/auth/register" LOGIN = "/auth/login" INGREDIENTS = "/ingredients" -ORDERS = "/orders" \ No newline at end of file +ORDERS = "/orders" +USER = "/auth/user" \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 2c28795..9857d68 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,8 @@ import pytest import allure -from src.api import StellarApi from src.helpers import generate_user +from src.api import StellarApi @pytest.fixture @@ -11,32 +11,65 @@ def api(): @pytest.fixture -def user_data(): - return generate_user() - +def registered_user(api): + user = generate_user() -@pytest.fixture -def registered_user(api, user_data): with allure.step("Регистрируем пользователя"): - r = api.register(user_data) - assert r.status_code == 200, f"register failed: {r.status_code} {r.text}" - return user_data + response = api.register(user) + + access_token = None + if response.status_code == 200: + body = response.json() + access_token = body.get("accessToken") + + user_with_meta = { + "email": user["email"], + "password": user["password"], + "name": user["name"], + "response": response, + "access_token": access_token, + } + + yield user_with_meta + + if access_token: + with allure.step("Удаляем пользователя после теста"): + api.delete_user(access_token) @pytest.fixture def token(api, registered_user): with allure.step("Логинимся и получаем токен"): - r = api.login({"email": registered_user["email"], "password": registered_user["password"]}) - assert r.status_code == 200, f"login failed: {r.status_code} {r.text}" - body = r.json() - return body["accessToken"] + response = api.login( + { + "email": registered_user["email"], + "password": registered_user["password"], + } + ) + + access_token = None + if response.status_code == 200: + body = response.json() + access_token = body.get("accessToken") + + return { + "response": response, + "access_token": access_token, + } @pytest.fixture def ingredient_ids(api): with allure.step("Получаем список ингредиентов"): - r = api.get_ingredients() - assert r.status_code == 200, f"ingredients failed: {r.status_code} {r.text}" - ids = [i["_id"] for i in r.json()["data"]] - assert len(ids) > 1 - return ids[:2] \ No newline at end of file + response = api.get_ingredients() + + ids = [] + if response.status_code == 200: + body = response.json() + data = body.get("data", []) + ids = [item["_id"] for item in data] + + return { + "response": response, + "ids": ids, + } \ No newline at end of file diff --git a/tests/test_create_user.py b/tests/test_create_user.py index d7297f6..4925eaf 100644 --- a/tests/test_create_user.py +++ b/tests/test_create_user.py @@ -1,38 +1,50 @@ import allure -import pytest +from src.helpers import generate_user -@allure.feature("Создание пользователя") + +@allure.epic("Создание пользователя") class TestCreateUser: - @allure.title("Создать уникального пользователя") - def test_create_unique_user(self, api, user_data): - r = api.register(user_data) - assert r.status_code == 200 - body = r.json() + @allure.title("Можно создать уникального пользователя") + def test_create_unique_user_success(self, registered_user): + response = registered_user["response"] + body = response.json() + assert response.status_code == 200 assert body.get("success") is True assert "accessToken" in body assert "refreshToken" in body - assert body["user"]["email"] == user_data["email"] + assert body["user"]["email"] == registered_user["email"] + assert body["user"]["name"] == registered_user["name"] + + @allure.title("Нельзя создать двух одинаковых пользователей") + def test_create_duplicate_user_returns_error(self, api, registered_user): + payload = { + "email": registered_user["email"], + "password": registered_user["password"], + "name": registered_user["name"], + } + + with allure.step("Повторно отправляем запрос на регистрацию того же пользователя"): + response = api.register(payload) - @allure.title("Создать пользователя, который уже зарегистрирован") - def test_create_existing_user(self, api, registered_user): - r = api.register(registered_user) - assert r.status_code == 403 - body = r.json() + body = response.json() + assert response.status_code == 403 assert body.get("success") is False - assert "User already exists" in body.get("message", "") + assert body.get("message") == "User already exists" - @allure.title("Создать пользователя без обязательного поля") - @pytest.mark.parametrize("field", ["email", "password", "name"]) - def test_create_user_missing_required_field(self, api, user_data, field): - payload = dict(user_data) - payload.pop(field) + @allure.title("Нельзя создать пользователя без обязательного поля") + def test_create_user_without_required_field_returns_error(self, api): + user = generate_user() + user.pop("name") - r = api.register(payload) - assert r.status_code == 403 - body = r.json() + with allure.step("Отправляем запрос на регистрацию без поля name"): + response = api.register(user) - assert body.get("success") is False \ No newline at end of file + body = response.json() + + assert response.status_code == 403 + assert body.get("success") is False + assert body.get("message") == "Email, password and name are required fields" \ No newline at end of file diff --git a/tests/test_orders.py b/tests/test_orders.py index 76e7f7b..1cf2c17 100644 --- a/tests/test_orders.py +++ b/tests/test_orders.py @@ -1,50 +1,65 @@ import allure -@allure.feature("Создание заказа") +@allure.epic("Создание заказа") class TestOrders: @allure.title("Создание заказа с авторизацией") def test_create_order_with_auth(self, api, token, ingredient_ids): - r = api.create_order(ingredients=ingredient_ids, token=token) - assert r.status_code == 200 + r = api.create_order( + ingredients=ingredient_ids["ids"], + token=token["access_token"] + ) + body = r.json() + assert r.status_code == 200 assert body.get("success") is True - assert "order" in body - assert "number" in body["order"] + @allure.title("Создание заказа без авторизации") def test_create_order_without_auth(self, api, ingredient_ids): - r = api.create_order(ingredients=ingredient_ids, token=None) - assert r.status_code == 200 + r = api.create_order( + ingredients=ingredient_ids["ids"], + token=None + ) + body = r.json() + assert r.status_code == 200 assert body.get("success") is True - assert "order" in body - assert "number" in body["order"] + @allure.title("Создание заказа с ингредиентами") def test_create_order_with_ingredients(self, api, ingredient_ids): - r = api.create_order(ingredients=ingredient_ids, token=None) - assert r.status_code == 200 + r = api.create_order( + ingredients=ingredient_ids["ids"], + token=None + ) + body = r.json() + assert r.status_code == 200 assert body.get("success") is True - assert "order" in body - assert "number" in body["order"] + @allure.title("Создание заказа без ингредиентов") def test_create_order_without_ingredients(self, api): - r = api.create_order(ingredients=[]) - assert r.status_code == 400 + r = api.create_order() + body = r.json() + assert r.status_code == 400 assert body.get("success") is False - @allure.title("Создание заказа с неверным хешем ингредиентов") + + @allure.title("Создание заказа с неверным хешем") def test_create_order_with_invalid_hash(self, api): - r = api.create_order(ingredients=["invalid_hash"]) - assert r.status_code == 400 + r = api.create_order( + ingredients=["invalid_hash"] + ) + body = r.json() + + assert r.status_code == 400 assert body.get("success") is False \ No newline at end of file From 1eb16af7303f7fd8fa96a238915d2e19b71daab6 Mon Sep 17 00:00:00 2001 From: EvaV21 Date: Mon, 9 Mar 2026 13:10:05 +0300 Subject: [PATCH 3/3] Fix review comments: move registration from fixtures to tests, add allure.step for API methods, add cleanup fixture --- src/api.py | 5 +++++ tests/conftest.py | 24 +++++++++++++++--------- tests/test_create_user.py | 38 ++++++++++++++++++++++++++------------ tests/test_login.py | 28 +++++++++++++++++++++------- tests/test_orders.py | 38 +++++++++++++++++--------------------- 5 files changed, 84 insertions(+), 49 deletions(-) diff --git a/src/api.py b/src/api.py index 65227d8..64b4657 100644 --- a/src/api.py +++ b/src/api.py @@ -20,20 +20,25 @@ def get(self, path: str, headers: dict | None = None): def delete(self, path: str, headers: dict | None = None): return self.session.delete(BASE_URL + path, headers=headers) + @allure.step("Зарегистрировать пользователя") def register(self, payload: dict): return self.post(REGISTER, json=payload) + @allure.step("Выполнить логин пользователя") def login(self, payload: dict): return self.post(LOGIN, json=payload) + @allure.step("Получить список ингредиентов") def get_ingredients(self): return self.get(INGREDIENTS) + @allure.step("Создать заказ") def create_order(self, ingredients: list[str] | None = None, token: str | None = None): headers = {"Authorization": token} if token else None body = {"ingredients": ingredients} if ingredients is not None else {} return self.post(ORDERS, json=body, headers=headers) + @allure.step("Удалить пользователя") def delete_user(self, token: str): headers = {"Authorization": token} return self.delete(USER, headers=headers) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 9857d68..ad263d1 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,18 +11,30 @@ def api(): @pytest.fixture -def registered_user(api): +def cleanup_user(api): + tokens = [] + + yield tokens + + for token in tokens: + with allure.step("Удаляем пользователя после теста"): + api.delete_user(token) + + +@pytest.fixture +def registered_user(api, cleanup_user): user = generate_user() - with allure.step("Регистрируем пользователя"): + with allure.step("Регистрируем пользователя для предусловия теста"): response = api.register(user) access_token = None if response.status_code == 200: body = response.json() access_token = body.get("accessToken") + cleanup_user.append(access_token) - user_with_meta = { + return { "email": user["email"], "password": user["password"], "name": user["name"], @@ -30,12 +42,6 @@ def registered_user(api): "access_token": access_token, } - yield user_with_meta - - if access_token: - with allure.step("Удаляем пользователя после теста"): - api.delete_user(access_token) - @pytest.fixture def token(api, registered_user): diff --git a/tests/test_create_user.py b/tests/test_create_user.py index 4925eaf..eddf639 100644 --- a/tests/test_create_user.py +++ b/tests/test_create_user.py @@ -7,27 +7,38 @@ class TestCreateUser: @allure.title("Можно создать уникального пользователя") - def test_create_unique_user_success(self, registered_user): - response = registered_user["response"] + def test_create_unique_user_success(self, api, cleanup_user): + user = generate_user() + + with allure.step("Регистрируем уникального пользователя"): + response = api.register(user) + body = response.json() + if response.status_code == 200 and "accessToken" in body: + cleanup_user.append(body["accessToken"]) + assert response.status_code == 200 assert body.get("success") is True assert "accessToken" in body assert "refreshToken" in body - assert body["user"]["email"] == registered_user["email"] - assert body["user"]["name"] == registered_user["name"] + assert body["user"]["email"] == user["email"] + assert body["user"]["name"] == user["name"] @allure.title("Нельзя создать двух одинаковых пользователей") - def test_create_duplicate_user_returns_error(self, api, registered_user): - payload = { - "email": registered_user["email"], - "password": registered_user["password"], - "name": registered_user["name"], - } + def test_create_duplicate_user_returns_error(self, api, cleanup_user): + user = generate_user() + + with allure.step("Регистрируем пользователя впервые"): + first_response = api.register(user) + + first_body = first_response.json() + + if first_response.status_code == 200 and "accessToken" in first_body: + cleanup_user.append(first_body["accessToken"]) with allure.step("Повторно отправляем запрос на регистрацию того же пользователя"): - response = api.register(payload) + response = api.register(user) body = response.json() @@ -36,7 +47,7 @@ def test_create_duplicate_user_returns_error(self, api, registered_user): assert body.get("message") == "User already exists" @allure.title("Нельзя создать пользователя без обязательного поля") - def test_create_user_without_required_field_returns_error(self, api): + def test_create_user_without_required_field_returns_error(self, api, cleanup_user): user = generate_user() user.pop("name") @@ -45,6 +56,9 @@ def test_create_user_without_required_field_returns_error(self, api): body = response.json() + if response.status_code == 200 and "accessToken" in body: + cleanup_user.append(body["accessToken"]) + assert response.status_code == 403 assert body.get("success") is False assert body.get("message") == "Email, password and name are required fields" \ No newline at end of file diff --git a/tests/test_login.py b/tests/test_login.py index 8e0b3b6..797b6d3 100644 --- a/tests/test_login.py +++ b/tests/test_login.py @@ -6,18 +6,32 @@ class TestLogin: @allure.title("Вход под существующим пользователем") def test_login_existing_user(self, api, registered_user): - r = api.login({"email": registered_user["email"], "password": registered_user["password"]}) - assert r.status_code == 200 - body = r.json() + with allure.step("Логинимся под существующим пользователем"): + response = api.login( + { + "email": registered_user["email"], + "password": registered_user["password"], + } + ) + body = response.json() + + assert response.status_code == 200 assert body.get("success") is True assert "accessToken" in body assert "refreshToken" in body @allure.title("Вход с неверным логином и паролем") def test_login_wrong_credentials(self, api): - r = api.login({"email": "nope@yandex.ru", "password": "wrong"}) - assert r.status_code == 401 - body = r.json() + with allure.step("Логинимся с неверными данными"): + response = api.login( + { + "email": "nope@yandex.ru", + "password": "wrong", + } + ) + + body = response.json() - assert body.get("success") is False + assert response.status_code == 401 + assert body.get("success") is False \ No newline at end of file diff --git a/tests/test_orders.py b/tests/test_orders.py index 1cf2c17..84f3679 100644 --- a/tests/test_orders.py +++ b/tests/test_orders.py @@ -6,60 +6,56 @@ class TestOrders: @allure.title("Создание заказа с авторизацией") def test_create_order_with_auth(self, api, token, ingredient_ids): - r = api.create_order( + response = api.create_order( ingredients=ingredient_ids["ids"], token=token["access_token"] ) - body = r.json() + body = response.json() - assert r.status_code == 200 + assert response.status_code == 200 assert body.get("success") is True - @allure.title("Создание заказа без авторизации") def test_create_order_without_auth(self, api, ingredient_ids): - r = api.create_order( + response = api.create_order( ingredients=ingredient_ids["ids"], token=None ) - body = r.json() + body = response.json() - assert r.status_code == 200 + assert response.status_code == 200 assert body.get("success") is True - @allure.title("Создание заказа с ингредиентами") def test_create_order_with_ingredients(self, api, ingredient_ids): - r = api.create_order( + response = api.create_order( ingredients=ingredient_ids["ids"], token=None ) - body = r.json() + body = response.json() - assert r.status_code == 200 + assert response.status_code == 200 assert body.get("success") is True - @allure.title("Создание заказа без ингредиентов") def test_create_order_without_ingredients(self, api): - r = api.create_order() + response = api.create_order() - body = r.json() + body = response.json() - assert r.status_code == 400 + assert response.status_code == 400 assert body.get("success") is False - @allure.title("Создание заказа с неверным хешем") def test_create_order_with_invalid_hash(self, api): - r = api.create_order( - ingredients=["invalid_hash"] - ) + response = api.create_order( + ingredients=["invalid_hash"] + ) - body = r.json() + body = response.json() - assert r.status_code == 400 + assert response.status_code == 400 assert body.get("success") is False \ No newline at end of file