我正在为具有多个相互依赖的服务的web应用程序构建一个集成测试。它们都依赖于共享资源才能正确运行。我想确保系统中的数据在运行时是正常的,所以我正在利用一个实时服务。我正在使用Python构建它,这是我关于如何对服务进行沙箱化的想法:
这看上去理智吗?其他想法包括将每个服务作为一个进程运行,或者让每个服务都有自己的来运行。
发布于 2010-10-24 04:40:04
您肯定不想先用实时数据进行测试。为了构建集成测试,您应该首先模拟您的依赖项并使用您控制的I/O集。有了预期的投入和产出是非常重要的。在进行集成测试时,构建这些单元测试将极大地帮助您。
至于您的具体问题,您可以使用代理来拦截数据或修饰您的调用函数来添加日志记录。有关拦截器的更多信息,请查看面向方面编程(AOP)。
如果您正在使用WSGI,您可以编写一个中间件来处理拦截和日志记录。查看一下CherryPy的wsgiserver.py模块,了解它的帮助;Django也使用中间件,它们的文档可能能够帮助处理中间件。
发布于 2010-08-28 17:11:25
第三种可能性是最简单的--通过让您自己的守护进程成为中间进程,并让它成为唯一可以直接访问资源的进程,从而避免任何锁定问题,而所有其他进程都需要通过它来获得访问。
发布于 2010-10-28 15:38:34
也许你应该退后一步,先问几个问题。
不管怎么说,我都会使用一个基于实时数据和对数据的期望的固定设备。这使得我们的测试是确定性的,因此是自动化的。
如果最重要的部分是逻辑的一部分,则可以通过具有已知输入/输出和模拟的单元测试来测试。
如果测试集成部分真的是最重要的,那么我会尝试在模拟尽可能多的移动部件之间找到一个平衡,以便进行更易于管理的测试。
您使用的网络资源越多,系统就越复杂,应该进行的测试也就越多。您必须考虑定时问题、服务正常运行时间、超时、错误状态等。您还可能陷入创建不确定测试的陷阱。如果你的断言最终是在寻找时间上的差异,那么就依赖于特定的时间,或者依赖一个不可靠的服务,它经常会破坏你的工作;而你最终可能会得到一个由于假阳性中断而产生的大量“噪音”而毫无价值的测试。
如果您想使用连续集成模型,您还需要考虑在每次测试运行时必须管理(启动和关闭)或多个进程的复杂性。通常,如果可以让测试是运行的单个进程,而其他的“进程”是对代码中适当起点的函数调用,则可以更容易地管理测试。
https://stackoverflow.com/questions/3522584
复制相似问题