Полезные библиотеки: freezegun - замораживаем время

В модуле datetime есть now() - метод, который возвращает текущее время. Применяется метод часто, например, создаем новую запись в базе данных - в лог пишем запись от текущего времени.

Вот только такой код оттестировать не всегда просто - иногда надо чтобы now() возвращал конкретное время. Для этого случая есть freezegun:

from freezegun import freeze_time
import datetime
import unittest

@freeze_time("2012-01-14")
def test():
    assert ...
more ...

Интересные концепции: fuzzy-testing - тестирование грубой силой

Тестирование программ повышает уверенность в ее способности работать. Есть даже большие школы, которые говорят о тестах, например, TDD, BDD.

У ручных тестов есть недостаток, среди прочих - тесты пишет человек. В следствии этого - он не сможет проверить работу функции/класса/etc на всех данных. А когда нам быть уверенным что даже на самых невалидных данных работает корректно, то без случайных данных ...

more ...

Полезные инструменты: tox как средство тестирования

Если вы автор Python-библиотеки, то скорее всего вам необходимо поддерживать несколько версий Python. Стандартный набор - 2.6, 2.7, 3.3, 3.4 и сейчас уже 3.5. Поддерживать несколько версий Python помогают тесты.

Не секрет, что тесты помогают допускать меньше ошибок во время поддержки проекта. Например, вы можете смелее делать рефакторинг и быть уверены, что функционал который проверяют тесты ...

more ...

Полезные инструменты: tox как средство тестирования

Если вы автор Python-библиотеки, то скорее всего вам необходимо поддерживать несколько версий Python. Стандартный набор - 2.6, 2.7, 3.3, 3.4 и сейчас уже 3.5. Поддерживать несколько версий Python помогают тесты.

Не секрет, что тесты помогают допускать меньше ошибок во время поддержки проекта. Например, вы можете смелее делать рефакторинг и быть уверены, что функционал который проверяют тесты ...

more ...

Тесты тесты тесты: Selenium как инструмент тестирования

Image

Selenium – это проект, в рамках которого разрабатывается серия программных продуктов с открытым исходным кодом. Среди продуктов интересен Selenium WebDriver - это программная библиотека для управления браузерами. WebDriver представляет собой драйверы для различных браузеров и клиентские библиотеки на разных языках программирования, предназначенные для управления этими драйверами.

Много слов и мало сути. А суть проста - использование такого веб-драйвера сводится к созданию бота, выполняющего ...

more ...

Опыт разработчиков: assert как средство для валидации

Опыт разработчиков: assert как средство для валидации

Хочется сегодня осветить такой элемент синтаксиса как assert. assert - это специальная конструкция, позволяющая проверять предположения о значениях произвольных данных в произвольном месте программы.

Какая же польза от этой проверки? Представим что мы что-то пишем код, который получает данные из Базы Данных, производит обработку данных и загружает результат обратно. По замыслу этого кода мы ...

more ...

Тесты тесты тесты: coverage - узнаем сколько процентов кода покрыто тестами

Тесты тесты тесты: coverage - узнаем сколько процентов кода покрыто тестами

Юнит-тесты хороши, когда покрывают весь ключевой код. Однако если проект чуть больше, чем "Hello, world!", то оценить степень покрытия весьма проблематично. Существуют инструменты, которые помогают это делать. Например - coverage.py - модуль Неда Бачелдера.

coverage.py - написан на основе стандартной библлиотеки, может использоваться как из командной строки, так и из кода ...

more ...

Тесты тесты тесты: doctest

Тесты можно писать прям в коде, а точнее в docstring.

Модуль doctest ищет куски текста, которые выглядят как интерактивные сессии Python и затем выполняет эти сессии, чтобы проверить, что они работают точно так же, как показано.

Есть несколько стандартных причин, чтобы использовать doctest:

  • Для того, чтобы проверить актуальность строк документации, убедившись, что все интерактивные примеры работают именно так, как задокументировано ...
more ...

Тесты тесты тесты: doctest

Тесты можно писать прям в коде, а точнее в docstring.

Модуль doctest ищет куски текста, которые выглядят как интерактивные сессии Python и затем выполняет эти сессии, чтобы проверить, что они работают точно так же, как показано.

Есть несколько стандартных причин, чтобы использовать doctest:

  • Для того, чтобы проверить актуальность строк документации, убедившись, что все интерактивные примеры работают именно так, как задокументировано ...
more ...

Тесты тесты тесты: nose

nose — это инструмент для прогона тестов посредством unittest (и doctest, с ключом --with-doctest). Имеет также собственное API, использовать которое необязательно. nose автоматически собирает тесты из файлов вида test_*, достаточно умен, чтобы заглянуть в папочку tests при наличии таковой, умеет измерять покрытие кода (code coverage) при помощи coverage.py (--with-coverage). Также можно запустить только тесты, которые отвалились в последний прогон (--failed ...

more ...