关闭插座的正确方法是什么?避免使用python / django的Errno 10054

时间:2013-03-06 10:01:25

标签: python django unit-testing selenium

我正在与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 个答案:

答案 0 :(得分:2)

我也有这个问题,我在退出之前通过刷新浏览器修复了它。 (是的,很奇怪,我知道)。请尝试在self.ff.quit()之前添加此行:

self.ff.refresh()
self.ff.quit()

为我修好了,虽然我不知道为什么。