背景信息:我正在为AWS Lambda开发。那里有时间和内存限制(source)。我想检查我的单元测试是否可能会破坏它们。
我已经看到pytest-timeout
用于限制this question中的测试时间,我会将其用于时间限制。
记忆中是否有类似内容?
像
这样的东西@pytest.mark.max_memory_kb(128000)
def test_foo():
pass
答案 0 :(得分:0)
我找到了解决方案。
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)
缺点:它没有捕捉到它们之间发生的事情。因此我不接受这个答案。
这不是单元测试,所以我也不接受。
我使用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
似乎通常被使用。