2

在 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)。但是,Statistics/Call Graph显示生成的 pstat 文件的视图是空的,并且显示Nothing to show.

我希望看到test_something和的分析信息my_function。我究竟做错了什么?

编辑1:如果我将文件名更改为以开头的文件名test_,删除unittest.TestCase并插入一个__main__方法调用my_function,我终于可以在没有py.test的情况下运行cProfile,我看到了结果。

但是,我正在做一个包含大量测试的大型项目。我想直接分析这些测试而不是编写额外的分析脚本。有没有办法调用py.test测试发现模块,以便我可以递归地检索项目的所有测试?(这个unittest发现是不够的,因为我们在生成器函数中产生了很多参数化的测试,这些测试是不被 识别的unittest)。这样我至少可以只用 1 个额外的脚本来解决问题。

4

1 回答 1

0

这是一个解决方法。使用以下内容创建一个额外的 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.

于 2015-09-07T10:50:24.730 回答