如何对PouchDB进行压力测试

时间:2014-12-24 15:39:35

标签: javascript scripting stress-testing pouchdb

我们正在考虑使用CouchDB和PouchDB堆栈,我们想强调测试CouchDB,因为我们的一个用例可以同时复制多达70-80个用户。

我们设法对CouchDB进行了压力测试并对结果感到满意,但我们希望从PouchDB进行一些端到端的压力测试。

我尝试了一些事情:

1)使用PhantomJS脚本在for循环中启动许多页面 2)使用PhantomJS脚本和Github上的某种并行函数 3)使用bash脚本和&推出多个幻影 4)使用bash脚本和GNU Parallel来启动PhantomJS的多个实例 *上面的所有测试都使用waitFor函数,只有在全局变量设置为true时才能完成(我能想到的唯一方法是等待页面中的所有JS都被执行)

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

看起来PhantomJS正以某种方式排队。正如我可以看到每个后续请求的稳定进展n * 200ms。

我可能在2-3个设备上构建一个演示应用程序并循环PUT和Replicate,但我想尝试以类似于Siege可以对具有多个资产的页面进行压力测试的方式编写脚本。只是,我希望它能够等待"直到页面完成并且所有JS都已完成运行。

我对如何做到这一点有任何想法?

1 个答案:

答案 0 :(得分:1)

听起来您正试图通过模拟您希望从用户那里获得的负载来对整个系统进行压力测试,即您不是试图测试浏览器性能本身。 (如果情况并非如此,并且您尝试在浏览器中进行测试,那么我们已经有了一些browser performance tests in PouchDB,尽管您将从PhantomJS中获取错误数据,因为它是一个旧浏览器。)

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