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 <p>Но тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов: например, тесты производительности или тесты на уязвимости.</p>
3 <p>Но тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов: например, тесты производительности или тесты на уязвимости.</p>
4 <p>В первую очередь программисты отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы, например:</p>
4 <p>В первую очередь программисты отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы, например:</p>
5 <ul><li>Программист написал код, который отвечает за регистрацию пользователя.</li>
5 <ul><li>Программист написал код, который отвечает за регистрацию пользователя.</li>
6 <li>Далее он проводит функциональный тест, который показывает, получается ли у пользователя зарегистрироваться.</li>
6 <li>Далее он проводит функциональный тест, который показывает, получается ли у пользователя зарегистрироваться.</li>
7 </ul><p>По степени изолированности тестируемых частей кода функциональные тесты принято делить на три типа:</p>
7 </ul><p>По степени изолированности тестируемых частей кода функциональные тесты принято делить на три типа:</p>
8 <ul><li><strong>Модульные</strong>- простые, но не очень эффективные тесты. Они проверяют работоспособность функций или других конкретных модулей программы</li>
8 <ul><li><strong>Модульные</strong>- простые, но не очень эффективные тесты. Они проверяют работоспособность функций или других конкретных модулей программы</li>
9 <li><strong>Интеграционные</strong>- такие тесты охватывают большую часть системы и проверяют, работают ли модули вместе. Таким тестам программисты уделяют основное внимание. Интеграционные тесты все еще достаточно просто писать, если экосистема проекта подготовлена к этому</li>
9 <li><strong>Интеграционные</strong>- такие тесты охватывают большую часть системы и проверяют, работают ли модули вместе. Таким тестам программисты уделяют основное внимание. Интеграционные тесты все еще достаточно просто писать, если экосистема проекта подготовлена к этому</li>
10 <li><strong>Системные</strong>- самые эффективные тесты, но при этом их сложно писать и поддерживать. Они эмулируют поведение пользователя: кликают на ссылки, отправляют формы. Такие тесты часто ломаются, потому что они опираются на верстку сайта, а она может непредсказуемо поменяться. Еще при таком тестировании невозможно точно определить, когда с точки зрения программы закончилось одно действие и началось другое</li>
10 <li><strong>Системные</strong>- самые эффективные тесты, но при этом их сложно писать и поддерживать. Они эмулируют поведение пользователя: кликают на ссылки, отправляют формы. Такие тесты часто ломаются, потому что они опираются на верстку сайта, а она может непредсказуемо поменяться. Еще при таком тестировании невозможно точно определить, когда с точки зрения программы закончилось одно действие и началось другое</li>
11 </ul><p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы, часто используются одни и те же инструменты. Этот курс знакомит с общими принципами тестирования и шаг за шагом проводит через все возникающие во время тестирования задачи. На курсе мы затронем такие основные темы:</p>
11 </ul><p>Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы, часто используются одни и те же инструменты. Этот курс знакомит с общими принципами тестирования и шаг за шагом проводит через все возникающие во время тестирования задачи. На курсе мы затронем такие основные темы:</p>
12 <ul><li>Утверждения (Asserts)</li>
12 <ul><li>Утверждения (Asserts)</li>
13 <li>Фреймворки для тестирования (Pytest)</li>
13 <li>Фреймворки для тестирования (Pytest)</li>
14 <li>Модульное тестирование (Unit)</li>
14 <li>Модульное тестирование (Unit)</li>
15 <li>Покрытие кода тестами</li>
15 <li>Покрытие кода тестами</li>
16 <li>Разработка через тестирование (TDD)</li>
16 <li>Разработка через тестирование (TDD)</li>
17 </ul><h2>Как мы тестируем тесты в данном курсе</h2>
17 </ul><h2>Как мы тестируем тесты в данном курсе</h2>
18 <p>В упражнениях этого курса система проверяет работу тестов на разных реализациях тестируемой функции, включая правильную и ошибочные. Все эти реализации уже написаны в практике. Ваша задача - написать тесты, которые покроют все ожидания работы правильной функции. В итоге, корректная реализация пройдет все тесты, тогда как некорректные - упадут.</p>
18 <p>В упражнениях этого курса система проверяет работу тестов на разных реализациях тестируемой функции, включая правильную и ошибочные. Все эти реализации уже написаны в практике. Ваша задача - написать тесты, которые покроют все ожидания работы правильной функции. В итоге, корректная реализация пройдет все тесты, тогда как некорректные - упадут.</p>
19 <p>Алгоритм решения практик в этом курсе:</p>
19 <p>Алгоритм решения практик в этом курсе:</p>
20 <ol><li>Изучить задание и ожидаемую логику работы функции</li>
20 <ol><li>Изучить задание и ожидаемую логику работы функции</li>
21 <li>Исходя из ожидаемой логики написать тесты</li>
21 <li>Исходя из ожидаемой логики написать тесты</li>
22 <li>Если тесты придерживаются ожидаемой логики, то они:<ul><li>успешно пройдут для корректной реализации</li>
22 <li>Если тесты придерживаются ожидаемой логики, то они:<ul><li>успешно пройдут для корректной реализации</li>
23 <li>обнаружат ошибки, допущенные в неправильных реализациях</li>
23 <li>обнаружат ошибки, допущенные в неправильных реализациях</li>
24 </ul></li>
24 </ul></li>
25 </ol><p>В практиках этого курса вместо вывода результатов теста, вы будете видеть вывод утилиты Supressor. Это наша утилита, которую мы используем для проверки успешных и упавших тестов. Утилита показывает состояние тестов - выполнились они или упали, а также сравнивает его с ожидаемым. Ниже приведены примеры вывода:</p>
25 </ol><p>В практиках этого курса вместо вывода результатов теста, вы будете видеть вывод утилиты Supressor. Это наша утилита, которую мы используем для проверки успешных и упавших тестов. Утилита показывает состояние тестов - выполнились они или упали, а также сравнивает его с ожидаемым. Ниже приведены примеры вывода:</p>
26 <ul><li><p>Вывод успешной практики:</p>
26 <ul><li><p>Вывод успешной практики:</p>
27 <ul><li>"Expected tests to pass, received tests passed" - ожидалось, что тесты пройдут, и они прошли. Это значит, что тесты выполнились успешно для корректной реализации функции</li>
27 <ul><li>"Expected tests to pass, received tests passed" - ожидалось, что тесты пройдут, и они прошли. Это значит, что тесты выполнились успешно для корректной реализации функции</li>
28 <li>"Expected tests to fail, received tests failed" - ожидалось, что тесты упадут, и они упали. Это значит, что тесты обнаружили ошибку в некорректной реализации функции</li>
28 <li>"Expected tests to fail, received tests failed" - ожидалось, что тесты упадут, и они упали. Это значит, что тесты обнаружили ошибку в некорректной реализации функции</li>
29 </ul></li>
29 </ul></li>
30 <li><p>Вывод ошибки в практике:</p>
30 <li><p>Вывод ошибки в практике:</p>
31 <ul><li>"Expected tests to pass, but error occurred. See output above." - ожидалось, что тесты пройдут, но они упали. Это значит, что тесты не прошли на корректной реализации. Возможно в тестах неправильно или больше чем требуется описана ожидаемая логика.</li>
31 <ul><li>"Expected tests to pass, but error occurred. See output above." - ожидалось, что тесты пройдут, но они упали. Это значит, что тесты не прошли на корректной реализации. Возможно в тестах неправильно или больше чем требуется описана ожидаемая логика.</li>
32 <li>"Expected tests to fail, but they passed. See output above." - ожидалось, что тесты упадут, но они прошли. Это значит, что тесты прошли на некорректной реализации и не отловили возможных ошибок. Возможно в тестах неправильно или меньше чем требуется описана ожидаемая логика.</li>
32 <li>"Expected tests to fail, but they passed. See output above." - ожидалось, что тесты упадут, но они прошли. Это значит, что тесты прошли на некорректной реализации и не отловили возможных ошибок. Возможно в тестах неправильно или меньше чем требуется описана ожидаемая логика.</li>
33 </ul></li>
33 </ul></li>
34 </ul><p>Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в<a>этой статье</a>.</p>
34 </ul><p>Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в<a>этой статье</a>.</p>