2014-12-24 4 views
0

Мы изучаем использование стека CouchDB и PouchDB, и мы хотели бы подчеркнуть тест CouchDB, так как один из наших вариантов использования может одновременно воспроизводить до 70-80 пользователей.Как подчеркнуть тест PouchDB

Нам удалось подчеркнуть тест CouchDB и остались довольны результатом, но мы хотели бы сделать некоторые сквозные стресс-тесты от PouchDB.

Я попробовал несколько вещей:

1) с помощью сценария PhantomJS, который запускает множество страниц в цикле 2) Использование сценария PhantomJS с какой-то параллельной функции, найденной на Github 3) Использование bash и & для запуска нескольких phantomJS 4) Использование сценария bash и GNU Параллельно с запуском нескольких экземпляров PhantomJS * все вышеприведенные тесты используют функцию waitFor только для завершения, когда для глобальной переменной установлено значение true (единственное Кстати, я могу подумать, что будет ждать, пока все JS на странице будут исполнены)

Хотя одно выполнение phantomJS занимает около 200-300 мс, при запуске нескольких они кажутся как-то поставленными в очередь, и мы получаем цифры от 200 мс до 30 000 мс для последнего из ~ 30 исполнений.

Похоже, что PhantomJS как-то покоится. Поскольку я вижу устойчивую прогрессию n * 200ms для каждого последующего запроса.

Возможно, я мог бы создать демонстрационное приложение на 2-3 устройствах и петлю PUT и Replicate, но я хотел попытаться списать это так же, как Siege может стресс протестировать страницу с несколькими активами. Только, я хочу, чтобы он «подождал», пока страница действительно не будет выполнена, и все JS закончили работу.

Любая идея о том, как я могу это сделать?

ответ

1

Похоже, вы пытаетесь подчеркнуть всю вашу систему, моделируя нагрузку, которую вы ожидаете получить от пользователей, т. Е. Вы не пытаетесь протестировать производительность браузера. (Если это не так, и вы пытаетесь протестировать в браузере, то у нас уже есть browser performance tests in PouchDB, хотя вы получите плохие номера от PhantomJS, потому что это старый браузер.)

Поскольку PouchDB изоморфен, I рекомендовал бы избегать PhantomJS и просто запускать некоторые процессы Node.js поверх LevelDB для имитации ваших пользователей. У PhantomJS действительно могут быть проблемы с очередью, потому что базовым хранилищем данных является WebSQL, который имеет глобальную блокировку записи. Однако с узлом вы можете иметь отдельные процессы, каждый из которых представляет один поток; вам просто нужно быть уверенным, что каждый из них имеет отдельный LevelDB, потому что LevelDB не является потокобезопасным (например, new PouchDB('/tmp/some/random/directory')).

+0

Спасибо за вашу помощь Нолан! :) Вы правы в PhantomJS, я забыл его для такого тестирования. Мы хотели бы в основном протестировать репликацию с PouchDB на удаленную базу данных CouchDB, потому что в нашем случае использования может быть до 70 пользователей одновременно, а в худшем случае они реплицируются одновременно. Разрешение конфликтов будет забавно управлять;) Я посмотрю на LevelDB и NodeJS, можете ли вы указать мне на большие учебники, поскольку я не знаком с LevelDB? Благодаря! – Vallieres

+0

Нет проблем, просто используйте PouchDB, как обычно, внутри скрипта Node.js, но когда вы его создадите, укажите его в пустой каталог и напишите там файлы LevelDB: 'new PouchDB ('/ path/to/реж ') '. – nlawson

 Смежные вопросы

  • Нет связанных вопросов^_^