如何正确关闭socket以避免python/django中的Errno 10054
我正在使用 django-selenium 来对我参与的一个 Django 应用进行 Selenium 测试。这个 Django 应用是在本地运行的,使用 Qt 和本地的网络服务器。
所以,要运行测试,我需要先启动应用的服务器、Selenium 服务器,然后再启动 WebDriver 实例来执行测试。
django-selenium 是通过 subprocess.Popen('java -jar <path_to_server.jar>')
来启动它的服务器的,然后如果服务器没有运行,我也会以类似的方式启动我们的应用网络服务器;
def run():
path = os.path.join(os.getcwd(), 'main.py')
server_running = is_server_running()
if server_running is False:
subprocess.Popen(['python', path, '-a'])
现在测试的设置看起来是这样的;
def setUp(self):
self.server = Process(target= startServer.run)
self.server.start()
而在清理时;
def tearDown(self):
# stop our server
self.ff.get('http://localhost:{0}/QUIT'.format(settings.LISTEN_PORT))
# stop the selenium server
self.ff.get('http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer')
# close the browser
self.ff.quit()
self.server.terminate()
在这个过程中,我遇到了一个错误:error: [Errno 10054] An existing connection was forcibly closed by the remote host
。我尝试在关闭连接之间添加 sleep
,但这并没有帮助。
你能看出我可能哪里出错了吗?我觉得如果关闭是来自远程主机的,那么如果我先关闭我们的服务器,然后是 Selenium 服务器,最后在服务器关闭后终止进程,就应该没有问题。
1 个回答
2
我也遇到过这个问题,我是通过在退出之前刷新浏览器来解决的。(听起来很奇怪,我知道)。你可以在 self.ff.quit()
之前加上这一行:
self.ff.refresh()
self.ff.quit()
这样对我来说就解决了,虽然我也不知道为什么。