Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Sprint_7
Запуск всех тестов с генерацией отчетов командой: python -m pytest --alluredir allure-results

Просмотреть полученные отчеты командой: allure serve allure-results


Empty file added conftest.py
Empty file.
21 changes: 21 additions & 0 deletions data_helper.py
Original file line number Diff line number Diff line change
@@ -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

Binary file added requirements.txt
Binary file not shown.
Empty file added test/__init__.py
Empty file.
39 changes: 39 additions & 0 deletions test/test_chech_login.py
Original file line number Diff line number Diff line change
@@ -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')

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: здесь и далее: для читаемого отображения отчетов над каждым тестом необходимо ставить декоратор title.

def test_login_courier_true(self):
payload = {
"login": generate_random_string(10),
"password": generate_random_string(10)
}
response = requests.post(post_courier, data=payload)

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно лучше: данный функционал относится к предусловиям, а предусловия принято выносить в фикстуры для удобства переиспользования.

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

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно лучше: здесь и далее: тексты ответов на вопросы следует выносить в дата модули. В случае изменении текста ответа от сервера, не придется править в каждом тесте отдельно. Достаточно будет поправить лишь в одном месте - дата модуле.


72 changes: 72 additions & 0 deletions test/test_create_courier.py
Original file line number Diff line number Diff line change
@@ -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

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить: проверки лишь статуса кода недостаточно. Необходимо также парсить ответ.


@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
40 changes: 40 additions & 0 deletions test/test_create_orders.py
Original file line number Diff line number Diff line change
@@ -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