TGViewer
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL @aqa_engineer · 1.52K subscribers
Post #426 893
#solid
📌 I – Interface Segregation Principle (ISP)

Принцип разделения интерфейсов

“Не заставляй клиента зависеть от того, что он не использует.”

В автоматизации это часто встречается, когда в один «удобный» хелпер пихают вообще всё подряд — и API, и UI, и БД.

🧪 Пример

Представим, что кто-то решил упростить жизнь и создал “универсальный” интерфейс:
class TestHelper:
def get_sms_code_by_api(self): ...
def login_from_ui(self): ...
def check_user_created_in_db(self): ...
def get_kafka_message(self): ...


Теперь любой тест, независимо от контекста, тянет за собой весь этот набор.
• Тесты на API зависят от методов, которые они не используют
• UI‑тесты вынуждены тащить зависимости от kafka или БД
• Такие классы очень быстро увеличиваются в размерах, их становится тяжело поддерживать.

Нарушен ISP — мы создали жирный интерфейс, который знает всё и сразу.

✅ Как исправить?

Разделить интерфейсы по зонам ответственности:
class ApiHelper:
def get_sms_code(self): ...

class UiHelper:
def login(self): ...

class KafkalHelper:
def get_message(self): ...

class DbHelper:
def check_user_created(self): ...


Теперь каждый тест получает только то, что ему реально нужно:
def test_ui_login(ui: UiHelper):
ui.login()

def test_registration_in_db(db: DbHelper):
...
db.check_user_created()


Как правильно сделать удобный хэлпер, не нарушая принцип ISP?

class TestHelper:
def __init__(
self,
ui: UiHelper,
db: DbHelper,
kafka: KafkalHelper,
api: ApiHelper
) -> None:
self.ui = ui
self.kafka = kafka
self.db = db
self.api = api


Теперь TestHelper — это фасад, который объединяет несколько интерфейсов, но не нарушает ISP, потому что:

1. Клиенты (тесты) зависят только от того, что используют – если тест работает только с UI, он может обращаться только к helper.ui, не зная о других модулях.

2. Интерфейсы внутри фасада разделены – UiHelper, ApiHelper и другие остаются независимыми.

Теперь мы используем только то что нужно, но при этом не нарушаем ISP и тест выглядит так.

def test_user_registration(helper: TestHelper):
helper.ui.login()
helper.api.get_sms_code()
helper.kafka.get_message()
helper.db.check_user_created()


🔧 Когда мы соблюдаем ISP то:
• Проще вникнуть в небольшие независимые классы
• Проще переиспользовать компоненты
• Удобно если много интеграций API, UI, DB

Вывод:

Соблюдение ISP делает код:
🔹 Более модульным — только нужные зависимости
🔹 Легче тестировать
🔹 Проще поддерживать, меньше случайных поломок


——————————-

📱 TG-сообщество

📱 Обучение

📱 Отзывы
  • 🔥 5
  • ❤ 3
  • 🙏 1
More from @aqa_engineer
  1. Sep 2, 2026💙💙💙💙💙 Маленькое напоминание о большой дате: где стоит провести День программиста⬆️ Ар…
  2. Sep 2, 2026Привет, давно меня не было пригар по работе, что совсем не успеваю ничего. За что прошу пр…
  3. Jul 16, 2026👩‍💻 В мае-июне я проходила курс «Автоматизация тестирования Rest API Advanced (Python)»…
  4. Jun 10, 2026Привет! Уже на следующей неделе у меня стартуют. Автоматизация тестирования брокеров сообщ…
  5. Jun 8, 2026Несколько месяцев назад я спросил, какой технический тренинг вам был бы действительно инте…
  6. Jun 6, 2026Материалы для тех, кто в теме. Одна из самых больших проблем при развитии в IT - это возмо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →