Py.test:大量测试时内存使用过多

时间:2014-01-03 09:26:40

标签: python pytest

我在xdist上使用py.test(版本2.4,在Windows 7上)为C ++库运行一系列数值回归和接口测试,C ++库通过C模块提供Python接口。

随着时间的推移,测试次数已增加到2,000次,但我们现在遇到了一些内存问题。无论是否使用xdist,运行测试的python进程的内存使用量似乎都在增加。

在单进程模式下,我们甚至看到了一些错误分配错误的问题,而使用xdist总内存使用量可能会降低操作系统(8个进程,每个进程使用> 1GB)。

这是预期的行为吗?或者在使用py.test进行大量测试时,是否有其他人遇到过同样的问题?我可以在tearDown(Class)中做些什么来减少内存使用量吗?

目前我不能排除问题出现在C / C ++代码中的可能性,但是当通过py.test之外的Python接口运行一些长期运行的程序时,我确实看到相对恒定的内存使用期限。当使用nose代替py.test时我也没有看到任何过多的内存使用(我们使用py.test,因为我们需要junit-xml报告来处理多个进程)

2 个答案:

答案 0 :(得分:2)

py.test的内存使用量会随着测试次数的增加而增加。在执行每个测试之前收集每个测试,并且对于每个测试运行,测试报告存储在存储器中,对于故障将大得多,从而可以在最后报告所有信息。所以在某种程度上这是预期和正常的。

然而,我没有硬数据,也从未仔细研究过这个问题。我们之前在一些CI主机上确实耗尽了内存,但只是给了他们更多的内存来解决它而不是调查。目前我们的CI主机拥有2G内存并在一次测试运行中运行大约3500次测试,它可能会工作一半,但可能涉及更多交换。 Pypy也是一个设计用py.test运行一个巨大的测试套件的项目,所以这当然是可能的。

如果您怀疑C代码泄漏内存,我建议构建一个(小)测试脚本,它只测试扩展模块API(带或不带py.test)并在无限循环中调用它,同时在每个循环后收集内存统计信息。经过几次循环后,内存永远不会再增加。

答案 1 :(得分:0)

我们也遇到过类似的问题。在我们的例子中,我们运行大约4600个测试用例。 我们使用了大量的pytest灯具,我们设法通过稍微不同地确定灯具的范围来节省几个MB(从"会话"到""""功能"的范围内) 。但是我们在考试中表现不佳。