Лучшие практики для регрессионного тестирования сайтов WordPress?

22

Привет всем,

Мне бы хотелось услышать, что другие, которые поставляют комплексные решения, не связанные с блогами, клиентам с WordPress в качестве платформы, которую они используют для автоматизированного регрессионного тестирования ?

Для тех, кто не знаком с термином «регрессионное тестирование», Википедия определяет его как:

Регрессионное тестирование - это любой тип тестирования программного обеспечения, целью которого является выявление программных ошибок после внесения изменений в программу (например, исправления ошибок или новые функциональные возможности) путем повторного тестирования программы. Цель регрессионного тестирования состоит в том, чтобы гарантировать, что изменение, такое как исправление ошибки, не привело к появлению новых ошибок.

Википедия рассказывает следующее: именно это я испытываю в проекте прямо сейчас:

Опыт показывает, что поскольку программное обеспечение исправлено, появление новых и / или повторное возникновение старых неисправностей является довольно распространенным явлением. Иногда повторное возникновение происходит, потому что исправление теряется из-за плохой практики контроля версий (или простой человеческой ошибки в контроле версий). Часто решение проблемы будет «хрупким» в том смысле, что оно устраняет проблему в узком случае, когда оно впервые наблюдалось, но не в более общих случаях, которые могут возникнуть в течение срока службы программного обеспечения. Часто исправление проблемы в одной области непреднамеренно приводит к программной ошибке в другой области. Наконец, часто бывает так, что при изменении какой-либо функции в редизайне были сделаны те же ошибки, которые были допущены в первоначальной реализации этой функции.

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

Решение, которое я думаю, состоит в том, чтобы настроить регрессионное тестирование с помощью серии «контрольных примеров», составляющих «набор тестов». В принципе, это не так сложно, когда вы тестируете вывод HTML запросов HTTP GET. Но это становится немного сложнее, когда вам нужно что-то тестировать при входе в систему через консоль администратора и / или для тестирования взаимодействий jQuery.

Я настраиваю это как вики-сообщество в надежде, что мы сможем собрать здесь лучшие практики, но мне очень хочется услышать процессы, если какие-либо другие профессионалы WordPress используют.

MikeSchinkel
источник
Я предполагаю, что вы говорите о тестировании своего собственного кода (тем / плагинов)? Когда вы создаете новый код или когда вы обновляете "среду" (WP, другие плагины)? Или оба? Я думаю, что Pro Webmasters также может содержать полезные советы о том, как тестировать веб-приложения (Selenium и прочее) - может быть, кросс-постинг - это хорошая идея?
Ян Фабри
@Jan Fabry - Да, тестирую мой собственный код. Хорошая идея о перекрестной публикации, я сделаю это в ближайшее время.
MikeSchinkel

Ответы:

10

PHPUnit придет в голову, если набор тестов WP не был настолько нарушен, и если WP был спроектирован и написан таким образом, что он действительно мог быть протестирован должным образом. ;-)

А если серьезно, вы можете протестировать свои плагины, сколько хотите, с их функциональной точки зрения, с помощью модульных тестов и т.п. Проблема в том, что эти тесты не гарантируют, что они поймут тонкие шансы, представленные обновлениями WP, не говоря уже о том, что они продолжат работать после того, как будут подключены к настраиваемой установке WP.

Среди разноцветных вещей, которые я видел, произошло:

  • Незначительное изменение в WP API влияет на функциональность вашего плагина, например, на хук, который вы использовали для получения идентификатора термина, и теперь он получает идентификатор термина таксономии. (Скорее всего, у ваших тестовых терминов одинаковый идентификатор для обоих).

  • Незначительное изменение в WP API приводит к тому, что вы получаете WP_Errorобъект вместо ожидаемого ранее значения falseкак неверный ввод.

  • Ваш плагин добавляется из папки mu-plugins, что приводит к немного другому потоку кода.

  • Ваш плагин работал нормально, пока memcached или другое постоянное хранилище не были включены.

  • Ваш плагин работал нормально, пока не был вызван презираемый switch_to_blog ().

  • Плагин изменяет хук, на котором он находится, когда вызывается, и неосознанно прерывает его как побочный эффект.

  • Плагин (не?) Сознательно портит ваши входные или выходные данные до такой степени, что все выглядит не так, даже если вы не виноваты.

