HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>С ростом проекта становится сложно определить, какой код уже протестирован, а какой - еще нет. При этом подобная потребность возникает регулярно. Обычно это происходит тогда, когда не все члены команды ответственно подходят к написанию тестов. В таком случае может страдать качество проекта.</p>
1 <p>С ростом проекта становится сложно определить, какой код уже протестирован, а какой - еще нет. При этом подобная потребность возникает регулярно. Обычно это происходит тогда, когда не все члены команды ответственно подходят к написанию тестов. В таком случае может страдать качество проекта.</p>
2 <p>Но есть решение - протестированность кода можно измерить. В этом уроке мы познакомимся с метрикой, которая помогает подсчитать количество тестов и качество тестирования.</p>
2 <p>Но есть решение - протестированность кода можно измерить. В этом уроке мы познакомимся с метрикой, которая помогает подсчитать количество тестов и качество тестирования.</p>
3 <h2>Как работает покрытие тестами</h2>
3 <h2>Как работает покрытие тестами</h2>
4 <p>В тестировании часто используют метрику code coverage - это<strong>покрытие кода тестами</strong>. Покрытие анализируется тестовыми фреймворками, которые считают отношения строчек, задействованных в тестах, ко всем строчкам исходного кода.</p>
4 <p>В тестировании часто используют метрику code coverage - это<strong>покрытие кода тестами</strong>. Покрытие анализируется тестовыми фреймворками, которые считают отношения строчек, задействованных в тестах, ко всем строчкам исходного кода.</p>
5 <p>Например, если в коде есть условная конструкция, не проверенная тестами, то все строки кода в этой конструкции будут не покрытыми.</p>
5 <p>Например, если в коде есть условная конструкция, не проверенная тестами, то все строки кода в этой конструкции будут не покрытыми.</p>
6 <p>В Pytest покрытие измеряется крайне просто. Достаточно установить одну зависимость и запустить тесты с правильным флагом:</p>
6 <p>В Pytest покрытие измеряется крайне просто. Достаточно установить одну зависимость и запустить тесты с правильным флагом:</p>
7 <p>После всех тестов Pytest выводит сводную таблицу по каждому файлу. В ней показан процент покрытия кода тестами.</p>
7 <p>После всех тестов Pytest выводит сводную таблицу по каждому файлу. В ней показан процент покрытия кода тестами.</p>
8 <p>В примере выше видно, что в файле<em>_<em>init_</em>.py</em>покрыто 100% кода, а вот в файле<em>example.py</em>- только 75%. При этом общее покрытие кода 80%.</p>
8 <p>В примере выше видно, что в файле<em>_<em>init_</em>.py</em>покрыто 100% кода, а вот в файле<em>example.py</em>- только 75%. При этом общее покрытие кода 80%.</p>
9 <p>Обратите внимание, что покрытие сильно зависит от того, какие тесты выполнились. Если часть тестов упало с ошибкой, то Pytest покажет намного меньшее покрытие - тесты просто не доберутся до всего кода. Поэтому покрытие измеряют только тогда, когда все тесты зеленые.</p>
9 <p>Обратите внимание, что покрытие сильно зависит от того, какие тесты выполнились. Если часть тестов упало с ошибкой, то Pytest покажет намного меньшее покрытие - тесты просто не доберутся до всего кода. Поэтому покрытие измеряют только тогда, когда все тесты зеленые.</p>
10 <p>Эта статистика помогает найти места, где тестов мало. Дальше по ситуации их можно добавлять. Если в проекте тестов не было вообще, то эта статистика начинает быстро расти. А вот дальше, ближе к 90 процентам, придется бороться за каждую строчку кода.</p>
10 <p>Эта статистика помогает найти места, где тестов мало. Дальше по ситуации их можно добавлять. Если в проекте тестов не было вообще, то эта статистика начинает быстро расти. А вот дальше, ближе к 90 процентам, придется бороться за каждую строчку кода.</p>
11 <h2>Каким должно быть покрытие</h2>
11 <h2>Каким должно быть покрытие</h2>
12 <p>Само по себе покрытие не гарантирует, что код работает правильно во всех ситуациях. Логические ошибки в коде невозможно отследить только покрытием. Для этого нужны тесты на одну и ту же функциональность, но с разным набором данных.</p>
12 <p>Само по себе покрытие не гарантирует, что код работает правильно во всех ситуациях. Логические ошибки в коде невозможно отследить только покрытием. Для этого нужны тесты на одну и ту же функциональность, но с разным набором данных.</p>
13 <p>Как правило, это тесты на пограничные случаи. В разработке есть хорошая практика: перед починкой багов нужно написать тесты, которые их воспроизводят, и только затем уже можно чинить эти баги.</p>
13 <p>Как правило, это тесты на пограничные случаи. В разработке есть хорошая практика: перед починкой багов нужно написать тесты, которые их воспроизводят, и только затем уже можно чинить эти баги.</p>
14 <p>Какое покрытие считается допустимым? 100% покрытия выглядит красиво, но добиться его невероятно сложно. Более того, для большинства проектов это бессмысленно - затраченные усилия не окупятся. Большинство разработчиков сходится во мнении, что 80% - это достаточно хорошее покрытие. На этом можно и остановиться.</p>
14 <p>Какое покрытие считается допустимым? 100% покрытия выглядит красиво, но добиться его невероятно сложно. Более того, для большинства проектов это бессмысленно - затраченные усилия не окупятся. Большинство разработчиков сходится во мнении, что 80% - это достаточно хорошее покрытие. На этом можно и остановиться.</p>