我有一个需要同时测试功能和性能的网络应用程序,我们计划使用的部分测试套件已经用 Python 编写。当我第一次写这篇文章时,我使用 mechanize 作为我的网络抓取手段,但它似乎对我想做的事情来说太笨重了(要么是那样,要么是我遗漏了什么)。
我正在尝试做的事情的基本布局如下。都是对象。
- 用户有 Comm(曾经是我的东西和 mechanize 之间的接口(interface))
- Comm 有浏览器(保存我的 CookieJar、urllib2 和 BeautifulSoup 对象,过去是机械化的)
- 浏览器有表单(过去是机械化处理的)
现在,就线程而言,我已经记下了。将根据需要在处理 GIL 和运行单独的 Python 实例之间进行调整,但会采纳建议。
所以我需要做的是让线程用户点击应用程序并做各种事情(登录、填写表格、提交表格进行处理等),同时不要让测试箱大声尖叫。我目前的机械化问题似乎是 RAM。
导致 RAM 问题的部分原因是需要为每个用户提供单独的浏览器实例,以防止每次我对不同用户执行某些操作时覆盖 JSESSIONID cookie。
其中的大部分内容可能看起来微不足道,但我正在尝试在这里运行数千个线程,因此微小的调整可能意义重大。感谢任何输入。
请您参考如下方法:
线程会导致 GIL 出现问题,更多的内核更是如此。尝试将 mechanize 与 eventlet 结合使用要实现并发(通过多个进程),请查看 multi-mechanize
