6.9 KiB
6.9 KiB
🧪 Интеграционные тесты с LDAP
Простые интеграционные тесты с реальным LDAP сервером.
🎯 Подход
Держите LDAP сервер запущенным постоянно во время разработки.
Не нужны сложные фикстуры для управления Docker - просто запустите LDAP один раз и пишите обычные pytest тесты.
🚀 Быстрый старт
1. Запустите LDAP сервер (один раз)
cd backend
./ldap-test.sh start
LDAP сервер запустится в Docker и будет работать в фоне.
2. Запустите тесты
# Все интеграционные тесты
pytest tests/integration/ -v
# Конкретный тест
pytest tests/integration/test_ldap_simple.py::TestLDAPIntegration::test_register_user_creates_in_ldap -v
# С подробным выводом
pytest tests/integration/ -v -s
3. Пишите новые тесты
Используйте простые фикстуры из conftest.py:
@pytest.mark.django_db
def test_my_feature(self, ldap_test_settings, ldap_connection):
"""Мой тест с LDAP"""
# Arrange
username = "test_myfeature"
# Act
# ... ваш код ...
# Assert - проверка в LDAP
from .conftest import ldap_search_user
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is not None
📋 Доступные helper функции
В conftest.py есть готовые функции для работы с LDAP:
ldap_search_user(ldap_connection, username)- найти пользователя в LDAPldap_delete_user(ldap_connection, username)- удалить пользователя из LDAPldap_cleanup_test_users(ldap_connection, prefix="test_")- очистить всех тестовых пользователейget_ldap_connection(ldap_connection)- получить прямое подключение к LDAP
Фикстуры
ldap_connection(session) - параметры подключения к LDAPldap_test_settings- временно переключает Django на тестовый LDAPcleanup_test_data(autouse) - автоматически очищает тестовые данные после каждого теста
🔧 Управление LDAP сервером
# Запустить
./ldap-test.sh start
# Остановить (но не удалять данные)
./ldap-test.sh stop
# Перезапустить
./ldap-test.sh restart
# Посмотреть логи
./ldap-test.sh logs
# Проверить что LDAP работает
./ldap-test.sh check
# Полная очистка (удалит все данные)
./ldap-test.sh clean
🌐 Веб-интерфейс phpLDAPadmin
Для визуального просмотра данных в LDAP:
start http://localhost:8090
Вход:
- Login DN:
cn=admin,dc=test,dc=local - Password:
test_admin_password
Здесь можно посмотреть структуру LDAP, созданных пользователей, группы и т.д.
📝 Структура тестов
tests/integration/
├── conftest.py # Фикстуры и helper функции
├── test_ldap_simple.py # Простые интеграционные тесты
└── README.md # Эта инструкция
🎨 Пример теста
import pytest
from django.test import TestCase
from .conftest import ldap_search_user
class TestMyFeature(TestCase):
@pytest.mark.django_db
def test_user_creation(self, ldap_test_settings, ldap_connection):
"""Создание пользователя синхронизируется с LDAP"""
# Arrange
user_data = {
"username": "test_newuser",
"email": "newuser@test.local",
"password": "Password123!",
# ... другие поля
}
# Act
response = self.client.post("/api/v1/employees/register/", user_data)
# Assert - проверяем Django
assert response.status_code == 201
# Assert - проверяем LDAP
ldap_user = ldap_search_user(ldap_connection, "test_newuser")
assert ldap_user is not None
dn, attrs = ldap_user
assert b"newuser@test.local" in attrs.get("mail", [])
🐛 Отладка
Проверить что LDAP запущен
docker ps | grep ldap
# Должен показать: eusrr-test-ldap
Посмотреть логи LDAP
./ldap-test.sh logs
Проверить подключение к LDAP
./ldap-test.sh check
Очистить тестовые данные вручную
from tests.integration.conftest import ldap_cleanup_test_users
ldap_connection = {
"uri": "ldap://localhost:10389",
"base_dn": "dc=test,dc=local",
"admin_dn": "cn=admin,dc=test,dc=local",
"admin_password": "test_admin_password",
"users_ou": "ou=Users,dc=test,dc=local",
}
ldap_cleanup_test_users(ldap_connection, prefix="test_")
✅ Преимущества этого подхода
- Простота - обычные pytest тесты, никаких сложных фикстур
- Скорость - LDAP запускается один раз, не перезапускается между тестами
- Удобство - веб-интерфейс для визуального контроля
- Изоляция - автоматическая очистка тестовых данных после каждого теста
- Реалистичность - тесты работают с настоящим LDAP
🔄 Workflow разработки
-
Утром - запускаете LDAP сервер:
./ldap-test.sh start -
В течение дня - пишете и запускаете тесты:
pytest tests/integration/ -v -
Вечером - останавливаете сервер (опционально):
./ldap-test.sh stop -
При необходимости - чистите данные:
./ldap-test.sh clean && ./ldap-test.sh start
📚 Следующие шаги
- Дописать проверки для полей в LDAP (accountStatus, etc)
- Добавить тесты для групп и департаментов
- Добавить тесты для обновления пользователей
- Протестировать синхронизацию при изменении данных