На чем можешь проводить тестирование
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные инструменты тестирования в Python
В Python существует множество подходов и инструментов для тестирования, в зависимости от типа проекта и требований:
1. Unit-тестирование
pytest — самый популярный фреймворк для тестирования в Python. Он более гибкий и удобный, чем встроенный unittest:
import pytest
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
@pytest.mark.parametrize("a,b,expected", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
def test_add_parametrized(a, b, expected):
assert add(a, b) == expected
unittest — встроенная библиотека Python для написания тестов:
import unittest
class TestAdd(unittest.TestCase):
def test_add_positive(self):
self.assertEqual(add(2, 3), 5)
def test_add_negative(self):
self.assertEqual(add(-1, 1), 0)
2. Интеграционное тестирование
Для тестирования взаимодействия различных компонентов системы:
import pytest
from unittest.mock import Mock, patch
@patch("requests.get")
def test_fetch_user_data(mock_get):
mock_get.return_value.json.return_value = {"id": 1, "name": "John"}
result = fetch_user(1)
assert result["name"] == "John"
3. Тестирование веб-приложений
Flask/Django тестирование с использованием встроенных test client:
from django.test import TestCase, Client
class UserTestCase(TestCase):
def setUp(self):
self.client = Client()
def test_user_registration(self):
response = self.client.post("/register/", {
"username": "john",
"password": "123456"
})
self.assertEqual(response.status_code, 201)
Playwright — для E2E тестирования веб-приложений:
from playwright.sync_api import sync_playwright
def test_login():
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
page.fill("input[name=username]", "user@example.com")
page.fill("input[name=password]", "password123")
page.click("button[type=submit]")
assert "Dashboard" in page.text_content()
4. Тестирование производительности
locust — для нагрузочного тестирования:
from locust import HttpUser, task, between
class UserBehavior(HttpUser):
wait_time = between(1, 3)
@task(1)
def index(self):
self.client.get("/")
@task(2)
def profile(self):
self.client.get("/profile")
5. Тестирование с моками
unittest.mock — встроенная библиотека для создания моков:
from unittest.mock import Mock, MagicMock, patch
def test_database_call():
mock_db = Mock()
mock_db.query.return_value = [{"id": 1, "name": "test"}]
result = get_user_from_db(mock_db, 1)
assert len(result) == 1
mock_db.query.assert_called_once()
6. Тестирование асинхронного кода
pytest-asyncio — для тестирования async функций:
import pytest
import asyncio
@pytest.mark.asyncio
async def test_async_function():
result = await async_operation()
assert result == "expected"
7. Инструменты анализа покрытия
coverage.py — для измерения покрытия кода:
# Запуск тестов с измерением покрытия
coverage run -m pytest
coverage report
coverage html # Генерирует HTML отчет
8. Непрерывная интеграция
GitHub Actions, GitLab CI, Jenkins — для автоматического запуска тестов при каждом commit.
Выбор инструмента
- Начинающим: pytest + unittest.mock
- Веб-приложения: Django/Flask TestCase + Playwright для E2E
- Микросервисы: pytest + httpx для HTTP тестирования
- Асинхронный код: pytest-asyncio
- Нагрузочное тестирование: locust
- Покрытие кода: coverage.py
В большинстве проектов рекомендуется использовать pytest как основной инструмент, так как он стал индустриальным стандартом и обеспечивает максимальную гибкость при минимальном количестве boilerplate кода.