брутфорс — это полный перебор, чтобы его осуществить понадобилось бы в разы больше времени. Этот алгоритм ищет решение для конкретного уровня за конечное время.
Есть еще вот такое решение github.com/igrigorik/em-websocket.
А авторизация все же нужна, иначе к вам любой может подцепиться и сделать любого пользователя online.
проверять наличие одного или группы элементов на странице;
взаимодействовать с элементами страницы (кликнуть на элемент, навести курсор на элемент, заполнить текстовое поле, заполнить и отправить форму, выбрать значения в select, проверить состояние checkbox и radio, переключиться на iframe, и т.д.);
переход по ссылке, сделать скриншот открытой страницы
Это все умеет capybara, причем с очень приятным синтаксисом. Попробуйте rspec + capybara + webkit. Быстрее, понятнее и, это де факто стандарт. Ну и webkit headless, в отличие от selenium.
проводить тестирование как в одном, так и нескольких браузерах (выполняется параллельно);
Для параллельного выполнения тестов так же существуют гемы, но с ними нужно аккуратно, есть много подводных камней.
очистка кэша, открытие ссылки в новом окне
Очень необычная вещь, честно говоря, никогда не приходилось такое делать :)
Вы серьезно? В мире есть только Twitter, Facebook и ВКонтакте? Вы говорите о super high load проектах, даже не так — SUPER HIGH LOAD. Весь остальной интернет живет на готовых фреймворках (я про web приложения, а не про сайты визитки). Что-то на php(zend-symfony-yii), ruby on rails, django, всякая джавятина для enterprise. И это немаленькие проекты (как вам github на rails?).
Дело вовсе не в моде (может на Go как раз и мода), а в том, что эти инструменты работают и дают большие преимущества в скорости разработки и в наличии сотен маленьких решений для ежедневных проблем (речь как минимум про rails и ruby gems).
Я бы не сказал, что этот метод хорош, и, думаю, многие согласятся.
Обычно валидацию отделяют от модели
Метод не должен быть таким большим
По поводу пункта б) — я имею в виду, что вы вызываете post.LoadById(id) у инстанса, обычно это делают у класса, статически, например, Post.find(id). (если это AR)
в) — Все зависит от паттерна для реализации моделей, если это AR, то она должна сама иметь инстанс какого-то адаптера базы или где вы там храните данные. В вашем случае каждая модель имеет свое соединение к базе. А это дублирование. А дублирование — это плохо. Напрашивается наследование или что там есть в Go.
Получается, все ваши аргументы сводятся к тому, что проект небольшой, а зачем тогда эта производительность и прочие плюшки Go, если небольшой проект можно накидать за пару команд на чем угодно и я уверен, что это будет быстрее и надежнее (ввиду того что по стандартам сделано или даже кодогенерацией).
Скорее всего, раз задача описана грамотно и создана с участием заказчика, то не может такого быть, чтобы заказчик сказал — «Этого не должно быть в продакшене и точка!». Заказчик может найти баг, но переделывать целиком он вряд ли заставит. А код ревью и проверка другим разработчиком должны уменьшить риск. Ну и иногда можно сделать revert. Так что думаю, что это осознанно принятый риск для ускорения процесса разработки.
Я думаю, что имеется в виду именно CI + ревью кода + ручное тестирование одного из разработчиков (или нескольких). Разработчик делает git fetch + git checkout <нужная ветка> и проверяет изменения, сделанные в пулл реквесте на баги. Ну а для простых веток достаточно ревью кода, по тестам видно покроют они или нет функционал из пулл реквеста, а CI скажет прошли ли сами тесты.
Проблема есть, то что в рельсах называется attr_acсessible, в yii — rules. Идея в том, чтобы вынести эти rules из модели. Модель не должна знать о сценариях ее использования и белом списке. Тогда populate пригодится. Он отсеит то, что мы запретим, в контроллере. При использовании strong_parameters нам просто запрещают присваивать что-либо иное, кроме отфильтрованных данных. Модель становится чище, а безопасность не теряется.
А авторизация все же нужна, иначе к вам любой может подцепиться и сделать любого пользователя online.
Это все умеет capybara, причем с очень приятным синтаксисом. Попробуйте rspec + capybara + webkit. Быстрее, понятнее и, это де факто стандарт. Ну и webkit headless, в отличие от selenium.
Для параллельного выполнения тестов так же существуют гемы, но с ними нужно аккуратно, есть много подводных камней.
Очень необычная вещь, честно говоря, никогда не приходилось такое делать :)
Дело вовсе не в моде (может на Go как раз и мода), а в том, что эти инструменты работают и дают большие преимущества в скорости разработки и в наличии сотен маленьких решений для ежедневных проблем (речь как минимум про rails и ruby gems).
По поводу пункта б) — я имею в виду, что вы вызываете post.LoadById(id) у инстанса, обычно это делают у класса, статически, например, Post.find(id). (если это AR)
в) — Все зависит от паттерна для реализации моделей, если это AR, то она должна сама иметь инстанс какого-то адаптера базы или где вы там храните данные. В вашем случае каждая модель имеет свое соединение к базе. А это дублирование. А дублирование — это плохо. Напрашивается наследование или что там есть в Go.
Получается, все ваши аргументы сводятся к тому, что проект небольшой, а зачем тогда эта производительность и прочие плюшки Go, если небольшой проект можно накидать за пару команд на чем угодно и я уверен, что это будет быстрее и надежнее (ввиду того что по стандартам сделано или даже кодогенерацией).
Значит каждый будет организовывать код как хочет.
а) создаются соединения с базой прямо из методов,
б) не знаю есть ли статические методы в Go, но делать так:
В других языках не принято, да и не очень логично.
в) Валидации нет, не знаю где она у вас будет, но предчувствую плохое.
Так что даже не знаю как можно написать что-то большое таким образом. Все-таки full-stack фрэймворки существуют не просто так :)
Конфиг,
Вызов,
7)
Вообще, тут неплохо было бы вынести это в класс-репозиторий для BlogPost, чтобы было вроде:
В зенд же есть хуки перед вызовом экшена?
2) Почему в мире php не принято следовать REST? Ведь очень некрасиво выглядят эти постоянные проверки на то, что запрос POST?
3)
Разве это нельзя сделать в хуках доктрины prePersist?
4)
что это за магия?
5)
можно переписать как
Проверка на существование id не имеет особого смысла, обычно это просто 404 страница. Юзер не должен руками править урл.
6) EntityManager не кидает эксепшн, просто возвращает null. docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#querying, если не найдена запись.
7)
Что за магическая 1?
Есть вот такая продвинутая библиотека для тестирования js.
Опередили)