Я мог бы расширять список и продолжать, но это были бы ключевые пункты, которые сломали мои собственные плагины. Эти два предмета, вероятно, можно отследить с помощью модульных тестов. Следующие два также, если вы достаточно терпеливы, но я бы сказал, что WP не должен изменять то, как все работает, когда они происходят. Никакое количество тестирования не будет работать с ошибочной реализацией switch_to_blog (). И последние два безнадежно непроверяемы.

О, и ... даже не начинайте меня с натиска вложений, автоматических черновиков, изменений, пунктов меню и того, что в итоге не сохранится в таблице сообщений.

Удачи... :-)

Денис
источник
2
Хороший ответ, спасибо за все детали, которые вы освещаете. Я ищу больше для «регрессионного» тестирования, чем « блочного » тестирования. Я знаю, что есть много совпадений, но моей самой большой проблемой сейчас является проверка того, что веб-сайт не ломается. Да, модульное тестирование плагина может выявить большинство проблем, но для полного охвата модульных тестов требуется гораздо больше времени и усилий (что означает, что я, вероятно, не получу полного охвата), в то время как полное тестирование страниц гораздо менее детализировано в требованиях.
MikeSchinkel
1
На самом деле, обратите внимание, что в определенных средах есть инструменты (Symfony2 и Li3, если не считать два), которые позволяют тестировать реальный сайт, используя вымышленный браузер. Рассматриваемые компоненты могут использоваться для других целей. Таким образом, вы можете фактически управлять экранами администратора вашего сайта и проверять, что то, что вы делаете, имеет ожидаемые результаты.
Дени де Бернарди
7

Вы должны строго рассмотреть Selenium .

Он позволяет вам записывать действия (например, вводить данные в форму, щелкать ссылку), а затем вы можете выполнять утверждения. Он также интегрируется с PHPUnit. Я настоятельно рекомендую проверить двухминутную демонстрацию.

Этан Сейферт
источник
Спасибо за предложение, я слышал об этом раньше. Вы на самом деле использовали для проектов WordPress? Просто любопытно.
MikeSchinkel
Да. Я использовал его для тестирования плагина, над которым я работаю. В прошлой жизни мы использовали его для тестирования приложений EDC для клинических исследований.
Итан Зайферт
1

Selenium, вероятно, пригоден для использования, но я думаю, что в наше время вы найдете Codeception лучше и проще в использовании. Для простейшего визуального регрессионного тестирования у него даже есть расширение, которое будет делать скриншоты и автоматически сравнивать их для вас.

Конечно, тесты Codeception WebDriver могут пойти дальше и выполнить функциональные регрессионные тесты. Вы можете заполнять и отправлять формы, нажимать кнопки и ссылки на сайте, запускать любые JS и т. Д. Вы можете использовать в своих тестах реальный браузер, такой как Firefox или Chrome, или вы можете проводить тестирование без помощи PhantomJS . Это означает, что вы даже можете запускать тесты WebDriver для своего плагина в рамках процесса его сборки на Travis CI, если хотите.

Есть даже несколько специфичных для WordPress библиотек, которые помогут вам начать работу:

JD
источник
1
Selenium и Codeception не являются эксклюзивными. Вы можете использовать WP-Browser для управления Selenium [который управляет реальным браузером, таким как Chrome], Phantom [который является браузером без графического интерфейса с поддержкой JS] или даже PHPBrowser, который является браузером с тупым скручиванием [очень быстрый, но без JS. т. е. API-тесты. WP-браузер может управлять любым из них.
Джим Магуайр,