-
Notifications
You must be signed in to change notification settings - Fork 0
task 7 #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
task 7 #3
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 | ||
|
|
||
|
|
| 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 | ||
|
|
| 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') | ||
| def test_login_courier_true(self): | ||
| payload = { | ||
| "login": generate_random_string(10), | ||
| "password": generate_random_string(10) | ||
| } | ||
| response = requests.post(post_courier, data=payload) | ||
|
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||
|
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Можно лучше: здесь и далее: тексты ответов на вопросы следует выносить в дата модули. В случае изменении текста ответа от сервера, не придется править в каждом тесте отдельно. Достаточно будет поправить лишь в одном месте - дата модуле. |
||
|
|
||
| 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 | ||
|
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||
| 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно исправить: здесь и далее: для читаемого отображения отчетов над каждым тестом необходимо ставить декоратор title.