Рекомендации по регрессионному тестированию сайтов WordPress?


Всем привет,

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

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

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

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

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

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

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

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

Author: MikeSchinkel , 2010-12-02

3 answers

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

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

Среди красочных событий, которые я видел:

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

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

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

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

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

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

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

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

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

Удачи...:-)

 10
Author: Denis, 2010-12-02 11:51:19

Вам следует настоятельно рассмотреть Селен.

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

 7
Author: Ethan Seifert, 2010-12-04 00:37:31

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

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

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

 1
Author: J.D., 2016-09-01 16:28:37