2

我有一个需要测试功能和性能的 Web 应用程序,我们计划使用的部分测试套件已经用 Python 编写。当我第一次写这篇文章时,我使用 mechanize 作为我的网络抓取方式,但它似乎对我想要做的事情来说太笨重了(或者我错过了一些东西)。

我正在尝试做的基本布局如下。都是对象。

  • 用户有通讯(曾经是我的东西和机械化之间的接口)
  • Comm 有浏览器(保存我的 CookieJar、urllib2 和 BeautifulSoup 对象,以前是机械化的)
  • 浏览器有表单(过去是机械化处理的)

现在,就线程而言,我把它记下来了。将根据需要在处理 GIL 和运行单独的 Python 实例之间进行调整,但会采纳建议。

所以我需要做的是线程用户点击应用程序并做各种事情(登录、填写表单、提交表单进行处理等),同时不要让测试框尖叫得太大声。我目前的机械化问题似乎是 RAM。

导致 RAM 问题的部分原因是需要为每个用户提供单独的浏览器实例,以防止JSESSIONID每次我与不同的用户一起做某事时覆盖 cookie。

其中大部分可能看起来微不足道,但我试图在这里运行数千个线程,所以小的调整可能意味着很多。任何输入表示赞赏。

4

3 回答 3

1

线程会导致 GIL 出现问题,更多的内核更是如此。尝试使用带有eventlet的 mechanize来实现并发(通过多个进程)也可以查看multi-mechanize

于 2011-04-03T16:43:44.000 回答
0

您是否考虑过 Twisted,异步库,至少可以与用户进行交互?

于 2011-03-08T18:32:08.753 回答
0

我实际上没有使用 mechanize 而是使用了 Threading 模块。这允许相当快速的事务,并且我还确保每个线程内部不要有太多。登录信息,以及在我线程化之前使 webapp 处于必要的状态有助于线程运行更短,因此更快。

于 2011-03-28T17:40:57.010 回答