Один из самых популярных фреймворков для тестирования на Python, которым пользуются при автоматическом тестировании. Это open-source решение — ПО с открытым исходным кодом. Оно развивается за счет комьюнити и поддерживает практически все необходимые тестировщику функции: модульное и функциональное тестирование, а также тестирование API.
Рассмотрим код на Python, который будет проверять функцию на корректность выдаваемого результата.
def my_function(x,y):
def test_my_function():
PyTest — практически универсальный фреймворк, который подходит для тестирования большинства приложений и сайтов. Однако есть случаи, когда применять его не стоит:
1. Используются альтернативные решения: уже существует код для тестирования, написанный с помощью других фреймворков — тогда его придётся адаптировать, переписывать или даже создавать с нуля.
2. Команде не хватает компетенций: на проекте отсутствует специалист для конфигурирования, настройки и последующей поддержки, а у тестировщиков недостаточно для этого опыта.
3. Нужно тестировать что-то, для чего PyTest не предназначен.
PyTest позволяет писать даже сложные тесты с минимальными усилиями и поддерживает разные методологии тестирования. Поэтому он отлично подходит для большинства задач и пользуется большой популярностью в автоматическом тестировании.
На курсе «Тестирование веб-приложений на Python» студенты учатся работать именно с фреймворком PyTest, потому что он больше всего подходит для новичков.
import unittest
# Определяем функцию add, которую будем тестировать
def add(x, y):
return x + y
# Создаём дочерний класс TestAddition, который наследует от unittest.TestCase
class TestAddition(unittest.TestCase):
# Методы тестирования определяются с префиксом "test_"
# В данном тесте мы проверяем, что функция add корректно складывает два числа
def test_addition(self):
self.assertEqual(add(2, 3), 5)
if _name_ == '_main_':
unittest.main()
Можно увидеть, что код проверки с фреймворком Unittest гораздо длиннее, чем с PyTest.
Но если нужен более простой, понятный и лаконичный инструмент, лучше выбрать другой фреймворк. Особенно для новичков, которые пока не знакомы с языком Python и изучают его только, чтобы писать автоматические тесты.
Этот фреймворк тоже достаточно популярен для тестирования с помощью Python и при этом сильно отличается от остальных. Для написания тестов используется специальный формат — Gherkin. Этот формат позволяет создавать тесты на английском языке, которые затем преобразуются в автоматические тесты уже на языке Python. Такой подход называется Behaviour Driven Development.
Чтобы обеспечить автоматическое преобразование, в фреймворке Behave есть следующие компоненты:
1. Feature-файлы — описывают тесты на английском языке по специальным правилам. Их может писать специалист или инженер, знакомый с форматом Gherkin.
2. Step Definitions — функции на Python, в которых описано, как выполнять шаги из Feature-файлов. Их могут реализовывать или разрабатывать тестировщики, знакомые с Python.
Feature: Login
In order to access my account
As a registered user
I want to be able to login
Scenario: Successful login with correct credentials
Given I am on the login page
When I enter my username and password
And click the login button
Then I should be redirected to the homepage
Step Definitions для этого Feature-файла:
from behave import given, when, then
@given('I am on the login page')
def step_impl(context):
context.browser.get('http://localhost:8000/login/')
@when('I enter my username and password')
def step_impl(context):
context.browser.find_element_by_id('id_username').send_keys ('myusername')
context.browser.find_element_by_id('id_password').send_keys
('mypassword')
@when('click the login button')
def step_impl(context):
context.browser.find_element_by_id('login_button').click()
@then('I should be redirected to the homepage')
def step_impl(context):
assert context.browser.current_url == 'http://localhost:8000/home/'
Этот фреймворк для тестирования на Python очень полезен, так как позволяет быстро описывать и реализовывать тесты, понятные заказчикам и бизнес-аналитикам. Кроме того, он обеспечивает максимальное покрытие: можно писать тесты сразу на уровне системы, интерфейса и функциональности.
Если в компании уже используют подход BDD и язык Gherkin, разумно будет дополнить стек именно фреймворком Behave.
Но если проект на стадии развития или это MVP (minimum valuable product — минимально жизнеспособный продукт), Behave только усложнит ситуацию и не раскроется в полной мере. Кроме того, он не подойдёт для проектов, которым требуются сложные тесты, — для них он недостаточно гибкий.
Николай Федосеев
Тестирование — это способ определить, насколько правильно и корректно работает приложение. Если говорить о разработке ПО, то это ещё и метод описания функциональности — как именно должна работать программа, какие есть граничные кейсы, какие условия и данные приведут к неверному поведению. Можно посмотреть только тесты — и понять, как работает программа.
Чем больше покрытие проекта тестами и чем более актуальны и разнообразны тестовые кейсы, тем быстрее решаются бизнес-задачи без опасений за невалидное или нерабочее приложение.
Читать также: