一个用于pytest的简单插件
项目描述
pytest-memray
pytest-memray是一个pytest插件,用于轻松集成memray。
安装
pytest-memray需要Python 3.8或更高版本,并且可以使用大多数常见的Python打包工具轻松安装。我们建议从PyPI安装最新的稳定版本,使用pip
pip install pytest-memray
文档
您可以在此处找到最新的文档。
快速入门
要在pytest运行中使用此插件,只需将--memray
添加到命令行调用中
pytest --memray tests
在测试套件运行后,您将看到打印的内存报告
=================================== test session starts ====================================
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
cachedir: /v/.pytest_cache
rootdir: /w
plugins: memray-1.1.0
collected 2 items
demo/test_ok.py .M [100%]
========================================= FAILURES =========================================
____________________________________ test_memory_exceed ____________________________________
Test was limited to 100.0KiB but allocated 117.2KiB
------------------------------------ memray-max-memory -------------------------------------
Test is using 117.2KiB out of limit of 100.0KiB
List of allocations:
- <listcomp>:/w/demo/test_ok.py:17 -> 117.2KiB
====================================== MEMRAY REPORT =======================================
Allocations results for demo/test_ok.py::test_memory_exceed
📦 Total memory allocated: 117.2KiB
📏 Total allocations: 30
📊 Histogram of allocation sizes: |█|
🥇 Biggest allocating functions:
- <listcomp>:/w/demo/test_ok.py:17 -> 117.2KiB
Allocations results for demo/test_ok.py::test_track
📦 Total memory allocated: 54.9KiB
📏 Total allocations: 71
📊 Histogram of allocation sizes: |█ ▅ |
🥇 Biggest allocating functions:
- test_track:/w/demo/test_ok.py:12 -> 39.1KiB
- _compile_bytecode:<frozen importlib._bootstrap_external>:672 -> 7.2KiB
- _call_with_frames_removed:<frozen importlib._bootstrap>:241 -> 4.7KiB
- _call_with_frames_removed:<frozen importlib._bootstrap>:241 -> 1.8KiB
- _is_marked_for_rewrite:/v/lib/python3.10/site-packages/_pytest/assertion/rewrite.py:240 -> 1.1KiB
================================= short test summary info ==================================
MEMORY PROBLEMS demo/test_ok.py::test_memory_exceed
=============================== 1 failed, 1 passed in 0.01s ================================
配置 - 命令行标志
--memray
- 启用memray跟踪--most-allocations=MOST_ALLOCATIONS
- 显示分配最多内存的N个测试(N=0表示所有测试)--hide-memray-summary
- 在执行结束时隐藏memray摘要--memray-bin-path
- 写入memray二进制转储的路径(默认为临时文件夹)--memray-bin-prefix
- 用于二进制转储的名称前缀(默认为随机UUID4十六进制数)--stacks=STACKS
- 显示N个堆栈条目以显示内存分配的回溯--native
- 显示内存分配回溯时的本地帧(会变慢)--trace-python-allocators
- 记录Pymalloc分配器所做的分配(会变慢)--fail-on-increase
- 如果测试使用的内存比上次成功运行时多,则带有`limit_memory`标记的测试失败
配置 - INI
memray(bool)
- 激活memray跟踪most-allocations(string)
- 显示分配内存最多的N个测试(N=0表示所有测试)hide_memray_summary(bool)
- 隐藏执行结束时的memray摘要stacks(int)
- 显示N个堆栈条目以显示内存分配的回溯native(bool)
- 显示内存分配回溯时的本地帧(会变慢)trace_python_allocators(bool)
- 记录Pymalloc分配器所做的分配(会变慢)fail-on-increase(bool)
- 如果测试使用的内存比上次成功运行时多,则带有limit_memory
标记的测试失败
许可证
pytest-memray遵循Apache-2.0许可协议,如LICENSE文件所示。
行为准则
本项目已采用行为准则。如果您对准则有任何疑问,或在本项目中遇到的不当行为,请通过[email protected]与我们联系。
安全策略
如果您认为您已发现本项目的一个安全漏洞,请向项目团队发送电子邮件至[email protected],详细说明怀疑的问题以及您发现复现该问题的方法。
请勿在GitHub仓库中创建问题,因为我们希望在审查并解决这些问题之前保持漏洞报告的私密性。
贡献
我们欢迎您的贡献,以帮助我们改进和扩展此项目!
以下是一些基本步骤,您需要遵循才能为项目做出贡献。如果您对这一过程或对Bloomberg开源项目的其他方面有任何疑问,请随时通过[email protected]发送电子邮件,我们将尽快回答您的问题。
贡献许可
由于本项目根据开源许可证的条款进行分发,您做出的贡献将遵循相同的条款。为了我们能够接受您的贡献,我们需要您明确确认您能够并愿意在这些条款下提供它们,我们用于此的机制称为开发者原始证明(DCO)。这与Linux(R)内核、Samba以及许多其他主要开源项目所使用的流程非常相似。
为了按照这些条款参与,您必须做的只是将以下类似行作为您贡献中每个提交的提交信息中的最后一行
Signed-Off-By: Random J. Developer <[email protected]>
实现此目的的最简单方法是向您的git commit
命令添加-s
或--signoff
。
您必须使用您的真实姓名(抱歉,不接受化名,也不接受匿名贡献)。
步骤
- 创建一个“功能请求”问题,并解释提议的更改。
- 遵循您收到的模板中的指南。
- 提交问题。
- 提交一个Pull Request,并在总结中包含“#”以将其链接到问题。
开发
该项目需要Linux操作系统才能运行。要设置开发环境,请使用tox(或直接使用make目标)。您可以使用Docker在非Linux系统上运行测试套件,如下所示(您可以通过在末尾传递额外的参数来参数化tox):
docker-compose run --rm test tox
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
pytest_memray-1.7.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | c18fa907d2210b42f4096c093e2d3416dfc002dcaa450ef3f9ba819bc3dd8f5f |
|
MD5 | f29b4ca14c94769c3cd407d8d39c1621 |
|
BLAKE2b-256 | 4b3331536fa35fae6b040f7bb31375c6b95d025eb38e16416c23c0daa36bcb1f |
pytest_memray-1.7.0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | b896718c1adf6d0cd339dfaaaa5620f035c9919e1199a79b3453804a1254306f |
|
MD5 | 0c02596f201d3442215312ef32281f26 |
|
BLAKE2b-256 | 241bfe19affdc41e522aabc4e5df78edb0cd8f59cb6ae2fb151dec1797593a42 |