我可以为Python单元测试添加内存限制吗?

时间:2018-03-08 08:48:27

标签: python unit-testing

背景信息:我正在为AWS Lambda开发。那里有时间和内存限制(source)。我想检查我的单元测试是否可能会破坏它们。

我已经看到pytest-timeout用于限制this question中的测试时间,我会将其用于时间限制。

记忆中是否有类似内容?

这样的东西
@pytest.mark.max_memory_kb(128000)
def test_foo():
   pass

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

sys.getsizeof(对象)

from unittest import TestCase
import sys

class AgentAPITests(TestCase):
    def test_foo(self):
        return_value = foo()
        size = sys.getsizeof(return_value)
        max_bytes = 1337
        self.assertLess(size, max_bytes)

缺点:它没有捕捉到它们之间发生的事情。因此我不接受这个答案。

memory_profiler

这不是单元测试,所以我也不接受。

我使用here找到了类似memory_profiler的内容:

#!/usr/bin/env python

# core modules
from memory_profiler import profile

# internal modules
import foo


precision = 10
fp = open('memory_profiler_basic_mean.log', 'w+')


@profile(precision=precision, stream=fp)
def test():
    return_val = foo.bar()
    print(return_val)

test()

创建这样的日志文件:

Filename: foobar.py

Line #    Mem usage    Increment   Line Contents
================================================
    14  51.6640625000 MiB  51.6640625000 MiB   @profile(precision=precision, stream=fp)
    15                             def test():
    16  52.2968750000 MiB   0.6328125000 MiB       return_val = foo.bar()
    17  52.2968750000 MiB   0.0000000000 MiB       print(return_val)

因此我可以看到该函数需要51.6 MiB。如果我可以在单元测试中使用它,我的问题就会解决。

以下是本手册中的问题,非单元测试方向:

guppy似乎通常被使用。