Ответ
Да, конечно. В Python функция может принимать множество параметров разных типов. Это основа для написания модульных и параметризованных тестов.
Основные способы передачи аргументов:
- Позиционные аргументы: Передаются по порядку.
def test_user_login(username, password, expected_status): # Тело теста: выполняем логин и проверяем статус actual_status = login(username, password) assert actual_status == expected_status, f"Login failed for {username}"
Вызов с позиционными аргументами
test_user_login("test_user", "Qwerty123", 200)
2. **Именованные (keyword) аргументы:** Передаются по имени, порядок не важен.
```python
test_user_login(expected_status=200, password="Qwerty123", username="test_user")
- Параметризация тестов (в pytest): Позволяет запустить один тест с разными наборами данных.
import pytest
@pytest.mark.parametrize("username, password, expected_status", [ ("valid_user", "pass123", 200), ("invalid_user", "wrong", 401), ("", "pass123", 400), # Пустое имя пользователя ]) def test_login_parameterized(username, password, expected_status): actual_status = login(username, password) assert actual_status == expected_status
**Для тестирования это критически важно:** мы можем создавать гибкие тестовые функции, которые проверяют различные сценарии (позитивные, негативные, граничные случаи), передавая разные комбинации входных данных и ожидаемых результатов.