PyCharm + cProfile + py.test --> pstat 快照视图 + 调用图为空
Posted
技术标签:
【中文标题】PyCharm + cProfile + py.test --> pstat 快照视图 + 调用图为空【英文标题】:PyCharm + cProfile + py.test --> pstat snapshot view + call graph are empty 【发布时间】:2015-09-01 11:32:29 【问题描述】:在 PyCharm 中,我将 py.test
设置为默认测试运行器。
我有一个简单的测试用例:
import unittest
import time
def my_function():
time.sleep(0.42)
class MyTestCase(unittest.TestCase):
def test_something(self):
my_function()
现在我通过右键单击文件并选择 Profile 'py.test in test_profile.py'
来运行测试。
我在控制台中看到测试成功运行(它显示collected 1 items
)。但是,显示生成的 pstat 文件的 Statistics/Call Graph
视图是空的,显示为 Nothing to show
。
我希望看到test_something
和my_function
的分析信息。我做错了什么?
编辑 1:
如果我将文件名更改为不以test_
开头的名称,删除unittest.TestCase
并插入一个__main__
调用my_function
的方法,我终于可以在没有py的情况下运行cProfile .test 我看到了结果。
但是,我正在处理一个包含大量测试的大型项目。我想直接分析这些测试而不是编写额外的分析脚本。有没有办法调用py.test
test-discovery 模块,以便我可以递归地检索项目的所有测试? (unittest
的发现是不够的,因为我们在生成器函数中产生了很多 unittest
无法识别的参数化测试)。这样我至少可以只用 1 个额外的脚本来解决问题。
【问题讨论】:
【参考方案1】:这是一个解决方法。使用以下内容创建一个额外的 python 脚本(相应地调整到 tests-root 的路径):
import os
import pytest
if __name__ == '__main__':
source_dir = os.path.dirname(os.path.abspath(__file__))
test_dir = os.path.abspath(os.path.join(source_dir, "../"))
pytest.main(test_dir, "setup.cfg")
脚本文件名不能以test_
开头,否则pycharm会强制你以py.test
运行它。然后右键单击该文件并使用Profile
运行它。
这对于使用Coverage
运行它也很方便。
【讨论】:
test_dir = os.path.dirname(source_dir)
应该在这里工作以上是关于PyCharm + cProfile + py.test --> pstat 快照视图 + 调用图为空的主要内容,如果未能解决你的问题,请参考以下文章