Какие шаги необходимо сделать для ускорения SimpleTest?

Я пишу некоторый код тестирования на проекте Drupal 6, и я не могу верить, как медленный эти тесты, кажется, работают после работы с другими языками и платформами как Ruby on Rails или Django.

Drupal.org думает, что этот вопрос является спамом и не даст мне способ доказать, что я человек, таким образом, я фигурировал ТАК следующее основное место, которое задаст вопрос как это и получит проверку работоспособности на моем подходе к тестированию.

Следующий тестовый код в этой сути относительно тривиален.

http://gist.github.com/498656

Короче говоря я:

  • создание нескольких типов контента,
  • создайте некоторые роли,
  • создание пользователей,
  • создание содержания как пользователи,
  • проверка, может ли содержание быть отредактировано ими
  • проверка, если это видимо анонимным пользователям

И вот вывод, когда я запускаю эти тесты из командной строки:



Drupal test run
---------------

Tests to be run:
 -  (ClientProjectTestCase)

Test run started: Thu, 29/07/2010 - 19:29

Test summary:
-------------

ClientProject feature 52 passes, 0 fails, and 0 exceptions

Test run duration: 2 min 9 sec

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

Что я могу сделать для ускорения этого?

Я использую MacbookPro с:

  • 4 ГБ поршня,
  • Процессор Core 2 Duo на 2.2 ГГц,
  • PHP 5.2,
  • Apache 2.2.14, без любого кэширования кода операции, Mysql 5.1.42 (таблицы Innodb являются моим значением по умолчанию),
  • Жесткий диск для ноутбука на 5 400 об/мин

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

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

Что работало на Вас, когда Вы работали с Drupal 6 в этой ситуации, и где быстрые победы для этого?

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

6
задан 4 revs, 2 users 100% 31 July 2010 в 01:32
поделиться

1 ответ

Похоже, что наибольшее увеличение скорости произойдет за счет запуска тестовой базы данных на оперативном диске, на основе этой публикации здесь Советы по настройке производительности для тестирования Drupal 7 на qa.drupal .org

DamZ написал модифицированный сценарий mysql init.d для /etc/init.d/mysql в Debian 5, который полностью запускает базы данных MySQL из tmpfs. Он находится по адресу http://drupal.org/files/mysql-tmpfs.txt , прикреплен к http://drupal.org/node/466972 .

Это позволило двухъядерной четырехъядерной машине перейти от 50-минутного теста и огромного дискового ввода-вывода с InnoDB до примерно 3 минут на тест. Сейчас он находится под номером 32 на PIFR v1 для тестирования. D.o. Это, безусловно, единственный выход.

Я не пробовал и не буду пробовать его на InnoDB в ближайшее время, если кто-то захочет пропустить шаг по skip-innodb ниже и попробовать его на tmpfs.

Также здесь есть некоторые инструкции по созданию RAM-диска в OS X , хотя это для перемещения всего вашего запаса баз данных mysql на RAM-диск, а не только одну базу данных:

Обновить - Я пробовал этот подход сейчас с OS X и задокументировал то, что обнаружил

. Мне удалось сократить время тестирования на 30-50%, переключившись на RAM-диск. Вот шаги, которые я предпринял:

Создание RAM-диска

Я выбрал гигабайт в основном потому, что у меня 4 ГБ оперативной памяти, и я не уверен, сколько места мне может понадобиться, поэтому я Я перестраховываюсь:

    diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://2048000`

Setup mysql

Затем я запустил сценарий установки mysql, чтобы установить mysql на новый ramdisk

    /usr/local/mysql/scripts/mysql_install_db \
        --basedir=/usr/local/mysql \
        --datadir=/Volumes/ramdisk

Затем я предпринял следующие шаги: Я убедился, что предыдущий mysqld больше не работает , а затем запустил демон mysql, убедившись, что мы указали ему использовать RAM-диск в качестве каталога данных, а не местоположение по умолчанию.

  /usr/local/mysql/bin/mysqld \
      --basedir=/usr/local/mysql \
      --datadir=/Volumes/ramdisk \
      --log-error=/Volumes/ramdisk/mysql.ramdisk.err \
      --pid-file=/Volumes/ramdisk/mysql.ramdisk.pid \
      --port=3306 \
      --socket=/tmp/mysql_ram.sock

Добавление базы данных для тестирования

Затем я загрузил последний дамп базы данных на нашем промежуточном сайте с помощью drush, перед обновлением там, где на него указывает файл settings.php:

drush sql-dump > staging.project.database.dump.sql

Затем нужно было загрузить эти данные в локальную настройку тестирования. на оперативном диске. Это включало создание символической ссылки на сокет базы данных ramdisk и создание базы данных, предоставление прав пользователю mysql, указанному в установке drupal, а затем загрузку базы данных для запуска тестов. Пошагово:

Создание символической ссылки - это потому, что команда mysql по умолчанию ищет /tmp/mysql.sock , и привязать его к нашему краткосрочному RAM-диску было проще, чем постоянно менять php.ini файлы

ln -s /tmp/mysql_ram.sock /tmp/mysql.sock

Создание базы данных (из командной строки в приглашении mysql)

CREATE DATABASE project_name;
GRANT ALL PRIVILEGES ON project_name.* to db_user@localhost IDENTIFIED BY 'db_password';

Загрузка содержимого в новую базу данных ...

mysql project_database < staging.project.database.dump.sql  

Запуск тестов в командной строке

... и, наконец, запуск тест из командной строки и использование Growlnotify, чтобы сообщить мне, когда тесты завершены

php ./scripts/run-tests.sh --verbose --class ClientFeatureTestCase testFeaturesCreateNewsItem ; growlnotify -w -m "Tests have finished."

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

Что я здесь делаю не так?

Этот не может быть стандартным способом запуска тестов с Drupal, но я не смог найти никакой статистики о том, сколько времени мне следует ожидать набор тестов, который нужно взять с Drupal, чтобы сказать мне иное,

8
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: