我正在使用 selenium webdriver(用 Python 编写)进行一套测试。正在测试的页面包含一个表单,该表单根据在其中一个选择框中选择的值更改其显示字段。这个选择框有大约 250 个选项。我有一个测试(通过鼻子运行,尽管这可能无关紧要),它遍历选择框中的所有选项,验证表单是否为每个选定的选项显示了正确的字段。
问题在于,对于每个选项,它都通过 selenium 调用:
- 单击以选择选项
- 7 个字段的 find_element 和 is_displayed
- 选择框中项目的 find_elements
- 选择框中每个选项的 get_attribute 和文本
因此,在大约 10 或 15 分钟内,对运行测试的 webdriver 服务器产生了(大约)250 * (7 * 2 + 1 + 2 * 250) 或 128,750 个不同的请求。在某些情况下,这会导致运行测试的机器上的客户端端口耗尽。这一切都是通过一个测试框架运行的,该框架抽象出诸如如何解析选择框、何时创建新页面对象以及其他一些内容,因此测试代码中的优化要么意味着将所有内容都搞砸,要么扔掉这个测试的框架并手动完成所有事情(为了我们测试代码的可维护性,这是一个坏主意)。
我对解决方案的一些想法是:
- 试图以某种方式汇集或重用与 webdriver 服务器的连接
- 以某种方式调整
urllib2
或httplib
在运行时的配置,以便由 selenium 超时打开的连接或更快地被杀死 - 系统独立(或至少可用于所有具有 OS 开关或类似系统的系统)机制,用于主动跟踪和关闭 selenium 打开的端口
正如我上面提到的,我无法调整页面的解析或处理方式,但我确实可以控制子类化/调整WebDriver
或RemoteConnection
任何我喜欢的方式。有没有人对如何处理上述任何想法或我没有提出的任何想法有任何建议?