#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
GitHub
GitHub - pytest-dev/pytest-order: pytest plugin that allows to customize the test execution order
pytest plugin that allows to customize the test execution order - pytest-dev/pytest-order
👍4 2⚡1
IntentGuard — это библиотека Python для проверки свойств кода с помощью утверждений на естественном языке. Она интегрируется с pytest и unittest, позволяя формулировать сложные ожидания к коду без лишнего шаблонного кода.
#Python #Testing #IntentGuard #pytest #unittest #AI #NaturalLanguage
https://github.com/kdunee/intentguard
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - kdunee/intentguard: A Python library for verifying code properties using natural language assertions.
A Python library for verifying code properties using natural language assertions. - kdunee/intentguard
2🔥3👍1
Pexpect — это Python-библиотека, которая позволяет управлять внешними программами, как будто вы сами с ними взаимодействуете через терминал.
#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
GitHub
GitHub - pexpect/pexpect: A Python module for controlling interactive programs in a pseudo-terminal
A Python module for controlling interactive programs in a pseudo-terminal - pexpect/pexpect
1 4⚡3🔥3
Tryke - это современный фреймворк для тестирования в Python, который делает написание тестов более структурированным и интуитивно понятным.
Если в Python вам всегда не хватало красивого BDD-стиля (как в Jest или RSpec) с их вложенными блоками
describe, то Tryke создан именно для вас!with t.describe("имя_группы"):.Annotated[..., t.Depends(...)]). Поддерживается кеширование на уровне модуля или отдельного блока describe (per="scope").t.expect(actual, "описание").to_equal(expected) делает отчеты об ошибках в консоли максимально понятными.async def.tryke test --watch) для запуска тестов на лету при сохранении кода, а также запуск только для измененных файлов (--changed).Авторы подготовили не только классическую шпаргалку по миграции, но и специальный готовый 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
GitHub
GitHub - thejchap/tryke: A Rust-based Python test runner with a Jest-style API
A Rust-based Python test runner with a Jest-style API - thejchap/tryke
1🔥3 3👍1
Postman2pytest. — это инструмент, который позволяет конвертировать JSON-файлы из Postman (коллекции v2.1) в готовые для запуска тесты
pytest. И всё это одной командой!Часто коллекции Postman служат отличной документацией для вашего API. Утилита
postman2pytest превращает эту "документацию" в исполняемые регрессионные тесты на Python, которые легко встраиваются в CI/CD. Больше не нужно переписывать тесты вручную — вы избавляетесь от рутины и рассинхрона между доками и кодом.pm.response.to.have.status(200).def test_users_post_create_user()).--filter-folder).{{base_url}} автоматически преобразуются в f-строки и подхватываются через переменные окружения (например, BASE_URL).pip install postman2pytestpostman2pytest \
--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
GitHub
GitHub - golikovichev/postman2pytest: Convert Postman Collection v2.1 JSON into executable pytest test suites
Convert Postman Collection v2.1 JSON into executable pytest test suites - golikovichev/postman2pytest
1⚡2👍2🔥2
Spoof — это минималистичный и гибкий HTTP-сервер для Python, разработанный специально для изоляции и тестирования сетевого взаимодействия без боли.
Если вам когда-нибудь требовалось переписать клиентскую библиотеку, проверить её поведение в боевых условиях или полноценно замокать сторонний API на реальных сетевых сокетах (а не просто подменить методы в коде), Spoof станет идеальным решением.
http.server, не имеет внешних зависимостей и работает на Python 3.10–3.14..responses) или возвращает .defaultResponse. По умолчанию, если очередь пуста, он честно отдаст 503 Service Unavailable..requests. После тестов можно легко проверить, какие методы, заголовки, query-параметры или JSON-тела прилетали на сервер.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
GitHub
GitHub - lexsca/spoof: A simple HTTP server for test environments
A simple HTTP server for test environments. Contribute to lexsca/spoof development by creating an account on GitHub.
1🔥4👍3⚡2
Tia - это инструмент анализа влияния тестов (Test Impact Analysis) для
pytest, который позволяет запускать только те тесты, на которые действительно повлияли ваши изменения в коде.Зачем тратить драгоценное время CI-пайплайнов на прогон сотен тестов, которые физически не могли сломаться от вашей правки?
Tia один раз собирает карту покрытия, а затем с помощью git diff вычисляет и запускает строго минимальный набор тестов. Эту же концепцию оптимизации используют внутри себя такие гиганты, как Google и Meta.Главный грех подобных утилит — случайно пропустить тест, который на самом деле должен был упасть. Разработчики
tia подошли к вопросу жестко:boltons) реальный показатель пропуска достигает 96%!black или добавление докстрингов, tia поймет через сравнение AST-деревьев, что рантайм-код не изменился, и пропустит 99%+ тестов.if TYPE_CHECKING: не запускают тесты зря. Но если вы измените тип поля в Pydantic или dataclass (что влияет на логику работы), утилита это честно отловит.tia record — запускает полную кодовую базу и строит карту на уровне конкретных методов и функций {тест -> {файл -> функции}}, сохраняя её в .tia/map.json. Благодаря системным аудит-хукам утилита запоминает даже не-Python файлы (фикстуры, шаблоны, конфиги), которые читал тест.tia run — анализирует текущий git diff, сопоставляет измененные строки с функциями и на основе 4 правил (попадание в функцию, изменение модуля, дата-зависимость и появление нового теста) отправляет в pytest только целевой набор.Карту тестов, собранную на базовой ветке, можно легко передавать в задачи пул-реквестов.
tia поддерживает работу с удаленными хранилищами из коробки:tia serve) без внешних зависимостей.s3://) и Google Cloud Storage (gs://).$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
GitHub
GitHub - breadMSA/pytest-tia: Test Impact Analysis for pytest: run only the tests your change actually affects. Method-level, tracks…
Test Impact Analysis for pytest: run only the tests your change actually affects. Method-level, tracks non-.py deps, CI-ready, and honest about its limits. - breadMSA/pytest-tia
1🔥2 2👍1
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
#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
GitHub
GitHub - mgaitan/pytest-leak-finder: Find the test that's leaking before the one that fails
Find the test that's leaking before the one that fails - mgaitan/pytest-leak-finder
1⚡2🔥2 1
Pyrig - это пакет и CLI-инструмент, который стандартизирует и автоматизирует создание, настройку, разработку и поддержку Python-проектов под ключ.
В отличие от простых генераторов шаблонов (cookiecutter, copier, pyscaffold),
pyrig не просто создает структуру папок, но и берет на себя управление конфигурацией, генерацию CLI, тестовую инфраструктуру и настройку CI/CD.pyrig init разворачивает проект со стандартизированной структурой, полностью настроенными линтерами, форматтерами, тайп-чекерами, фреймворками для тестирования и Git-хуками.pyrig можно переопределить через наследование (pyrig mk subcls). Команда pyrig sync синхронизирует и обновляет все конфиги разом.pyrig mk cmd <name>.pyrig sync автоматически создает заготовки тестов для всех исходных модулей и актуализирует их по мере развития кодовой базы.Для работы требуются 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
GitHub
GitHub - Winipedia/pyrig: A tool that standardizes and automates Python project setup, configuration, development, and maintenance.
A tool that standardizes and automates Python project setup, configuration, development, and maintenance. - Winipedia/pyrig
3⚡2🔥2 1
Vcrpy - это библиотека для Python (порт популярного инструмента VCR из экосистемы Ruby), которая упрощает и многократно ускоряет тестирование кода, завязанного на сетевые HTTP-запросы.
Вместо того чтобы вручную мокать каждый эндпоинт сторонних API, VCR.py использует концепцию «кассет» (cassettes): при первом запуске теста библиотека перехватывает реальные HTTP-запросы и сериализует их вместе с ответами в локальный YAML-файл. При последующих прогонах реальные сетевые вызовы больше не происходят — VCR.py мгновенно воспроизводит сохраненные ответы из файла.
С использованием контекстного менеджера:
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
#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
GitHub
GitHub - kevin1024/vcrpy: Automatically mock your HTTP interactions to simplify and speed up testing
Automatically mock your HTTP interactions to simplify and speed up testing - kevin1024/vcrpy
DeployProof - это инструмент командной строки (CLI) для Python, предназначенный для верификации кода (в том числе сгенерированного ИИ) с помощью молниеносного мутационного тестирования AST прямо в оперативной памяти.
Нейросети вроде Copilot или ChatGPT легко генерируют тесты со 100% покрытием строк (line coverage), которые при этом не проверяют реальную логику и граничные условия: мутационный скор у такого сьюта часто близок к нулю. DeployProof решает эту проблему прямо перед коммитом или пушем в CI.
🧬 В чем отличие от Mutmut и Cosmic Ray?
git diff. Проверка отрабатывает за пару секунд — буквально пока вы переключаете вкладку.>=, ==, and, or), константы, граничные значения строк, меняет аргументы местами и убирает await без перезаписи файлов на диске.--heal-tests анализирует выживших мутантов и автоматически синтезирует готовые к запуску pytest-кейсы, закрывающие обнаруженные дыры в логике.shell=True, небезопасную десериализацию (pickle, yaml.load) и обход путей.# Проверка изменений в 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
GitHub
GitHub - SVSPraveen/deployproof: Deterministic pre-push verification for AI-assisted codebases: AST mutation testing, credential…
Deterministic pre-push verification for AI-assisted codebases: AST mutation testing, credential scanning, sandbox-escape detection, mock-usage alerts, and dependency hallucination defense. - SVSPra...