Тесты, а нужны ли?

    Да нужны. Замечу, что речь идёт об автоматизированных тестах. Эта штука просто жизненно необходима для особо функционального (базового, низкоуровнего) кода, каковой содержит сам framework Django. Но почему бы не применить тесты для сайтов? И это не просто «по приколу», а некая защита от головняка.


    Часто приходится обновлять Django и сопутствующие приложения на сервере, что иногда приводит к проблемам, которые крайне нежелательны на сайтах заказчиков. И главная проблема это 500 ошибка, которая и будет показателем отказа в тексте ниже.


    Итак, Django предоставляет возможность писать тесты для приложений и это всё облегчает.


    В большинстве сайтов, ничего не может обрушиться просто так, это скорее всего связано с обратно несовместимыми изменениями в Django, либо влиянием таких изменений на сторонние приложения (django-voting e.t.c.). Написав простейший тест, который проверит, а возвращает ли страница корректный код (т.е. 200) мы при первом же запуске всех тестов определим неработающие страницы, а соответственно и проблемный код.


    Итак, в конце всего этого короткий код (за остальным, обратитесь к документации):

    from django.test import TestCase
    
    class LentaTest(TestCase):
        def test_index(self):
            response = self.client.get('/lenta/')
            self.failUnlessEqual(response.status_code, 200)
    


    Код помещаем в appname/tests.py, а чтобы запустить тесты, делаем manage.py test appname

    Комментарии 21

      +2
      Все выходные топики отличаются своей исключительной краткостью! :)
        +1
        Только appname/tests.py
          0
          Спасибо, поправил
          0
          У меня другой вопрос - а какая есть причина, чтобы НЕ применять тесты для сайтов???
          Мы тестируем все, маршруты, передаваемые параметры, действия контроллеров (используем MVC), и проводим функциональное тестирование UI. А иначе никак! Любой сайт, который нужно развивать и поддерживать, просто обязан быть в репозитории с полным набором тестов - это у нас главное правило (вернее, само собой разумеющаяся вещь).
            0
            Скажу по секрету (шёпотом): ещё ни разу не работал над Python/Django проектом, у которого есть хоть какие-то тесты.
            Да и сам, начал данную практику недавно, хотя во времена PHP уделял этому даже слишком большое внимание
              0
              Ну как сказать! TDD - вообще необязательная практика в принципе. Для нас это не приятное дополнение, а способ разработки. По другому даже не делается. Только TDD и постоянная интеграция (не представляю ее без TDD).
              0
              Как обычно, рано нажал "Добавить" :)

              ИМХО, не стоит переусердствовать в этом вопросе, нужно всегда искать компромисс между "хорошей практикой" и "критической необходимостью"
                +1
                с таким тщательным подходом вам стоит писать ПО для атомных электростанций и космических кораблей =)
                  0
                  Хех) Хорошо бы, с удовольствием руководил бы такими проектами, но всему свое время.
                  Непрочь поучаствовать в написании ПО для Большого Андронного Коллайдера :))
                    0
                    В вас есть какая-то деструктивная черта)
                      0
                      Не, ну это чтобы вырубить его вовремя)
                        0
                        def testak(self):
                        self.ak.start()
                        self.assertEqual(self.world.is_live(), True)

                        Ни больше, ни меньше)))
                –2
                Жуткий код с точки зрения стилистики, кстати.
                Сразу и XxxYyy, и xxxYyy, и xxx_yyy...
                  0
                  Может покажется странным, но это из документации и я могу обосновать почему так.

                  XxxYyy и xxx_yyy — это стандартная джанговская стилистика. Первое для имён классов, второе для имён методов классов.

                  xxxYyy это уже unittest, а там свои стандарты. Предлагаете переписать?)))))))
                    –1
                    Должно быть self.fail_unless_equal
                      –1
                      Сорри, не заметил что это из TestCase
                      +2
                      Это не стандартная джанговская стилистака, это стандартный PEP8 :)
                      А unittest, как это понятно, порт оного с Java, а отсюда и такой case.
                        0
                        Другое дело, что этот стандарт принят в Django, могли же и не принимать :)
                        0
                        Да нет, просто смотрится злобно. Хотя разработчики левых модулей могли бы и придерживаться стилистики языка.
                          0
                          Зато документацию по 10 раз заново не писать. Представьте, если бы SQL подстраивался под стандарты каждого конкретного языка.
                      0
                      Доктор, вы мой герой! Написал с десяток тестов для небольшого (пока!) проекта - не знаю зачем это нужно, но мне понравилось. (=

                      Хотя, определённые преимущества перед ф5чкой есть - повторяемость на всём массиве и "сначала тесты, потом код".

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое