如何判断Python/Django单元测试是否正在进入网络?
我最近被添加到一个项目中以添加测试覆盖率(Python/Django unittest模块)。这个应用程序主要处理web API和JSON请求等,我的部分工作是确保现有或未来的测试都不需要实时网络数据才能正常工作 我想知道的是——有没有一种方法可以包装我的测试套件来检测所有网络流量的尝试 例如,对于本应用程序的早期部分,我重写了sys.stdout,作为检测和捕获任何子模块写入stdout的方式。有没有像我这样简单的方法可以通过我的测试捕获网络访问的尝试 编辑:我很感谢你的快速回复。拔出电缆当然是一个简单的解决方案,但我担心断开网络连接不是一个选项(大部分工作是通过SSH完成的)如何判断Python/Django单元测试是否正在进入网络?,python,django,unit-testing,tdd,Python,Django,Unit Testing,Tdd,我最近被添加到一个项目中以添加测试覆盖率(Python/Django unittest模块)。这个应用程序主要处理web API和JSON请求等,我的部分工作是确保现有或未来的测试都不需要实时网络数据才能正常工作 我想知道的是——有没有一种方法可以包装我的测试套件来检测所有网络流量的尝试 例如,对于本应用程序的早期部分,我重写了sys.stdout,作为检测和捕获任何子模块写入stdout的方式。有没有像我这样简单的方法可以通过我的测试捕获网络访问的尝试 编辑:我很感谢你的快速回复。拔出电缆当然
我对Wireshark之类的工具有些熟悉,但我希望它能智能地与代码本身集成。jcollado的urlopen补丁可能就是我想要的,但如果不是的话,一个通用的网络监控工具可能就足够了 有很多工具可以检测网络流量的尝试 例如输出 或
您可以修补用于获取url的所有方法,并记录每次尝试、触发事件或任何更方便您检测的方法
以丁格斯模拟库为例。在中的修补部分中,有一个示例说明修补程序
urllib2.urlopen
可能很有用。我记得我看过Gary Bernhardt(dingus作者)的一篇演讲(抱歉,我找不到链接),他在演讲中展示了如何通过使用这种技术大幅减少django应用程序中的测试时间。因此,您不仅可以使用它来检测网络访问,还可以在测试用例中避免使用网络。您可以通过拉动网络连接并运行它们来判断现有测试是否正在访问网络。您可以使用grep查找创建网络连接的所有位置吗?这不是意外。它们通常非常明显,因为它们涉及import
和适当的库,如urllib
。是什么阻止了您使用搜索?我不是唯一一个处理此代码的人,如果可能的话,我希望避免更改正在测试的代码或要求其他开发人员更改他们的代码。您是否考虑过将代码复制到另一台机器上?单元测试应该独立于文件系统、数据库和网络运行,即使生产代码没有。