Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish📈 Telegram kanali Python | Вопросы собесов analitikasi
Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 631 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 915-o'rinni va Rossiya mintaqasida 51 035-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 631 obunachiga ega bo‘ldi.
16 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -115 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.29% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.30% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 794 marta ko‘riladi; birinchi sutkada odatda 543 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ставь, модуль, строка, docker, alice kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 17 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
pytest — это популярный и мощный фреймворк для тестирования, который позволяет писать компактные и легко читаемые тесты. Он широко используется благодаря своей простоте, гибкости и поддержке различных расширений. Поддерживает как модульное, так и функциональное тестирование, предоставляя множество удобных инструментов для тестирования кода.
Основные особенности
1️⃣ Простой синтаксис: Использует лаконичный и интуитивно понятный синтаксис для написания тестов.
2️⃣ Автоматическое обнаружение тестов: Автоматически обнаруживает тестовые функции и методы, что упрощает организацию тестов.
3️⃣ Фикстуры (fixtures): Предоставляет мощный механизм фикстур, который позволяет задавать исходные условия для тестов.
4️⃣ Параметризация тестов: Позволяет запускать один и тот же тест с разными входными данными, что сокращает количество повторяющегося кода.
5️⃣ Поддержка плагинов: Имеет богатую экосистему плагинов, которые расширяют его функциональность.
6️⃣ Совместимость: Совместим с unittest и другими фреймворками, что упрощает миграцию.
Установка pytest
Можно установить с помощью pip:
pip install pytest
Тестирование функции
Предположим, у нас есть простая функция для сложения двух чисел:
# math_operations.py
def add(a, b):
return a + b
Теперь напишем тест для этой функции с его использованием:
# test_math_operations.py
from math_operations import add
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(-1, -1) == -2
Запуск тестов
Для него можно использовать команду pytest:
pytest test_math_operations.py
pytest автоматически найдет и выполнит все тесты, а затем выведет результаты на экран.
Фикстуры (fixtures)
Позволяют задавать инициализацию, необходимую для тестов. Они могут использоваться для подготовки данных, создания объектов и других операций, которые нужны перед выполнением тестов.
# test_math_operations.py
import pytest
from math_operations import add
@pytest.fixture
def input_data():
return 1, 2
def test_add(input_data):
a, b = input_data
assert add(a, b) == 3
Параметризация тестов
Позволяет запускать один и тот же тест с разными наборами данных.
# test_math_operations.py
import pytest
from math_operations import add
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(-1, 1, 0),
(-1, -1, -2),
])
def test_add(a, b, expected):
assert add(a, b) == expected
Плагины:
Поддерживает множество плагинов, которые расширяют его функциональность. Некоторые из популярных плагинов:
➕ pytest-cov: Генерация отчетов о покрытии кода тестами.
➕ pytest-xdist: Параллельное выполнение тестов.
➕ pytest-mock: Интеграция с библиотекой unittest.mock для создания и управления mock-объектами.
Пример использования плагина pytest-cov
Для его установки:
pip install pytest-cov
Запуск тестов с генерацией отчета о покрытии:
pytest --cov=my_module test_my_module.py
pytest — это мощный и гибкий фреймворк для тестирования, который упрощает написание и выполнение тестов. Благодаря простому синтаксису, поддержке фикстур, параметризации и плагинов, Позволяет эффективно автоматизировать процесс тестирования и обеспечивать высокое качество кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхmock — это термин, который относится к созданию фиктивных объектов или имитаций для тестирования. Обычно означает использование библиотеки unittest.mock, которая входит в стандартную библиотеку и предоставляет мощные инструменты для создания и управления mock-объектами.
Позволяют изолировать тестируемый код от внешних зависимостей, таких как базы данных, сетевые соединения, файловые системы и другие ресурсы. Это делает тесты более надежными и позволяет тестировать только тот код, который непосредственно интересует разработчика.
Основные возможности:
1️⃣ Mock-объекты: Можно создавать фиктивные объекты, которые имитируют поведение реальных объектов.
2️⃣ Патчинг (patching): Позволяет временно заменять объекты в определенном пространстве имен на mock-объекты.
3️⃣ Отслеживание вызовов: Mock-объекты могут отслеживать, какие методы или атрибуты были вызваны и с какими аргументами.
4️⃣ Настройка возвращаемых значений и побочных эффектов: Можно задавать возвращаемые значения и побочные эффекты для методов mock-объектов.
Основные компоненты:
1️⃣ `Mock` класс: Базовый класс для создания mock-объектов.
2️⃣ mock — этдекоратор и контекстный менеджер: Используются для замены объектов на mock-объекты в определенном пространстве имен.
3️⃣ MagicMock класс: Расширяет Mock и включает магические методы (например, getitem, setitem и т.д.).
Примеры использования:
Пример создания mock-объекта
from unittest.mock import Mock
# Создание mock-объекта
mock_obj = Mock()
# Настройка возвращаемого значения для метода
mock_obj.some_method.return_value = 42
# Вызов метода
result = mock_obj.some_method()
print(result) # Вывод: 42
# Проверка вызова метода
mock_obj.some_method.assert_called_once()
Пример использования patch
from unittest.mock import patch
# Предположим, у нас есть функция, которая делает HTTP-запрос
def fetch_data():
import requests
response = requests.get("https://api.example.com/data")
return response.json()
# Тестируем функцию с использованием patch
@patch('requests.get')
def test_fetch_data(mock_get):
# Настройка mock-объекта
mock_response = Mock()
mock_response.json.return_value = {"key": "value"}
mock_get.return_value = mock_response
# Вызов тестируемой функции
result = fetch_data()
assert result == {"key": "value"}
# Проверка вызова mock-объекта
mock_get.assert_called_once_with("https://api.example.com/data")
# Запуск теста
test_fetch_data()
Пример использования MagicMock
from unittest.mock import MagicMock
# Создание MagicMock-объекта
mock_obj = MagicMock()
# Настройка возвращаемого значения для магического методаен.
3. `Magicmock_obj.__getitem__.return_value = "value"
# Вызов магического метода
result = mock_obj["key"]
print(result) # Вывод: value
# Проверка вызова магического метода
mock_obj.__getitem__.assert_called_once_with("key")
Преимущества:
1️⃣ Изоляция тестов: Позволяет тестировать компоненты в изоляции от их зависимостей.
2️⃣ Повышение надежности тестов: Тесты становятся менее зависимыми от внешних факторов, таких как сетевые соединения или состояние базы данных.
3️⃣ Гибкость: Mock-объекты можно легко настраивать для разных сценариев тестирования.
4️⃣ Отслеживание поведения: Можно отслеживать, как и с какими параметрами были вызваны методы и атрибуты.
Mock-объекты являются мощным инструментом для создания изолированных и надежных тестов в Python. Библиотека unittest.mock предоставляет все необходимые средства для создания и управления mock-объектами, позволяя эффективно тестировать код, избегая зависимости от внешних ресурсов и улучшая качество тестирования.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхunittest, pytest.
2️⃣ Интеграционное тестирование (Integration Testing)
➕ Цель: Проверка взаимодействия между несколькими модулями или компонентами.
➕ Характеристики: Проверяет, работают ли компоненты корректно вместе.
➕ Инструменты: pytest, nose2, unittest.
3️⃣ Функциональное тестирование (Functional Testing)
➕ Цель: Проверка функциональности приложения в соответствии с требованиями.
➕ Характеристики:
Ориентируется на результат выполнения функциональных задач.
➕ Инструменты: pytest, unittest, Selenium для веб-приложений.
4️⃣ Системное тестирование (System Testing)
➕ Цель: Проверка всей системы целиком для обеспечения соответствия требованиям.
➕ Характеристики: Тестирование всех компонентов приложения как единого целого.
➕ Инструменты: Manual testing, Selenium, pytest.
5️⃣ Приемочное тестирование (Acceptance Testing)
➕ Цель: Проверка системы на соответствие требованиям пользователя и готовность к эксплуатации.
➕ Характеристики: Оценивается заказчиком или конечным пользователем.
➕ Инструменты: Behave, Cucumber, Manual testing.
Примеры использования инструментов:
Юнит-тестирование с pytest
# math_operations.py
def add(a, b):
return a + b
# test_math_operations.py
import pytest
from math_operations import add
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(-1, -1) == -2
if __name__ == '__main__':
pytest.main()
Интеграционное тестирование с pytest
# database_operations.py
def connect_to_db():
return "Connected to DB"
def get_data_from_db():
return {"data": "Sample data"}
# test_integration.py
import pytest
from database_operations import connect_to_db, get_data_from_db
def test_db_integration():
assert connect_to_db() == "Connected to DB"
data = get_data_from_db()
assert "data" in data
assert data["data"] == "Sample data"
ifittest, py== '__main__':
pytest.main()
Функциональное тестирование с Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
def test_google_search():
driver = webdriver.Chrome()
driver.get("https://www.google.com")
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("pytest")
search_box.send_keys(Keys.RETURN)
assert "pytest" in driver.title
driver.quit()
ifты: unitte== '__main__':
test_google_search()
Каждый вид тестирования играет важную роль в процессе обеспечения качества программного обеспечения. Выбор подходящего типа тестирования зависит от конкретных задач и этапа разработки, на котором находится проект. Использование различных инструментов и методов тестирования помогает выявлять ошибки, улучшать производительность и обеспечивать соответствие приложения требованиям пользователей.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых class Service:
def do_something(self):
return "Service is doing something."
class Client:
def __init__(self, service):
self.service = service
def perform_action(self):
return self.service.do_something()
# Внедрение зависимости через конструктор
service = Service()
client = Client(service)
print(client.perform_action()) # Выведет: Service is doing something.
2️⃣Внедрение через сеттер (Setter Injection):
Зависимости передаются через методы установки (сеттеры).
class Client:
def set_service(self, service):
self.service = service
def perform_action(self):
return self.service.do_something()
# Внедрение зависимости через сеттер
service = Service()
client = Client()
client.set_service(service)
print(client.perform_action()) # Выведет: Service is doing something.
3️⃣Внедрение через интерфейс (Interface Injection):
В этом подходе используется интерфейс для предоставления зависимостей. Это менее распространенный метод в Python, так как язык не имеет явной поддержки интерфейсов как, например, Java.
Преимущества
1️⃣Уменьшение жесткой связи: Классы меньше зависят друг от друга, что упрощает их изменение и замену.
2️⃣Повышение модульности: Каждый компонент может быть разработан и протестирован отдельно.
3️⃣Легкость тестирования: Зависимости могут быть легко заменены на заглушки или mock-объекты во время тестирования, что делает тестирование проще и надежнее.
4️⃣Улучшенная читаемость и поддерживаемость: Четко видно, какие зависимости нужны классу, что делает код более понятным.
Недостатки
1️⃣Сложность настройки: Может потребоваться больше начальных настроек для передачи всех зависимостей.
2️⃣Понимание паттерна: Требуется понимание концепции DI для правильного использования, что может быть сложным для начинающих разработчиков.
Рассмотрим пример с веб-приложением, где у нас есть контроллер, который зависит от сервиса для обработки бизнес-логики:
class OrderService:
def process_order(self, order_id):
return f"Processing order {order_id}"
class OrderController:
def __init__(self, order_service):
self.order_service = order_service
def handle_request(self, order_id):
return self.order_service.process_order(order_id)
# Внедрение зависимости через конструктор
order_service = OrderService()
order_controller = OrderController(order_service)
print(order_controller.handle_request(123)) # Выведет: Processing order 123
Dependency Injection — это паттерн проектирования, который позволяет передавать зависимости классу извне, а не создавать их внутри класса. Это улучшает модульность, тестируемость и гибкость кода, уменьшая жесткую связь между компонентами системы.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых