0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><a>Исследователи из JetBrains</a>подсчитали, что каждый второй программист, работающий на языке Python, использует фреймворк PyTest для автоматизации тестирования. Почему он так популярен? Подробно разбираемся в возможностях решения и его преимуществах для работы QA-специалистов.</p>
1
<p><a>Исследователи из JetBrains</a>подсчитали, что каждый второй программист, работающий на языке Python, использует фреймворк PyTest для автоматизации тестирования. Почему он так популярен? Подробно разбираемся в возможностях решения и его преимуществах для работы QA-специалистов.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Что такое PyTest</a></li>
3
<ul><li><a>Что такое PyTest</a></li>
4
<li><a>Как работает PyTest</a></li>
4
<li><a>Как работает PyTest</a></li>
5
<li><a>Возможности и недостатки PyTest</a></li>
5
<li><a>Возможности и недостатки PyTest</a></li>
6
</ul><h2>Что такое PyTest</h2>
6
</ul><h2>Что такое PyTest</h2>
7
<p>PyTest - фреймворк для быстрого создания автоматических тестов с возможностью масштабирования на языке Python. С помощью этого решения можно не только поддерживать сложное функциональное тестирование приложений и библиотек, но и настраивать параметры запуска тестов, а также разрабатывать окружение для их реализации.</p>
7
<p>PyTest - фреймворк для быстрого создания автоматических тестов с возможностью масштабирования на языке Python. С помощью этого решения можно не только поддерживать сложное функциональное тестирование приложений и библиотек, но и настраивать параметры запуска тестов, а также разрабатывать окружение для их реализации.</p>
8
<h3>Пример PyTest теста</h3>
8
<h3>Пример PyTest теста</h3>
9
<p>Напишем тест для проверки работы функции sum2 (x,y). Она возвращает сумму двух входящих аргументов. В тестовом случае test_sum2() мы будем использовать assert для сравнения результата вызова функции sum2 () с ожидаемым значением. Тест будет считаться пройденным, если результаты совпадут, и непройденным, если будут обнаружены расхождения. В этом случае при использовании команды pytest мы увидим сообщение об ошибке.</p>
9
<p>Напишем тест для проверки работы функции sum2 (x,y). Она возвращает сумму двух входящих аргументов. В тестовом случае test_sum2() мы будем использовать assert для сравнения результата вызова функции sum2 () с ожидаемым значением. Тест будет считаться пройденным, если результаты совпадут, и непройденным, если будут обнаружены расхождения. В этом случае при использовании команды pytest мы увидим сообщение об ошибке.</p>
10
<blockquote><h3>Также полезно:</h3>
10
<blockquote><h3>Также полезно:</h3>
11
<p>Будет ли востребована<a>профессия тестировщика в 2025 году</a>?</p>
11
<p>Будет ли востребована<a>профессия тестировщика в 2025 году</a>?</p>
12
</blockquote><h2>Как работает PyTest</h2>
12
</blockquote><h2>Как работает PyTest</h2>
13
<p>В основу работы PyTest заложен несложный алгоритм: решение использует функции описания тестовых случаев, автоматически выявляет эти функции в коде и выполняет их. Используя PyTest, специалисты могут внедрять в код теста следующие функции и механизмы:</p>
13
<p>В основу работы PyTest заложен несложный алгоритм: решение использует функции описания тестовых случаев, автоматически выявляет эти функции в коде и выполняет их. Используя PyTest, специалисты могут внедрять в код теста следующие функции и механизмы:</p>
14
<ul><li><strong>Assertions</strong>(утверждения). Механизм для оценки корректности выполнения кода в тестовых случаях. С их помощью решение сравнивает полученные результаты выполнения кода с ожидаемыми. При обнаружении несоответствия тест считается непройденным и Pytest генерирует сообщение об ошибке.</li>
14
<ul><li><strong>Assertions</strong>(утверждения). Механизм для оценки корректности выполнения кода в тестовых случаях. С их помощью решение сравнивает полученные результаты выполнения кода с ожидаемыми. При обнаружении несоответствия тест считается непройденным и Pytest генерирует сообщение об ошибке.</li>
15
</ul><p>Пример кода:</p>
15
</ul><p>Пример кода:</p>
16
<ul><li><strong>Parametrization</strong>(настройка параметров). Установка наборов характеристик для проверки разных вариантов использования кода тестов. Еще позволяет исключить дубли.</li>
16
<ul><li><strong>Parametrization</strong>(настройка параметров). Установка наборов характеристик для проверки разных вариантов использования кода тестов. Еще позволяет исключить дубли.</li>
17
</ul><p>Пример кода:</p>
17
</ul><p>Пример кода:</p>
18
<ul><li><strong>Fixtures</strong>(фикстуры). Функции для создания и предварительной настройки тестового окружения. Решение запускает фикстуры перед реализацией каждого тестового случая или их группой, чтобы подготовить данные к тестированию.</li>
18
<ul><li><strong>Fixtures</strong>(фикстуры). Функции для создания и предварительной настройки тестового окружения. Решение запускает фикстуры перед реализацией каждого тестового случая или их группой, чтобы подготовить данные к тестированию.</li>
19
</ul><p>Пример кода:</p>
19
</ul><p>Пример кода:</p>
20
<ul><li><strong>Marking</strong>(маркировки). Механизм сопоставления дополнительных метаданных с тестовыми случаями или их группами для запуска или пропуска тестов согласно заданным условиям либо для настройки дополнительных действий до или после выполнения тестов.</li>
20
<ul><li><strong>Marking</strong>(маркировки). Механизм сопоставления дополнительных метаданных с тестовыми случаями или их группами для запуска или пропуска тестов согласно заданным условиям либо для настройки дополнительных действий до или после выполнения тестов.</li>
21
</ul><p>Пример кода с использованием метки smoke для быстрого проведения основных тестов и regression для проверки стабильности и воспроизводимости отдельных функций приложения:</p>
21
</ul><p>Пример кода с использованием метки smoke для быстрого проведения основных тестов и regression для проверки стабильности и воспроизводимости отдельных функций приложения:</p>
22
<ul><li><strong>Test sessions</strong>(тестовые сеансы). Запуск тестов в разных режимах. Например:<ul><li>test discovery - для обнаружения недостатков кода;</li>
22
<ul><li><strong>Test sessions</strong>(тестовые сеансы). Запуск тестов в разных режимах. Например:<ul><li>test discovery - для обнаружения недостатков кода;</li>
23
<li>failing tests replay - для воспроизведения отказов;</li>
23
<li>failing tests replay - для воспроизведения отказов;</li>
24
<li>coverage reporting - режим с генерацией отчетов о покрытии.</li>
24
<li>coverage reporting - режим с генерацией отчетов о покрытии.</li>
25
</ul></li>
25
</ul></li>
26
</ul><p>Этот механизм дает возможность подстроить тестирование под требования любого проекта.</p>
26
</ul><p>Этот механизм дает возможность подстроить тестирование под требования любого проекта.</p>
27
<p>Пример кода для проверки корректности операций сложения и вычитания:</p>
27
<p>Пример кода для проверки корректности операций сложения и вычитания:</p>
28
<p>Для запуска тестовых сеансов и реализации всех тестов из этого каталога достаточно указать pytest в командной строке.</p>
28
<p>Для запуска тестовых сеансов и реализации всех тестов из этого каталога достаточно указать pytest в командной строке.</p>
29
<blockquote><h3>Читайте также:</h3>
29
<blockquote><h3>Читайте также:</h3>
30
<p><a>Какие бывают этапы и виды тестирования</a>: подробный разбор</p>
30
<p><a>Какие бывают этапы и виды тестирования</a>: подробный разбор</p>
31
</blockquote><h2>Возможности и недостатки PyTest</h2>
31
</blockquote><h2>Возможности и недостатки PyTest</h2>
32
<p>Разработчики и QA специалисты выбирают PyTest благодаря следующим преимуществам:</p>
32
<p>Разработчики и QA специалисты выбирают PyTest благодаря следующим преимуществам:</p>
33
<ul><li>Возможность получить детальную информацию о проваленных тестах. Решение использует универсальный оператор.</li>
33
<ul><li>Возможность получить детальную информацию о проваленных тестах. Решение использует универсальный оператор.</li>
34
<li>Отсутствие сложных конструкций в синтаксисе кода - он может состоять всего из двух строк.</li>
34
<li>Отсутствие сложных конструкций в синтаксисе кода - он может состоять всего из двух строк.</li>
35
<li>Автоматическое обнаружение тестовых функций и модулей. Стандартно Pytest определяет файлы, в которых используются методы и функции с префиксом test вне классов и внутри классов с префиксом Test.</li>
35
<li>Автоматическое обнаружение тестовых функций и модулей. Стандартно Pytest определяет файлы, в которых используются методы и функции с префиксом test вне классов и внутри классов с префиксом Test.</li>
36
<li>Автоматическое генерирование отчетов об ошибках в тестах.</li>
36
<li>Автоматическое генерирование отчетов об ошибках в тестах.</li>
37
<li>Использование фикстур для работы с параметризованными и несложными тестами и создания контекста для групп тестов.</li>
37
<li>Использование фикстур для работы с параметризованными и несложными тестами и создания контекста для групп тестов.</li>
38
<li>Совместимость с Unittest.</li>
38
<li>Совместимость с Unittest.</li>
39
<li>Возможность с помощью меток настраивать условия, входные данные и другие элементы поведения тестов.</li>
39
<li>Возможность с помощью меток настраивать условия, входные данные и другие элементы поведения тестов.</li>
40
<li>Более 1500 регулярно обновляемых<a>внешних плагинов</a>и наборов разнообразных дополнительных функций.</li>
40
<li>Более 1500 регулярно обновляемых<a>внешних плагинов</a>и наборов разнообразных дополнительных функций.</li>
41
<li>Активно развивающееся сообщество профессионалов.</li>
41
<li>Активно развивающееся сообщество профессионалов.</li>
42
</ul><p>Но отмечают, что у PyTest присутствуют и некоторые недостатки:</p>
42
</ul><p>Но отмечают, что у PyTest присутствуют и некоторые недостатки:</p>
43
<ul><li>Необходимость тщательно изучать документацию, чтобы понять логику и алгоритмы работы лаконичного кода решения.</li>
43
<ul><li>Необходимость тщательно изучать документацию, чтобы понять логику и алгоритмы работы лаконичного кода решения.</li>
44
<li>Необходимость устанавливать фреймворк отдельно, так как он не входит в стандартную библиотеку Python. Для этого у вас должен быть установлен Python 3.8 + или PyPy 3.</li>
44
<li>Необходимость устанавливать фреймворк отдельно, так как он не входит в стандартную библиотеку Python. Для этого у вас должен быть установлен Python 3.8 + или PyPy 3.</li>
45
<li>Невозможность запускать тесты PyTest на других фреймворках.</li>
45
<li>Невозможность запускать тесты PyTest на других фреймворках.</li>
46
</ul><p>Слушатели курса<a>"Тестирование с PyTest"</a>подробно изучают все элементы фреймворка и последовательность написания в нем тестовых случаев, а также приобретают практические навыки в работе с PyTest с помощью тренажера.</p>
46
</ul><p>Слушатели курса<a>"Тестирование с PyTest"</a>подробно изучают все элементы фреймворка и последовательность написания в нем тестовых случаев, а также приобретают практические навыки в работе с PyTest с помощью тренажера.</p>