JustCaptain kod-buduschego
llm/change-23ccdc
Перейти к файлу
Код
TASK.md

Задача 1. Валидатор пароля

Функция:

def validate_password(password: str) -> bool:
...

Требования

Пароль считается валидным, если:

  • минимум 8 символов;
  • есть хотя бы одна цифра;
  • есть хотя бы одна заглавная буква;
  • есть хотя бы одна строчная буква;
  • нет пробелов.

Что нужно сделать

Написать полный набор тестов.

Подумать над кейсами

Password123 -> True
password123 -> False
PASSWORD123 -> False
Password -> False
Pass 123 -> False
P1a -> False

⸻

Задача 2. Банковский перевод

Функция:

def transfer(balance, amount):
...

Требования

  • нельзя перевести отрицательную сумму;
  • нельзя перевести больше баланса;
  • баланс не может стать отрицательным;
  • при успешном переводе вернуть новый баланс.

Примеры

transfer(1000, 500) # 500
transfer(1000, 0) # ?
transfer(1000, -10) # Exception
transfer(1000, 2000) # Exception

Задача

Определить все тест-кейсы самостоятельно.

⸻

Задача 3. Поиск пользователя

Функция:

def find_user(users, email):
...

Вход

users = [
{"email": "a@test.com"},
{"email": "b@test.com"},
]

Требования

  • вернуть пользователя;
  • вернуть None, если пользователь не найден.

Интересные кейсы

  • пустой список;
  • email в другом регистре;
  • None вместо email;
  • несколько одинаковых email;
  • список из 10000 пользователей.

⸻

Задача 4. Корзина интернет-магазина

Функция:

def calculate_total(items):
...

Вход

[
{"price": 100, "quantity": 2},
{"price": 50, "quantity": 3},
]

Требования

Сумма = цена × количество.

Нужно протестировать

  • пустую корзину;
  • отрицательную цену;
  • количество 0;
  • дробные цены;
  • большие значения;
  • отсутствие поля price;
  • отсутствие поля quantity.

⸻

Задача 5. Ограничение попыток входа

Класс:

class LoginManager:
...

Логика

После 3 неудачных попыток аккаунт блокируется.

Написать тесты

Проверить:

  • успешный вход;
  • 1 ошибка;
  • 2 ошибки;
  • 3 ошибки;
  • вход после блокировки;
  • успешный вход между ошибками;
  • сброс счётчика.

⸻

Задача 6. Кэширование

Функция:

@cache
def get_user(user_id):
...

Требования

Если пользователь уже запрашивался, база данных не должна вызываться повторно.

Нужно проверить

  • первый вызов;
  • повторный вызов;
  • разные id;
  • очистку кэша.

Для этого придётся использовать mock.

⸻

Задача 7. API клиента

Функция:

def get_weather(city):
...

Внутри делает HTTP-запрос.

Нужно протестировать

  • код ответа 200;
  • код ответа 404;
  • код ответа 500;
  • таймаут;
  • пустой ответ;
  • битый JSON.

Использовать:

from unittest.mock import patch

или

pytest-mock

⸻

Задача 8. Декоратор логирования

Есть декоратор:

@log_calls
def calculate():
...

Он должен писать в лог:

Function calculate called

Проверить

  • лог появляется;
  • лог содержит имя функции;
  • лог пишется при исключении;
  • несколько вызовов подряд.

⸻

Задача 9. Система скидок

Функция:

def get_discount(user_type, amount):
...

Правила

regular -> 0%
premium -> 10%
vip -> 20%
если сумма > 10000:
+5%

Написать тесты

Используя параметризацию pytest.

⸻

Задача 10. Тестирование класса

class Stack:
def push(self, item):
...
def pop(self):
...
def size(self):
...

Проверить

  • добавление элемента;
  • несколько элементов;
  • извлечение элементов;
  • порядок LIFO;
  • размер стека;
  • извлечение из пустого стека;
  • большое количество элементов.

⸻

Если хочешь задачи уровня “как дают на реальном проекте Python QA Automation”, то дальше идут:

  •  mock и patch;
  •  pytest fixtures;
  •  тестирование REST API;
  •  тестирование БД;
  •  тестирование очередей (RabbitMQ/Kafka);
  •  тестирование асинхронного кода (asyncio);
  •  Page Object Model для Selenium/Playwright.