2016-08-24 46 views
2

我正在使用Ubuntu 16.04上的Django应用程序,最近注意到在我的Django应用程序的测试套件中使用硒的功能测试有时会失败(超时)。这些是先前通过的测试,并且没有代码已被更改。发生这种情况时,看似随机的测试会失败;在一次运行中,测试A将失败,下一次测试B将失败,A将通过。然而,似乎通常会失败的是调用外部Web服务(Google Maps API调用)或加载外部库(通过CDN加载Font Awesome或Bootstrap) - 硒会超时等待这些资源加载。Django测试服务器和开发服务器间歇性地检索外部资源时遇到问题

发生这种情况时,使用开发服务器(./manage.py runserver)在本地运行站点通常比平常运行速度慢(即某些页面的加载速度会比平时慢很多,或者无法完全加载)。

我怀疑我的计算机上的某种网络流量阻塞或放慢了Django的开发和测试服务器,就像另一个进程正在使用/尝试使用相同的端口或某种性质的东西。

在这个问题特别糟糕的时候,我意识到我正试图在同一台机器上上传1GB文件到Dropbox。当我停止这个过程时,我的测试套件和开发服务器都开始顺利运行。另一次,我通过Google音乐管理器上传音乐文件,当我退出音乐管理器时,测试和开发服务器恢复正常。但是,我目前遇到同样的问题,目前我还没有做任何主要的文件下载或上传(我知道这一点)。

因此,假设这些都不是巧合,是,任何一种很大的网络流量会引起Django开发服务器和测试服务器的问题的情况下,或者是这个引起我的机器上尝试使用某些程序与Django服务器相同的端口/资源/东西?我如何诊断/解决这样的问题?

我已经在SO和其他地方搜索了解该问题,但我无法找到解决方案,部分原因是因为我不确定问题是什么或者如何以搜索的方式表达它引擎理解。

我已经使用netstat工具尝试,与怀疑是其他一些工艺上127.0.0.1:8000运行(与runserver开发服务器运行)和127.0.0.1:8081(这是测试服务器似乎运行),但我会承认我并不确定我应该在那里寻找什么,或者如果我应该在那里寻找。

请原谅我的无知;我对网络问题很陌生(如果那是我所经历的),并且我知道我可能在讨论这个问题的方式会让退伍军人的皮肤爬行。如果这个问题过于模糊,我很抱歉。如果您必须赞成,请告知我可以提供的其他信息,以使问题更清晰/更有用。

在准备这篇文章的时候,这个问题再一次自行解决了,我所有的测试都通过了,但是我知道它会回来,所以任何建议都不胜感激。谢谢!

+2

'sudo netstat -putan'应该显示你在同一个端口上侦听的任何进程(看看你是否有'0.0.0.0:8000'和'127.0.0.1:8000')。无论如何,你的问题似乎是有时你的网络延迟增长太多。当大量传出连接开始并且您的上传带宽减少(即上传大文件时),特别是当您的连接不对称时,这往往会发生。您的互联网连接是否不对称(下载量大于上传量)?如果是这样,您需要通过停止服务或使用流量整形来确保您的带宽足够。 – jjmontes

+0

谢谢,这些信息非常有帮助。是的,看起来我确实有不对称连接(4.93 Mbps下降,最后测试时为0.79)。下次发生这种情况时,我会尝试将网络活动与没有遇到问题的网络活动进行比较。 – elethan

+0

这是哪个操作系统? – o9000

回答

1

一个可能的问题是,处于开发模式的Django服务器将store all database requests

重要的是要记住,在DEBUG运行时打开 ,Django会记住它执行的每个SQL查询。在调试时,这很有用 ,但它会快速占用生产服务器上的内存。

如果在设置中打开DEBUG = False,是否会发生相同的行为?重新启动服务器解决它吗?

+0

重新启动服务器不能解决问题;我已经尝试过了。然而,我还没有测试是否将'DEBUG'改为'False'有助于解决这个问题。我会在下次开始看到效果的时候尝试这个。感谢您的建议! – elethan