10. (П5) Виконання завдань з тестування програм, що працюють із базою даних PostgreSQL, за допомогою pytest¶
Передумови¶
- Виконана Практична 4 — Обробка помилок і транзакції (файл
bank.py) - Прочитана Лекція 9 — Тестування програм БД у pytest
- Запущений PostgreSQL (інструкція запуску через Docker)
Завдання¶
Написати набір автоматичних тестів для банківської програми з Практичної 4, використовуючи pytest та фікстури.
Крок 1. Підготовка проєкту¶
Встановити pytest у віртуальне середовище:
Структура проєкту повинна мати такий вигляд:
project/
├── bank.py # Програма з Практичної 4
├── conftest.py # Фікстури pytest
├── test_bank.py # Тести
└── requirements.txt
Крок 2. Рефакторинг bank.py¶
Щоб код можна було тестувати, банківську логіку потрібно винести в окремий клас AccountService, який приймає з'єднання як параметр.
Клас повинен мати такі методи:
create_account(owner, balance=0)— створює рахунок, повертає йогоidget_balance(account_id)— повертає баланс рахунку (або кидає виняток, якщо рахунок не знайдено)transfer(from_id, to_id, amount)— переказує кошти між рахункамиget_all_accounts()— повертає список усіх рахунків
CLI-частина (if __name__ == "__main__") залишається в bank.py і використовує AccountService.
Крок 3. Створення conftest.py¶
Створити файл conftest.py з фікстурами:
db_connection(scope=session) — з'єднання з тестовою базою PostgreSQL зautocommit = Truecreate_tables(scope=session, autouse=True) — створення таблиціaccountsclean_tables(autouse=True) — очищення таблиціaccountsперед кожним тестомservice— екземплярAccountService, готовий до використання в тестахfunded_accounts— створює два тестових рахунки з початковим балансом (наприклад, 1000 та 500 грн) і повертає їхніid
Крок 4. Написання тестів¶
Створити файл test_bank.py з тестами, організованими у класи:
TestCreateAccount — тестування створення рахунків:
- Створення рахунку з балансом за замовчуванням (0)
- Створення рахунку з початковим балансом
TestGetBalance — тестування отримання балансу:
- Отримання балансу існуючого рахунку
- Спроба отримати баланс неіснуючого рахунку (перевірка винятку)
TestTransfer — тестування переказів:
- Успішний переказ коштів (перевірити баланси обох рахунків)
- Переказ усіх коштів з рахунку (баланс = 0)
- Переказ при недостатньому балансі (перевірка винятку та незмінності балансів)
- Переказ від'ємної суми (перевірка винятку)
- Переказ з неіснуючого рахунку (перевірка винятку)
- Переказ на неіснуючий рахунок (перевірка винятку)
- Кілька послідовних переказів (перевірити кінцеві баланси)
Крок 5. Запуск тестів¶
Запустити тести та переконатися, що всі проходять:
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub