繁体   English   中英

"Py.test:大量测试导致内存使用过多"

[英]Py.test: excessive memory usage with large number of tests

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

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

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

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

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

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

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

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

我们也遇到类似的问题。 在我们的例子中,我们运行大约4600个测试用例。 我们使用广泛的pytest灯具,我们设法通过稍微不同地确定灯具的范围来保存几个MB(从“会话”到“功能”的“类”的几个范围)。 然而,我们的测试表现下降了。

尝试使用--tb=no<\/code>这应该可以防止 pytest 在每次失败时累积堆栈。

我发现最好让您的测试运行程序在多个进程中运行较小的 pytest 实例,而不是运行一次大型 pytest,因为它会在内存中累积每个错误。

pytest 可能应该在磁盘上而不是在 ram 中累积测试结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM