PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Pytest-order.

✅Плагин pytest-order для pytest позволяет настраивать порядок выполнения тестов. Он использует маркер order, который определяет, когда именно должен запускаться тест — либо с помощью порядкового номера, либо задавая отношение к другим тестам.

❗️Плагин поддерживает Python 3.7 - 3.12 и pytest версий >= 5.0.0 (для Python 3.9 и ниже) и pytest >= 6.2.4 (для Python 3.10 и выше). Работает на Linux, macOS и Windows.

📌Основные функции:

📍Упорядочивание тестов по индексу.

📍Упорядочивание с начала и с конца (через отрицательный индекс).

📍Упорядочивание относительно других тестов (через атрибуты маркера before и after).

📍Упорядочивание сессий, модулей и классов через опцию order-scope.

📍Упорядочивание на уровне директорий через опцию order-scope-level.

📍Иерархическое упорядочивание модулей и классов через опцию order-group-scope.

📍Упорядочивание тестов с использованием маркеров pytest-dependency (опция order-dependencies).

📍Разреженное упорядочивание тестов через опцию sparse-ordering.

📍Использование кастомных маркеров для упорядочивания с помощью опции order-marker-prefix.

#pytest #python #unittest #testing #devtools #pytest_order #automation #qa #ordering #order

📱Ссылка на репозиторий:
https://github.com/pytest-dev/pytest-order
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42⚡1
📱IntentGuard.

IntentGuard — это библиотека Python для проверки свойств кода с помощью утверждений на естественном языке. Она интегрируется с pytest и unittest, позволяя формулировать сложные ожидания к коду без лишнего шаблонного кода.

❓Зачем использовать IntentGuard?

🔘Проверка сложных свойств кода без громоздких тестов.

🔘Минимизация шаблонного кода.

🔘Улучшенная читаемость тестов.

🔹Ключевые возможности:

🔘Естественные утверждения – пишите проверки на обычном английском.

🔘Интеграция с pytest и unittest.

🔘Детерминированные результаты – механизм голосования и контролируемого сэмплирования.

🔘Гибкая верификация – подходит для сложных свойств.

🔘Подробные объяснения ошибок – понятные отчёты при сбоях тестов.

🔘Эффективное кэширование – ускоряет выполнение тестов.

#Python #Testing #IntentGuard #pytest #unittest #AI #NaturalLanguage

📱Ссылка на репозиторий:
https://github.com/kdunee/intentguard
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥3👍1
📱Pexpect.

Pexpect — это Python-библиотека, которая позволяет управлять внешними программами, как будто вы сами с ними взаимодействуете через терминал.

🔹Что умеет:

🔘Автоматизация ssh, ftp, telnet, passwd и других интерактивных CLI-программ.

🔘Тестирование софта, скрипты установки, деплой.

🔘Ждёт нужные шаблоны в выводе программ и реагирует на них.

🔘Работает как классический Expect, но написан полностью на Python.

🔘Поддержка Unix-систем (через pty), частичная поддержка Windows.

✅Отличный инструмент для автоматизации того, что раньше делалось руками в терминале.

#Pexpect #Python #Automation #CLI #DevOps #SSH #Expect #OpenSource #Scripting #Terminal #Testing #Unix #PythonTools

📱Ссылка на репозиторий:
https://github.com/pexpect/pexpect
Please open Telegram to view this post
VIEW IN TELEGRAM
14⚡3🔥3
📱Tryke.

Tryke - это современный фреймворк для тестирования в Python, который делает написание тестов более структурированным и интуитивно понятным.

Если в Python вам всегда не хватало красивого BDD-стиля (как в Jest или RSpec) с их вложенными блоками describe, то Tryke создан именно для вас!

🔹Главные фишки:

🔘Иерархия тестов: Логически группируйте сценарии с помощью контекстных менеджеров with t.describe("имя_группы"):.

🔘Умные фикстуры: Удобное внедрение зависимостей через аннотации типов (Annotated[..., t.Depends(...)]). Поддерживается кеширование на уровне модуля или отдельного блока describe (per="scope").

🔘Читаемые проверки (Assertions): Синтаксис t.expect(actual, "описание").to_equal(expected) делает отчеты об ошибках в консоли максимально понятными.

🔘Асинхронность из коробки: Нативная поддержка тестов через async def.

🔘Продвинутый CLI-раннер: Встроенный режим постоянной работы (tryke test --watch) для запуска тестов на лету при сохранении кода, а также запуск только для измененных файлов (--changed).

