2014-12-24 81 views
0

我们正在研究使用CouchDB的和PouchDB栈,我们想强调的测试CouchDB的为我们的用例中的一个可以有多达70-80的用户在同一时间复制。如何进行压力测试PouchDB

我们设法压力测试的CouchDB和满意的结果,但是我们想从PouchDB做一些终端到终端的压力测试。

我已经尝试了几件事情:

1)使用使用PhantomJS脚本某种并行功能的Github上 3发现PhantomJS脚本,推出许多网页在一个for循环 2))使用bash脚本和&来启动多个幻影js 4)使用bash脚本和GNU并行来启动PhantomJS的多个实例 *以上所有测试都使用waitFor函数来仅当全局变量被设置为true(唯一的我可以想到的方式将等待页面中的所有JS被执行)

虽然一个phantomJS执行需要大约200-300ms,但当运行多个时,它们似乎会以某种方式进行排队,并且我们在大约30次执行中的最后一次从200ms到30,000ms得到数字。

貌似PhantomJS莫名其妙排队本身。正如我可以看到每个后续请求的n * 200ms稳定进展。

我大概可以建立在2-3的设备和回路PUT和复制演示应用程序,但我想尝试这个脚本在攻城可以强调与多个资产测试页面以类似的方式。只有,我希望它能够“等待”,直到页面完成并且所有JS已经完成运行。

关于如何做到这一点的任何想法?

回答

1

这听起来像你正试图通过模拟您希望从用户收到的,即你是不是想测试浏览器性能本身的负载压力测试整个系统。 (如果情况并非如此,并且您正在尝试在浏览器中进行测试,那么我们已经有一些browser performance tests in PouchDB,不过您会从PhantomJS得到不好的数字,因为它是旧的浏览器。)

由于PouchDB是同构的,会建议避免PhantomJS,并在LevelDB之上运行一些Node.js进程来模拟用户。 PhantomJS可能确实有一些排队问题,因为底层数据存储是WebSQL,它具有全局写入锁定。但是,使用Node,您可以拥有单独的进程,每个进程表示一个线程;您只需确保每个人都有独立的LevelDB,因为LevelDB不是线程安全的(例如new PouchDB('/tmp/some/random/directory'))。

+0

感谢您的帮助Nolan! :)你对PhantomJS是对的,我忘记了这种测试。 我们想主要是测试来自PouchDB复制到远程CouchDB的数据库,因为我们使用的情况下,可以在同一时间有多达70个用户,并在最坏的情况下,他们都复制在同一时间。冲突解决将是有趣的管理;) 我会看看LevelDB和NodeJS,你能指点我很好的教程,因为我不熟悉LevelDB?谢谢! – Vallieres

+0

没有问题,就像通常在Node.js脚本中使用PouchDB一样,但是当你创建它时,将它指向一个空目录,它会在那里写入LevelDB文件:'new PouchDB('/ path/to/DIR')'。 – nlawson