📖 Теория: конспект урока 01 (повторение)
⚡ Краткий конспект
- Auto QA — автоматизация повторяющихся тестов: ускорение, точность, CI/CD.
- Тестирование ПО — проверка соответствия реального и ожидаемого поведения.
- Пирамида: Unit (быстрые, изолированные) → Integration → E2E (дорогие).
- Calculator: sum, sub, mul, div (с ArithmeticError на 0), pow, avg.
- pytest: файлы
test_*.py, функцииtest_*, фикстура@pytest.fixture. - Маркировки:
@pytest.mark.skip,skipif,xfail, пользовательские. - Параметризация:
@pytest.mark.parametrize('a,b,res', [(1,2,3), ...]).
Auto QA — что это и зачем
Автоматизированное тестирование (Auto QA) — использование инструментов и скриптов для выполнения тестов с минимальным участием человека.
Применение Auto QA
- Автоматизация повторяющихся тестов для повышения эффективности и точности.
- Снижение времени на тестирование и выявление дефектов.
- Интеграция в процесс CI/CD: тесты запускаются автоматически при каждом коммите.
Пример из практики
Компания хочет ускорить тестирование веб-приложения. QA-инженеры создают автоматизированные тесты с Selenium для проверки основных функций. Тесты интегрируются в CI/CD и выполняются автоматически при каждом коммите. Результат: процесс тестирования ускорен, количество дефектов в продакшне значительно сокращено.
Выгода от автоматизации
| Выгода | Пояснение |
|---|---|
| Скорость | Тесты выполняются в разы быстрее ручных проверок |
| Повторяемость | Одинаковый результат при каждом запуске |
| Масштабируемость | Легко добавить новые тест-кейсы |
| Точность | Исключён человеческий фактор |
| Снижение затрат | Экономия на долгосрочных проектах |
Тестирование программного обеспечения
Тестирование ПО — проверка соответствия между реальным и ожидаемым поведением программы, выполняемая на определённом наборе тестов, который подбирается осмысленно и целенаправленно.
Ключевые аспекты
- Не просто поиск багов — тестирование проверяет, выполняет ли программа свои функции.
- Проверка ожиданий — важно знать, что должна делать программа.
- Процесс — систематическая деятельность, а не разовая акция.
Пирамида тестирования
Пирамида тестирования — концепция, помогающая эффективно распределить усилия на разные уровни тестирования.
| Уровень | Что проверяет | Скорость | Стоимость | Пример |
|---|---|---|---|---|
| Unit Tests | Отдельные модули/функции в изоляции | Быстро | Дёшево | Функция расчёта суммы в корзине |
| Integration Tests | Взаимодействие между компонентами | Медленнее | Дороже | Связь фронтенда и API |
| E2E Tests | Систему целиком (включая UI) | Медленно | Дорого | Сценарий оформления заказа на сайте |
Принципы пирамиды
- Больше unit-тестов, меньше integration, ещё меньше E2E.
- Фокус на автоматизации нижних уровней для ускорения разработки.
- Оптимизация затрат за счёт снижения числа сложных и дорогих тестов верхнего уровня.
Класс Calculator — объект тестирования
В лекции использовался класс Calculator как практический объект для написания тестов.
# calculator.py
class Calculator:
def sum(self, a, b):
return a + b
def sub(self, a, b):
return a - b
def mul(self, a, b):
return a * b
def div(self, a, b):
if b == 0:
raise ArithmeticError("На ноль делить нельзя")
return a / b
def pow(self, a, b=2):
return a ** b
def avg(self, nums):
if len(nums) == 0:
return 0
s = sum(nums)
return self.div(s, len(nums))
pytest — современный фреймворк тестирования
pytest — популярная библиотека для тестирования Python-кода. Проста в использовании, поддерживает автоматический запуск тестов и генерацию отчётов.
Установка и соглашения
pip install pytest
- Файлы: имена начинаются с
test_или заканчиваются на_test. - Функции: имена начинаются с
test_. - Фикстуры: функции с декоратором
@pytest.fixture.
Фикстуры
Фикстуры позволяют задавать общие настройки и ресурсы для тестов (например, экземпляр класса Calculator):
# test_calculator.py
import pytest
from calculator import Calculator
@pytest.fixture
def calculator():
return Calculator()
def test_sum_positive_numbers(calculator):
assert calculator.sum(4, 5) == 9
def test_sum_negative_numbers(calculator):
assert calculator.sum(-6, -10) == -16
Преимущества pytest перед ручным assert
- Простота и лаконичность — тесты легко писать и читать.
- Гибкость фикстур — общие настройки вынесены в одно место.
- Обработка исключений —
pytest.raises()проверяет ожидаемые ошибки. - Подробные отчёты — включают причины провалов.
Маркировки тестов в pytest
Маркировки позволяют управлять выполнением тестов — пропускать, группировать, помечать как ожидаемо провальные.
| Маркер | Назначение |
|---|---|
@pytest.mark.skip | Безусловный пропуск теста |
@pytest.mark.skipif(condition, reason=...) | Условный пропуск |
@pytest.mark.xfail | Тест ожидаемо провалится |
| Пользовательский маркер | Группировка тестов по категории |
Запуск по маркеру
pytest -m positive_test
Выборочный запуск по ключевому слову
pytest -k "sum"
Параметризация тестов
Параметризация — техника, позволяющая запускать один и тот же тест с различными наборами входных данных. Уменьшает дублирование кода.
# test_calculator.py
import pytest
from calculator import Calculator
@pytest.mark.parametrize('num1, num2, result', [
(4, 5, 9),
(-6, -10, -16),
(-6, 6, 0),
(5.61, 4.29, 9.9),
(10, 0, 10)
])
def test_sum(num1, num2, result):
calculator = Calculator()
res = calculator.sum(num1, num2)
assert res == result
Преимущества параметризации
- Один тест вместо нескольких — экономия кода.
- Легко добавлять новые наборы параметров.
- Тесты компактны и читаемы.
pytest -v — вы увидите, как pytest подробно отобразит ошибку по конкретному набору данных.