💡Переходите с pytest?

Авторы подготовили не только классическую шпаргалку по миграции, но и специальный готовый LLM-промпт. Вы можете просто скормить его своему ИИ-ассистенту (Cursor, Copilot и т.д.), и он поэтапно, с проверками перепишет ваши тесты с pytest на Tryke.

🚀Как запустить:

Если у вас есть uv, достаточно выполнить:
uvx tryke test

Пример синтаксиса:
import tryke as t

with t.describe("users"):
@t.test("stores a new user")
async def test_set(users: ...):
users["bob"] = "bob@example.com"
t.expect(users["bob"], "stores email").to_equal("bob@example.com")


#Python #Testing #Tryke #QA #DevTools #Backend #Pytest #OpenSource #Programming

📱Ссылка на репозиторий:
https://github.com/thejchap/tryke
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥33👍1
📱Postman2pytest.

Postman2pytest. — это
инструмент, который позволяет конвертировать JSON-файлы из Postman (коллекции v2.1) в готовые для запуска тесты pytest. И всё это одной командой!

Часто коллекции Postman служат отличной документацией для вашего API. Утилита postman2pytest превращает эту "документацию" в исполняемые регрессионные тесты на Python, которые легко встраиваются в CI/CD. Больше не нужно переписывать тесты вручную — вы избавляетесь от рутины и рассинхрона между доками и кодом.

🔹Главные фичи:

🔘Поддерживает GET, POST, PUT, DELETE, PATCH, HEAD и OPTIONS.

🔘Распознает заголовки (включая отключенные) и JSON-тела запросов (raw JSON body).

🔘Умеет вытаскивать ожидаемый HTTP-статус из скриптов Postman вида pm.response.to.have.status(200).

🔘Разворачивает вложенные папки Postman в плоский список тестов с понятными названиями (например, def test_users_post_create_user()).

🔘Позволяет сгенерировать тесты только для одной конкретной папки из коллекции (--filter-folder).

🔘Переменные вроде {{base_url}} автоматически преобразуются в f-строки и подхватываются через переменные окружения (например, BASE_URL).

🔧Установка:

pip install postman2pytest

🔻Как использовать:
postman2pytest \
--collection data/my_api.postman_collection.json \
--out generated_tests/test_api.py

# Запуск сгенерированных тестов
BASE_URL=https://staging.example.com pytest generated_tests/test_api.py -v


⚠️Ограничения: В текущей версии инструмент не переносит сложные тестовые скрипты (кроме проверки статуса), не поддерживает данные form-data и не читает Pre-request скрипты (например, автоматическое получение токенов OAuth придется завернуть в фикстуру pytest руками). Развитие проекта продолжается, и многие из этих пунктов уже в Roadmap.

#Python #Testing #QA #Postman #Pytest #API #DevTools #Backend #Automation

📱Ссылка на репозиторий:
https://github.com/golikovichev/postman2pytest
Please open Telegram to view this post
VIEW IN TELEGRAM
1⚡2👍2🔥2
📱Spoof.

Spoof —
это минималистичный и гибкий HTTP-сервер для Python, разработанный специально для изоляции и тестирования сетевого взаимодействия без боли.

Если вам когда-нибудь требовалось переписать клиентскую библиотеку, проверить её поведение в боевых условиях или полноценно замокать сторонний API на реальных сетевых сокетах (а не просто подменить методы в коде), Spoof станет идеальным решением.

🔹Главные фичи инструмента:

🔘Батарейки в комплекте: Написан на базе стандартного модуля http.server, не имеет внешних зависимостей и работает на Python 3.10–3.14.

🔘Динамическая очередь ответов: В отличие от классических серверов, где роуты прописываются заранее, Spoof принимает любые запросы. Он выдает ответы из настроенной FIFO-очереди (.responses) или возвращает .defaultResponse. По умолчанию, если очередь пуста, он честно отдаст 503 Service Unavailable.

🔘Живой лог запросов: Каждый чих со стороны клиента записывается в историю .requests. После тестов можно легко проверить, какие методы, заголовки, query-параметры или JSON-тела прилетали на сервер.

🔘Постквантовая криптография: Из коробки поддерживает SSL/TLS с самоподписанными сертификатами, а если в системе установлен OpenSSL 3.5+, вы можете тестировать соединения с использованием постквантовых алгоритмов (PQC)!

🔘Проксирование и IPv6: Поддерживает прокси-туннелирование через обработку CONNECT-запросов, а также умеет слушать исключительно IPv6-сокеты через класс spoof.http6.

