diff --git a/README.md b/README.md new file mode 100644 index 0000000..132e752 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Sprint_7 +Запуск всех тестов с генерацией отчетов командой: python -m pytest --alluredir allure-results + +Просмотреть полученные отчеты командой: allure serve allure-results + + diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..e69de29 diff --git a/data_helper.py b/data_helper.py new file mode 100644 index 0000000..f7b5b1d --- /dev/null +++ b/data_helper.py @@ -0,0 +1,21 @@ +import random +import string +from datetime import datetime + +main_url = 'https://qa-scooter.praktikum-services.ru' +post_courier = f'{main_url}/api/v1/courier' +del_courier = f'{main_url}/api/v1/courier/:id' +login_courier = f'{main_url}/api/v1/courier/login' +create_order= f'{main_url}/api/v1/orders' + + +def generate_random_string(length): + letters = string.ascii_lowercase + random_string = ''.join(random.choice(letters) for i in range(length)) + return random_string + +def generate_random_numbers(length): + numbs = '0123456789' + random_nums = ''.join(random.choice(numbs) for i in range(length)) + return random_nums + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..aa38565 Binary files /dev/null and b/requirements.txt differ diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_chech_login.py b/test/test_chech_login.py new file mode 100644 index 0000000..5b4203b --- /dev/null +++ b/test/test_chech_login.py @@ -0,0 +1,39 @@ +import allure +import pytest +import requests + +from data_helper import post_courier, generate_random_string, login_courier + +@allure.description('Проверяем ручку "Логин курьера в системе"') +class TestCheckLoginCourier: + + @allure.step('Создаем и регистрируем всегда разных курьеров, и пробуем зайти в систему под его логином и паролем. Ожидаем успех == 200') + def test_login_courier_true(self): + payload = { + "login": generate_random_string(10), + "password": generate_random_string(10) + } + response = requests.post(post_courier, data=payload) + assert response.json() == {'ok': True} and response.status_code == 201 + id_courier = payload + response = requests.post(login_courier, id_courier) + assert response.status_code == 200 + + @allure.step('Генерируем логин и пароль и пробуем зайти в систему.') + def test_login_noreg_courier_true(self): + payload = { + "login": generate_random_string(10), + "password": generate_random_string(10) + } + response = requests.post(login_courier, payload) + assert response.json() == {"code": 404, "message": "Учетная запись не найдена"} and response.status_code == 404 + + @allure.step('Попытались зайти без пароля.') + def test_login_noreg_nopass_courier_true(self): + payload = { + "login": generate_random_string(10), + "password": "" + } + response = requests.post(login_courier, payload) + assert response.json() == {"code": 400, "message": "Недостаточно данных для входа"} and response.status_code == 400 + diff --git a/test/test_create_courier.py b/test/test_create_courier.py new file mode 100644 index 0000000..0d0480b --- /dev/null +++ b/test/test_create_courier.py @@ -0,0 +1,72 @@ +import allure +import pytest +import requests + +from data_helper import post_courier, generate_random_string + +@allure.description('Класс тестирования курьера. Создание.') +class TestCreateCourier: + + @allure.step('Создаем всегда разных курьеров заполняя все поля. Ожидаем ответ == 201') + def test_create_courier_true(self): + payload = { + "login": generate_random_string(10), + "password": generate_random_string(10), + "firstName": generate_random_string(10) + } + response = requests.post(post_courier, data=payload) + assert response.status_code == 201 + + @allure.step('Передали существующие данные.') + def test_cant_create_two_same_courier_false(self): + payload = { + "login": "ninja", + "password": "1234", + "firstName": "saske" + } + response = requests.post(post_courier, data=payload) + assert response.json() == {"code": 409, + "message": "Этот логин уже используется. Попробуйте другой."} and response.status_code == 409 + + @allure.step('Сгенерировали пароль и имя, логин пустой.') + def test_missing_login_data_false(self): + payload = { + "login": "", + "password": generate_random_string(10), + "firstName": generate_random_string(10) + } + response = requests.post(post_courier, data=payload) + assert response.json() == {"code": 400, + "message": "Недостаточно данных для создания учетной записи"} and response.status_code == 400 + + @allure.step('Сгенерировали логин и имя, пароль пустой.') + def test_missing_password_data_false(self): + payload = { + "login": generate_random_string(10), + "password": "", + "firstName": generate_random_string(10) + } + response = requests.post(post_courier, data=payload) + assert response.json() == {"code": 400, + "message": "Недостаточно данных для создания учетной записи"} and response.status_code == 400 + + @allure.step('Сгенерировали логин и пароль, имя пустое.') + def test_missing_fname_data_true(self): + payload = { + "login": generate_random_string(10), + "password": generate_random_string(10), + "firstName": "" + } + response = requests.post(post_courier, data=payload) + assert response.json() == {'ok': True} and response.status_code == 201 + + @allure.step('Логин существует в системе, пароль и имя сгенерировали.') + def test_cant_create_two_same_logins_true(self): + payload = { + "login": "ninja", + "password": generate_random_string(10), + "firstName": generate_random_string(10) + } + response = requests.post(post_courier, data=payload) + assert response.json() == {"code": 409, + "message": "Этот логин уже используется. Попробуйте другой."} and response.status_code == 409 diff --git a/test/test_create_orders.py b/test/test_create_orders.py new file mode 100644 index 0000000..6eedd9b --- /dev/null +++ b/test/test_create_orders.py @@ -0,0 +1,40 @@ +import json +import allure +import pytest +import requests + +from data_helper import generate_random_string, generate_random_numbers, create_order + + +@allure.description('Проверяем ручки раздела "Заказы (Orders)"') +class TestCreateOrders: + + # делаем параметризацию цвета и даты доставки + # передаем создание по 1 цвету, без цвета и одновременно 2 цвета + @pytest.mark.parametrize('change',["BLACK","SILVER","",["BLACK","SILVER"]]) + # передаем 3 разные даты доставки + @pytest.mark.parametrize('date_order', ["2029-12-01", "2019-12-01", "2026-12-01"]) + @allure.step('Успешное создание заказа заполняя все поля рандомными значениями') + def test_create_order_true(self, change, date_order): + payload = { + "firstName": generate_random_string(10), + "lastName": generate_random_string(10), + "address": generate_random_string(10), + "metroStation": generate_random_numbers(3), + "phone": generate_random_numbers(11), + "rentTime": generate_random_numbers(1), + "deliveryDate": date_order, + "comment": generate_random_string(10), + "color": [ + change] + } + json_string = json.dumps(payload) + response = requests.post(create_order, data=json_string) + assert "track" in response.json() and response.status_code == 201 + assert "BLACK","SILVER" in response.json() + + @allure.step('Проверяем что возвращается список заказов. Лимит заказов для отображения =1, страница=0') + def test_get_orders(self): + response = requests.get(f'{create_order}?limit=1&page=0') + assert "orders" in response.json() + assert response.status_code==200 \ No newline at end of file