我正在一个最近切换到框架的项目中工作。我习惯于从 Eclipse 调用我的测试,这样我就可以使用调试器(例如,放置断点来分析测试失败是如何发展的)。现在这不再可能,因为运行测试的唯一方法是通过命令行黑盒。pytest
unittest
有什么方法可以pytest
在 Python 中使用,这样就不会被迫退出 IDE?测试当然不应该在单独的进程中运行。
我想我现在可以回答我自己的问题,这很简单:
import pytest
pytest.main(args)
这在“从 Python 代码调用 pytest”一节中有记录。然后我可以运行这个模块和/或使用集成调试器启动它。
args
是命令行参数的列表,所以例如只运行特定的测试我可以使用类似的东西:
args_str = "-k test_myfavorite"
args = args_str.split(" ")
pytest.main(args)
似乎现在(py.test 2.0+ 版)有人也可以这样做:
import pytest
pytest.main('-x {0}'.format(argument))
# Or
# pytest.main(['-x', 'argument'])
这现在由 pytest 支持,并在文档中得到了很好的描述。
您可以直接从 Python 代码调用 pytest:
import pytest pytest.main()
这就像您从命令行调用“pytest”一样。它不会引发 SystemExit 而是返回退出代码。您可以传入选项和参数:
pytest.main(["-x", "mytestdir"])
对我来说是这样的:
pytest.main(["-x", "path to test file", "args"])
例如:
import pytest
pytest.main(["-x", "/api/test", "-vv"])
也许您可以尝试pycharm它与 py.test 直接集成(我在工作中使用它)并且调试器运行完美。
我没有尝试过使用 eclipse,但正如在相关问题中所建议的那样,可以将--pdb
命令行选项与py.test
. 也许可以这样配置eclipse。
但是,调用标准import pdb;pdb.set_trace()
不会直接调用调试器。首先,它会发出一个错误,进而激活调试器。这可能会也可能不会使事情变得不同。
py.test --pdb
如果您只想使用调试器而不需要 IDE,则可以运行