🔘Интерактивный дебаг: Вы можете передать в качестве ответа функцию-колбэк с обычным breakpoint(). При отправке запроса выполнение встанет на паузу, и вы сможете изучить объект request прямо в консоли через Pdb.

❓Как это выглядит в тестах:

import requests
import spoof

# Поднимаем сервер в контекстном менеджере
with spoof.http() as http:
# Задаем цепочку ответов
http.responses.extend([
[200, [("Content-Type", "application/json")], b'{"id": 1111}'],
[200, [("Content-Type", "application/json")], b'{"id": 2222}'],
])
http.defaultResponse = [404, [], "Not found"]

# Проверяем поведение клиента
assert requests.get(http.url + "/users").json() == {"id": 1111}
assert requests.get(http.url + "/posts").json() == {"id": 2222}
assert requests.get(http.url + "/unknown").status_code == 404

# Проверяем историю логов сервера
assert [r.path for r in http.requests] == ["/users", "/posts", "/unknown"]


🔧Установка:

pip install spoof


#Python #Testing #QA #Backend #Mock #HTTPServer #DevTools #OpenSource #WebDevelopment

📱Ссылка на репозиторий:
https://github.com/lexsca/spoof
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥4👍3⚡2
📱Tia.

Tia -
это инструмент анализа влияния тестов (Test Impact Analysis) для pytest, который позволяет запускать только те тесты, на которые действительно повлияли ваши изменения в коде.

Зачем тратить драгоценное время CI-пайплайнов на прогон сотен тестов, которые физически не могли сломаться от вашей правки?

Tia
один раз собирает карту покрытия, а затем с помощью git diff вычисляет и запускает строго минимальный набор тестов. Эту же концепцию оптимизации используют внутри себя такие гиганты, как Google и Meta.

🔹Честность и точность на реальных данных:

Главный грех подобных утилит — случайно пропустить тест, который на самом деле должен был упасть. Разработчики tia подошли к вопросу жестко:

🔘Никаких красивых сказок: На связанных и плотных проектах (как Flask) утилита безопасно пропускает около 21% тестов. А вот на хорошо модулированных библиотеках (как boltons) реальный показатель пропуска достигает 96%!

🔘Умный фильтр «косметики»: Если коммит содержит только правку опечаток в комментариях, форматирование через black или добавление докстрингов, tia поймет через сравнение AST-деревьев, что рантайм-код не изменился, и пропустит 99%+ тестов.

🔘Игнорирование «мертвых» тайп-хинтов: Правки внутри блоков if TYPE_CHECKING: не запускают тесты зря. Но если вы измените тип поля в Pydantic или dataclass (что влияет на логику работы), утилита это честно отловит.

🛠Как это работает?

🔘tia record — запускает полную кодовую базу и строит карту на уровне конкретных методов и функций {тест -> {файл -> функции}}, сохраняя её в .tia/map.json. Благодаря системным аудит-хукам утилита запоминает даже не-Python файлы (фикстуры, шаблоны, конфиги), которые читал тест.

🔘tia run — анализирует текущий git diff, сопоставляет измененные строки с функциями и на основе 4 правил (попадание в функцию, изменение модуля, дата-зависимость и появление нового теста) отправляет в pytest только целевой набор.

🔻Готовность к CI и Облаку:

Карту тестов, собранную на базовой ветке, можно легко передавать в задачи пул-реквестов. tia поддерживает работу с удаленными хранилищами из коробки:

🔘Собственный легковесный HTTP-сервер (tia serve) без внешних зависимостей.

