Автоматизация — важнейшая часть современной разработки и тестирования программного обеспечения. Это экономит время, уменьшает количество ручных ошибок и обеспечивает согласованность всех процессов. Фреймворк Pytest — один из самых популярных и мощных инструментов для автоматизации задач на Python, особенно при тестировании. Он легкий, простой в использовании и предлагает множество плагинов и встроенных функций для упрощения процесса автоматизации.
В этой статье мы рассмотрим лучшие способы автоматизации задач с помощью фреймворка Pytest. Мы рассмотрим три практических примера, демонстрирующих, как Pytest может эффективно автоматизировать различные типы задач.
Почему Pytest?
Прежде чем углубляться в примеры, давайте обсудим, почему Pytest — отличный выбор для автоматизации задач:
Простота: Pytest имеет простой и лаконичный синтаксис, что позволяет легко писать и читать тестовые примеры.
Расширяемость: благодаря широкому спектру плагинов и хуков Pytest можно расширить для поддержки различных потребностей тестирования.
Фикстуры: Pytest предоставляет фиксаторы, которые являются мощной функцией для настройки предварительных условий или состояний для тестов, повышая возможность повторного использования.
Интеграция: Pytest хорошо интегрируется с другими инструментами, включая платформы CI/CD, обеспечивая сквозную автоматизацию.
Пример 1. Автоматизация тестирования API с помощью Pytest
API являются основой многих приложений, и обеспечение их надежности имеет решающее значение. Pytest вместе с библиотекой запросов упрощает автоматизацию тестирования API.
Шаг 1. Установите необходимые библиотеки
Сначала убедитесь, что у вас установлен Pytest и библиотека запросов:
запросы pytest на установку pip
Шаг 2. Напишите тестовый сценарий
Давайте автоматизируем простой запрос GET к общедоступному API, например JSONPlaceholder, поддельному онлайн-API REST для тестирования.
`запросы на импорт
импортировать pytest
BASE_URL = "https://jsonplaceholder.typicode.com"
@pytest.fixture
защита api_client():
# Это приспособление предоставляет объект сеанса для выполнения запросов API
сеанс = запросы.Сессия()
сессия доходности
сеанс.закрыть()
def test_get_posts(api_client):
# Отправьте запрос GET для получения сообщений
ответ = api_client.get(f"{BASE_URL}/posts")
# Утверждения
утверждать ответ.status_code == 200
Assert len(response.json()) > 0, «Сообщения не найдены»`
Объяснение:
Fixture (api_client): этот фиксатор устанавливает многоразовый сеанс для выполнения HTTP-запросов, гарантируя, что нам не нужно каждый раз создавать новый сеанс.
Тестовая функция (test_get_posts): эта функция отправляет запрос GET в конечную точку /posts и проверяет, что:
Код состояния — 200, что указывает на успех.
В ответе содержится хотя бы одно сообщение.
Шаг 3. Запустите тест
Чтобы выполнить тест, выполните следующую команду:
баш
Скопировать код
pytest -v test_api.py
Почему это работает
Тест является кратким и допускает многократное использование, в нем используются средства Pytest для настройки и демонтажа.
Вывод Pytest показывает, какие тесты пройдены или не пройдены, что позволяет легко отслеживать надежность API с течением времени.
Пример 2. Автоматизация тестирования веб-интерфейса с помощью Pytest и Selenium
Тестирование веб-интерфейса гарантирует, что интерфейс приложения работает должным образом. Pytest можно комбинировать с Selenium для эффективной автоматизации этих задач.
Шаг 1. Установите необходимые библиотеки
Установите Pytest, Selenium и WebDriver Manager:
pip install pytest selenium webdriver-manager
Шаг 2. Напишите тестовый сценарий
Вот как можно автоматизировать простой тест веб-интерфейса, который проверяет функцию поиска в Google:
`импортировать pytest
из веб-драйвера импорта селена
из selenium.webdriver.common.by импортировать Автор
из selenium.webdriver.common.keys импортировать ключи
из webdriver_manager.chrome импортировать ChromeDriverManager
@pytest.fixture
защита браузера():
# Настройте Chrome WebDriver
драйвер = webdriver.Chrome(ChromeDriverManager().install())
драйвер доходности
драйвер.quit()
def test_google_search(браузер):
# Перейдите в Google
браузер.get("https://www.google.com")`{% endraw %}
# Find the search box and enter a query search_box = browser.find_element(By.NAME, "q") search_box.send_keys("Pytest Automation") search_box.send_keys(Keys.RETURN) # Assert that results are shown results = browser.find_elements(By.CSS_SELECTOR, "div.g") assert len(results) > 0, "No search results found"
Объяснение:
Исправление (браузер): это исправление настраивает экземпляр Chrome WebDriver с помощью webdriver-manager и обеспечивает его правильное закрытие после каждого теста.
Тестовая функция (test_google_search): Эта функция:
Открывает домашнюю страницу Google.
Поиск по запросу «Pytest Automation».
Утверждает, что поиск возвращает хотя бы один результат.
Шаг 3. Запустите тест
Выполните тест с помощью:
{% raw %}pytest -v test_ui.py
Почему это работает
Фикстура Pytest управляет экземпляром браузера, делая настройку и демонтаж теста простыми и эффективными.
Используя Selenium, скрипт взаимодействует с веб-страницей как реальный пользователь, гарантируя, что пользовательский интерфейс работает должным образом.
Пример 3. Автоматизация проверки данных с помощью Pytest и Pandas
Проверка данных имеет решающее значение в процессах разработки данных, аналитики и ETL. Pytest может автоматизировать задачи проверки данных с помощью библиотеки pandas.
Шаг 1. Установите необходимые библиотеки
Убедитесь, что Pytest и Pandas установлены:
pip install pytest pandas
Шаг 2. Напишите тестовый сценарий
Давайте автоматизируем задачу, в которой мы проверяем, что набор данных соответствует определенным условиям (например, отсутствие нулевых значений, правильные типы данных и т. д.).
`импортировать pytest
импортировать панд как pd
@pytest.fixture
защита sample_data():
# Создайте образец DataFrame
данные = {
"name": ["Алиса", "Боб", "Чарли", "Дэвид"],
"возраст": [25, 30, 35, 40],
«электронная почта»: [»[email protected]», «[email protected]», нет, «[email protected]»]
}
df = pd.DataFrame(данные)
вернуть df
def test_data_not_null(sample_data):
# Проверяем, есть ли в DataFrame какие-либо нулевые значения
Assert sample_data.isnull().sum().sum() == 0, «Данные содержат нулевые значения»
def test_age_column_type(sample_data):
# Убедитесь, что столбец «возраст» имеет целочисленный тип
Assert sample_data['age'].dtype == 'int64', "Столбец возраста не имеет целочисленного типа"`
Объяснение:
Fixture (sample_data): этот фиксатор устанавливает образец DataFrame, имитируя набор данных, который можно повторно использовать в нескольких тестах.
Тестовая функция (test_data_not_null): этот тест проверяет, есть ли какие-либо нулевые значения в DataFrame, и завершается неудачно, если они найдены.
Тестовая функция (test_age_column_type): этот тест проверяет, что столбец возраста имеет целочисленный тип, обеспечивая согласованность данных.
Шаг 3. Запустите тест
Выполните тест с помощью:
pytest -v test_data.py
Почему это работает
Гибкость Pytest позволяет проводить тесты, ориентированные на данные, гарантируя, что наборы данных соответствуют ожидаемым критериям.
Это приспособление позволяет легко настраивать и изменять тестовые данные без дублирования кода.
Лучшие практики по автоматизации задач с помощью Pytest
Используйте фиксаторы для настройки и демонтажа. Фикстуры помогают эффективно управлять настройкой и демонтажем, делая ваши тесты модульными и пригодными для повторного использования.
Используйте плагины: Pytest имеет множество плагинов (например, pytest-html для отчетов HTML, pytest-xdist для параллельного выполнения) для улучшения ваших усилий по автоматизации.
Тесты параметризации. Используйте @pytest.mark.parameterize для проверки нескольких наборов данных или входных данных, уменьшая дублирование кода.
Интеграция с конвейерами CI/CD. Интегрируйте тесты Pytest с инструментами CI/CD, такими как Jenkins или GitHub Actions, для непрерывного тестирования.
Заключение
Pytest — мощный инструмент для автоматизации множества задач: от тестирования API и веб-интерфейса до проверки данных. Его простота в сочетании с гибкостью и обширной поддержкой плагинов делает его отличным выбором как для разработчиков, так и для инженеров по контролю качества. Используя такие функции Pytest, как фикстуры, параметризация и интеграция с конвейерами CI/CD, вы можете создавать надежные, удобные в обслуживании и масштабируемые среды автоматизации.
Если вы хотите автоматизировать рабочий процесс или улучшить процесс тестирования, Pytest — отличная отправная точка. Приятного тестирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3