Повысьте производительность Pytest для повышения качества кода и более быстрой обратной связи
26 апреля 2023 г.Интеграция Predictive Test Selection от Launchable с Pytest
В постоянно меняющихся условиях разработки программного обеспечения потребность в масштабируемых и эффективных процессах тестирования как никогда актуальна. По мере роста сложности приложений становится все труднее поддерживать быстрый и надежный рабочий процесс тестирования. Войдите в pytest, популярную среду тестирования для Python, которая упрощает написание и организацию тестов для разработчиков.
Но что, если бы мы могли сделать pytest еще лучше?
Launchable использует машинное обучение, чтобы прогнозировать, какие тесты скорее всего выявит потенциальные дефекты, что значительно сократит время, затрачиваемое на выполнение ненужных тестов. Сочетая простоту и гибкость pytest с мощными возможностями прогнозирования Launchable, вы сможете выйти на новый уровень эффективности и точности тестирования.
Узнайте о преимуществах использования pytest с Predictive Test Selection от Launchable, пройдите процесс настройки и узнайте, как эти инструменты могут работать в гармонии, чтобы коренным образом изменить рабочий процесс тестирования. Приготовьтесь изменить способ тестирования приложений Python!
Понимание основ Pytest (с практическими примерами кода): написание тестов, утверждений, фикстур и плагинов в Pytest
Элегантность и простота Pytest делают написание тестов, утверждений, фикстур и плагинов удобным для разработчиков. Благодаря интуитивно понятному синтаксису и мощным функциям вы можете создавать тесты для все типы тестирования программного обеспечения, которые просты для понимания и обслуживания. Давайте рассмотрим эти концепции более подробно и посмотрим, как их можно использовать в рабочем процессе тестирования.
Тесты и утверждения Pytest
Pytest позволяет писать тестовые функции с использованием стандартных утверждений Python, что делает ваши тесты чистыми и читабельными. Чтобы создать тест, просто определите функцию с именем, начинающимся с test_
, и используйте утверждения, чтобы проверить, соответствует ли ожидаемое поведение. Вот простой пример:
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(-1, 5) == 4
assert add(0, 0) == 0
Фиксаторы Pytest
Фикстуры в pytest – это удобный способ настроить и отключить повторно используемые ресурсы, например подключения к базе данных, временные файлы или тестовые данные. Они помогают поддерживать чистый модульный набор тестов. Чтобы создать фикстуру, используйте декоратор @pytest.fixture, показанный в примере ниже.
import pytest
@pytest.fixture
def sample_data():
return {"name": "John Doe", "age": 30}
def test_sample_data(sample_data):
assert sample_data["name"] == "John Doe"
assert sample_data["age"] == 30
В приведенном выше примере фикстура sample_data
автоматически передается любой тестовой функции, которая запрашивает ее в качестве параметра, обеспечивая согласованность тестовых данных во всем наборе тестов.
Плагины Pytest
Система плагинов Pytest позволяет расширить его функциональность или интегрировать с другими инструментами, что делает его еще более универсальным. Вы можете использовать существующие плагины или создать свои собственные. Чтобы установить существующий плагин, используйте менеджер пакетов pip. Например, выполните в командной строке следующее, чтобы установить подключаемый модуль pytest-cov.
pip установить pytest-cov
Чтобы создать собственный подключаемый модуль, определите новый модуль Python (в примере с именем my_plugin_module
). Оттуда вы зарегистрируете модуль как точку входа в файле setup.py.
# setup.py
from setuptools import setup
setup(
...
entry_points={"pytest11": ["my_plugin = my_plugin_module"]},
...
)
Преимущества и ограничения Pytest
Тестирование – важный аспект разработки программного обеспечения, гарантирующий, что ваш код будет надежным, надежным и не содержит ошибок. Pytest стал популярным среди разработчиков Python благодаря своей простоте, гибкости и мощным функциям. Однако, как и у любого инструмента, у него есть свои ограничения.
Преимущества Pytest
- Простота в использовании – простой синтаксис, простота написания тестов, автоматизация тестов. Pytest предлагает простой и интуитивно понятный синтаксис, позволяющий легко писать тесты даже новичкам. Благодаря встроенной функции обнаружения тестов pytest автоматически обнаруживает и запускает тесты, экономя время и усилия разработчиков.
2. Комплексные функции: параметризованное тестирование, фикстуры, утверждения. Pytest предоставляет набор мощных функций, таких как параметризованное тестирование, фикстуры и расширенные возможности утверждений, которые упрощают написание комплексных и удобных в сопровождении тестов.
3. Расширяемость: плагины, возможность расширения функциональности. Система плагинов Pytest позволяет разработчикам расширять его функциональность или интегрировать его с другими инструментами, повышая его универсальность.
4. Подробная документация: простые для понимания инструкции и примеры: хорошо организованный документация содержит четкие инструкции и примеры, облегчающие разработчикам изучение и освоение фреймворка. Интеграция Launchable с pytest задокументирована с примерами кода — это может быть полезно, когда вы только начинаете. с pytest и Launchable.
5. Кроссплатформенная совместимость. Работает в Windows, Linux и MacOS. Pytest является кроссплатформенным, что означает, что он может работать в различных операционных системах, таких как Windows, Linux и MacOS, что обеспечивает бесперебойную работу. опыт тестирования.
6. Поддержка сообщества: доступ к большому и полезному сообществу пользователей: Pytest может похвастаться большим и поддерживающим сообществом, которое бесценно, когда речь идет об устранении неполадок, обмене знаниями и обновлении. с последними разработками.
Ограничения Pytest
Несмотря на многочисленные преимущества, pytest также имеет некоторые ограничения, которые следует учитывать разработчикам:
- Ограниченная поддержка языков, отличных от Python. Pytest разработан с учетом Python, поэтому он не имеет расширенной поддержки других языков. Это может стать проблемой, если вам нужно протестировать код, написанный на языке, отличном от Python.
2. Сложно отлаживать сложные тесты. Pytest может быть сложно отлаживать при работе со сложными тестами. Это может быть особенно сложно, если тест включает несколько компонентов или требует глубокого понимания тестируемого кода.
3. Не всегда подходит для всех проектов. Хотя pytest отлично подходит для модульного тестирования, он может подходить не для всех проектов. Например, если для вашего проекта требуется интеграционное или сквозное тестирование, pytest может оказаться не лучшим вариантом.
Хорошая новость заключается в том, что вам не нужно часами выполнять сложные наборы интеграционных тестов, если вы используете Predictive Test Selection от Launchable.
Как взаимодействуют Launchable и Pytest
В современной быстро меняющейся среде разработки каждая минута на счету. Длительные тестовые прогоны могут снизить производительность, задержать развертывание, ухудшить опыт разработчиков и увеличить затраты. К счастью, с интеграцией Launchable с pytest вы можете использовать возможности предиктивного выбора тестов, чтобы оптимизировать рабочий процесс тестирования, ускорить тесты и повысить удобство разработки.
Платформа Launchable для тестирования использует машинное обучение для прогнозирования того, какие тесты с наибольшей вероятностью обнаруживают потенциальные дефекты. Благодаря интеграции Launchable с pytest вы можете расставить приоритеты при выполнении наиболее важных тестов, экономя драгоценные машинные часы и быстрее предоставляя обратную связь разработчикам.
Добавление Launchable в pytest позволяет разработчикам и командам DevOps:
- Сокращение времени выполнения теста. Запуская только наиболее релевантные тесты, вы можете значительно сократить время, затрачиваемое на выполнение теста, что позволяет ускорить итерации и развертывание.
2. Оптимизированное использование ресурсов: интеллектуальный выбор тестов Launchable гарантирует, что ваши вычислительные ресурсы используются эффективно, снижая общую стоимость тестирования и освобождая ресурсы для других задач.
3. Повышенная надежность набора тестов. Установив приоритеты для тестов, которые с наибольшей вероятностью выявят дефекты, вы сможете обнаруживать и устранять проблемы на ранних этапах цикла разработки, повышая общее качество и надежность кодовой базы.
Практическое руководство по Pytest и Launchable
Чтобы начать работу с подключаемым модулем Launchable pytest, нужно выполнить четыре простых шага.
✅ Установите запускаемый плагин Pytest
Установите запускаемый плагин pytest: pip3 install pytest-launchable
✅ Установите запускаемый ключ API
Зарегистрируйте учетную запись Launchable (если вы еще этого не сделали) на странице https://app.launchableinc.com/signup/ и создайте свой ключ API. Экспортируйте свой ключ как переменную среды в сценарий CI: export LAUNCHABLE_TOKEN=<your_launchable_api_key>
Сохраните этот ключ в безопасном месте — не оставляйте его в исходном коде на всеобщее обозрение.
✅ Запишите и отправьте тестовые данные в Launchable:
Прежде чем Launchable сможет предсказать, какие тесты нужно запустить, ему нужны исторические данные тестов. Чтобы записывать и отправлять тестовые данные, настройте запускаемую конфигурацию.
Вы можете сгенерировать запускаемую конфигурацию, запустив команду pip: launchable-config --create
, или вы можете скопировать этот пример в новый файл с именем .launchable.d/config.yml. код>:
# Launchable test session configuration file
# See https://docs.launchableinc.com/resources/cli-reference for detailed usage of these options
#
schema-version: 1.0
build-name: commit_hash
record-build:
# Put your git repository location here
source: .
max_days: 30
record-session:
subset:
# mode can be subset, subset-and-rest, or record-only
mode: record-only
# if mode is subset or subset-and-rest, you must specify one of target/confidence/time
# examples:
# target: 30% # Create a variable time-based subset of the given percentage. (0%-100%)
# confidence: 30% # Create a confidence-based subset of the given percentage. (0%-100%)
# time: 30m # Create a fixed time-based subset. Select the best set of tests that run within the given time bound. (e.g. 10m for 10 minutes, 2h30m for 2.5 hours, 1w3d for 7+3=10 days. )
confidence: 99
record-tests:
# The test results are placed here in JUnit XML format
result_dir: launchable-test-result
✅ Включить выбор тестов с прогнозированием:
После того как вы отправите достаточно тестовых данных, вы можете начать использовать выбор тестов Launchable с прогнозированием.
Все, что вам нужно сделать, это обновить файл config.yml
. Измените subset
mode
на subset
, установите цель оптимизации (одну из target
, time code> или
confidence
) и сохраните файл. Это включает подмножество при запуске pytest --launchable
.
Легкий пирожок, лимонный сок!
После этого Launchable выберет наиболее важные и релевантные тесты, оптимизируя рабочий процесс тестирования и быстрее предоставляя обратную связь вашей команде разработчиков.
Подробную документацию см. в разделе pytest (интеграция) | Запускаемые документы .
Заключительные замечания по Pytest и выбору предиктивного теста
Интеграция Launchable в рабочий процесс тестирования pytest может привести к существенной экономии времени и ресурсов, что позволит вам ускорить цикл разработки и более эффективно предоставлять высококачественный код.
Приоритизируя наиболее релевантные тесты, вы не только сэкономите машино-часы, но и позволите своей команде разработчиков быстрее получать отзывы, что приводит к более быстрому разрешению проблем и улучшению общего качества кода.
:::информация Также опубликовано здесь
:::
Оригинал