🔘Ленивая загрузка SDK для нативных облачных бакетов AWS S3 (s3://) и Google Cloud Storage (gs://).

🔘Автоматическая генерация красивых Markdown-отчетов для GitHub Actions ($GITHUB_STEP_SUMMARY) с детальной таблицей: что изменилось и почему были выбраны именно эти тесты.

🚀Быстрый старт:

pip install -e .

tia record # Строим карту (запуск из корня репозитория)
tia run # Запускаем только затронутые тесты
tia run --since main # Сравниваем изменения относительно ветки main


#Python #Pytest #Testing #QA #Automation #CI #CD #DevOps #Optimization #OpenSource

📱Ссылка на репозиторий:
https://github.com/breadMSA/pytest-tia
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥22👍1
📱Pytest-leak-finder.

Pytest-leak-finder
- это плагин для pytest, который помогает быстро найти конкретный тест, загрязняющий общее состояние и ломающий последующие тесты в сьюте.

Знакома ситуация, когда тест стабильно падает при общем прогоне набора, но проходит без единой ошибки при изолированном запуске (pytest -v --lf)? Причина почти всегда в том, что один из предыдущих тестов оставил за собой «мусор» (неочищенный стейт, глобальную переменную или незакрытый ресурс). Но как найти виновника, если тестов сотни?

❓Как это работает.

Плагин автоматизирует поиск с помощью бинарного поиска (бисекции) — по аналогии с алгоритмом git bisect:

🔘Фиксация цели: При первом запуске с флагом --leak-finder упавший тест автоматически помечается как target.

🔘Деление пополам: На следующем шаге запускается первая половина тестов, предшествовавших цели, плюс сам целевой тест.

🔘Локализация:

✔️Если таргет снова упал — виновник в этой половине, диапазон поиска сужается еще вдвое.

✔️Если таргет прошел успешно — эта половина чистая, и плагин автоматически переключается на вторую часть сьюта.

🔘Результат: Итерации повторяются до тех пор, пока утилита не назовет точный тест, создающий утечку состояния.

🔻Пример использования:

Запуск поиска:

pytest -v --leak-finder demo/test_demo.py


После нескольких быстрых шагов бисекции плагин выдаст точный вердикт:

======================= Leak finder =======================
We found a leak!
Leak found in: tests/test_demo.py::test3


✅Инструмент экономит массу времени при отладке нестабильных (flaky) тестов и распутывании скрытых зависимостей в больших тест-паках.

#Python #Pytest #Testing #QA #Automation #Debugging #DevTools #OpenSource

📱Ссылка на репозиторий:
https://github.com/mgaitan/pytest-leak-finder
Please open Telegram to view this post
VIEW IN TELEGRAM
1⚡2🔥21
📱Pyrig.

Pyrig
- это пакет и CLI-инструмент, который стандартизирует и автоматизирует создание, настройку, разработку и поддержку Python-проектов под ключ.

В отличие от простых генераторов шаблонов (cookiecutter, copier, pyscaffold), pyrig не просто создает структуру папок, но и берет на себя управление конфигурацией, генерацию CLI, тестовую инфраструктуру и настройку CI/CD.

🔹Главные фичи и возможности:

🔘Генерация проекта из коробки: Команда pyrig init разворачивает проект со стандартизированной структурой, полностью настроенными линтерами, форматтерами, тайп-чекерами, фреймворками для тестирования и Git-хуками.

🔘Конфигурация через классы: Все конфигурационные файлы проекта представлены в виде классов. Контент валидируется по схеме, а поведение любой части pyrig можно переопределить через наследование (pyrig mk subcls). Команда pyrig sync синхронизирует и обновляет все конфиги разом.

🔘Автоматический CLI: Сразу создает рабочий интерфейс командной строки для вашего проекта. Добавлять новые команды можно в один клик: pyrig mk cmd <name>.

🔘Зеркальная генерация тестов: pyrig sync автоматически создает заготовки тестов для всех исходных модулей и актуализирует их по мере развития кодовой базы.

🔘CI/CD и защита репозитория: Генерирует пайплайны GitHub Actions для автоматического тестирования и релизов, а также настраивает правила защиты веток и репозитория.

🚀Быстрый старт:

Для работы требуются Python 3.12+, Git и пакетный менеджер uv:

# 1. Создаем проект
uv init my-project --python 3.12
cd my-project

# 2. Добавляем pyrig в dev-зависимости
uv add pyrig --dev

# 3. Инициализируем окружение
uv run pyrig init


После инициализации готовый CLI вашего проекта можно проверить командой my-project --help.

#Python #Pyrig #uv #DevTools #Automation #CICD #Testing #GitHubActions #OpenSource #Scaffolding

📱Ссылка на репозиторий:
https://github.com/Winipedia/pyrig
Please open Telegram to view this post
VIEW IN TELEGRAM
3⚡2🔥21
📱Vcrpy.

Vcrpy
- это библиотека для Python (порт популярного инструмента VCR из экосистемы Ruby), которая упрощает и многократно ускоряет тестирование кода, завязанного на сетевые HTTP-запросы.

Вместо того чтобы вручную мокать каждый эндпоинт сторонних API, VCR.py использует концепцию «кассет» (cassettes): при первом запуске теста библиотека перехватывает реальные HTTP-запросы и сериализует их вместе с ответами в локальный YAML-файл. При последующих прогонах реальные сетевые вызовы больше не происходят — VCR.py мгновенно воспроизводит сохраненные ответы из файла.

🔹Главные преимущества:

🔘Максимальная скорость тестов: Запросы отдаются моментально из локального файла, убирая задержки на сетевой round-trip и ответ сервера.

🔘Работа в офлайне: Тестовый сьют можно без проблем прогонять в самолете, поезде или на изолированных CI/CD раннерах без доступа во внешнюю сеть.

🔘100% детерминированность: Тесты перестают быть нестабильными (flaky) из-за проблем с интернетом, превышения лимитов API (rate limits) или временного падения сторонних сервисов.

🔘Простое обновление: Если логика удаленного API изменилась, не нужно переписывать моки вручную — достаточно удалить файл кассеты, и библиотека автоматически запишет свежие данные при следующем прогоне.

🔻Пример использования:

С использованием контекстного менеджера:
import urllib.request
import vcr

# Запросы внутри блока запишутся в файл cassettes/example.yaml
with vcr.use_cassette('cassettes/example.yaml'):
response = urllib.request.urlopen('http://httpbin.org/get').read()
assert b'origin' in response


В виде декоратора:

import vcr
import requests

@vcr.use_cassette('cassettes/users.yaml')
def test_users_api():
response = requests.get('https://api.example.com/users')
assert response.status_code == 200
assert len(response.json()) > 0


Совет для Pytest: Для максимально удобной работы в связке с pytest существует официальный плагин pytest-recording, позволяющий использовать маркер
@pytest.mark.vcr и флаги --record-mode .


📦Установка:
pip install vcrpy


✅Проект распространяется под открытой лицензией MIT.

#Python #Testing #QA #Pytest #VCR #VCRpy #Mocking #API #DevTools #OpenSource #Backend

📱Ссылка на репозиторий:
https://github.com/kevin1024/vcrpy
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥1
📱DeployProof.

DeployProof
- это инструмент командной строки (CLI) для Python, предназначенный для верификации кода (в том числе сгенерированного ИИ) с помощью молниеносного мутационного тестирования AST прямо в оперативной памяти.

Нейросети вроде Copilot или ChatGPT легко генерируют тесты со 100% покрытием строк (line coverage), которые при этом не проверяют реальную логику и граничные условия: мутационный скор у такого сьюта часто близок к нулю. DeployProof решает эту проблему прямо перед коммитом или пушем в CI.

🧬 В чем отличие от Mutmut и Cosmic Ray?

🔘Классические мутационные фреймворки перезаписывают исходные файлы на диске и заново запускают тесты для каждого мутанта на всем проекте, что занимает минуты или часы.

🔘DeployProof компилирует все мутации в единое условное AST-дерево прямо в RAM (без дискового I/O) и анализирует только измененные файлы из текущего git diff. Проверка отрабатывает за пару секунд — буквально пока вы переключаете вкладку.

🔹Ключевые возможности:

🔘In-Memory AST Mutation: Мутирует операторы (>=, ==, and, or), константы, граничные значения строк, меняет аргументы местами и убирает await без перезаписи файлов на диске.

🔘Самоисцеление тестов (Self-Healing Tests): Флаг --heal-tests анализирует выживших мутантов и автоматически синтезирует готовые к запуску pytest-кейсы, закрывающие обнаруженные дыры в логике.

🔘Комплексные шлюзы безопасности (Security Gates):

🔘SAST: Проверка на инъекции, shell=True, небезопасную десериализацию (pickle, yaml.load) и обход путей.

🔘Поиск секретов: Анализ энтропии Шеннона в файлах и последних 50 коммитах Git (поиск API-ключей OpenAI, AWS, GitHub, Stripe).

🔘Защита от галлюцинаций ИИ: Проверяет установленные пакеты через PyPI API на предмет выдуманных нейросетью библиотек (slopsquatting) и сопоставляет с базой уязвимостей OSV (CVE).

🔘100% приватность: Код и результаты тестов не покидают вашу локальную машину (в сеть уходят только read-only запросы к PyPI и OSV).

💻Пример работы:

# Проверка изменений в git diff перед пушем
deployproof check

# Автоматическая генерация тестов под выжившие мутации
deployproof check --heal-tests

# Установка pre-push хука в один клик
deployproof init


📦Установка:

pip install deployproof
# или изолированно через pipx:
pipx install deployproof


#Python #DeployProof #MutationTesting #Testing #QA #Pytest #AICode #DevTools #OpenSource #AppSec #CICD

📱Ссылка на репозиторий:
https://github.com/SVSPraveen/deployproof
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2