How to use `pytest` from Python?

20,985

Solution 1

I think I can now answer my own question, it's pretty simple:

import pytest

pytest.main(args)

which is documented in the Section "Calling pytest from Python code". Then I can run this module and/or start it with the integrated debugger.

args is the list of command-line arguments, so for example to run only particular tests I can use something like:

args_str = "-k test_myfavorite"
args = args_str.split(" ")
pytest.main(args)

Solution 2

It seems that now (py.test version 2.0+) someone can also do this :

import pytest

pytest.main('-x {0}'.format(argument))

# Or
# pytest.main(['-x', 'argument'])

Ref

Solution 3

This is now supported by pytest and described nicely in the documentation.

You can invoke pytest from Python code directly:

import pytest
pytest.main()

this acts as if you would call “pytest” from the command line. It will not raise SystemExit but return the exitcode instead. You can pass in options and arguments:

pytest.main(["-x", "mytestdir"])

Solution 4

For me it was this:

pytest.main(["-x", "path to test file", "args"])

For example:

import pytest
pytest.main(["-x", "/api/test", "-vv"])

Solution 5

Maybe you could give a try to pycharm it has direct integration with py.test (I use it at work) and debugger runs perfectly.

Share:
20,985
nikow
Author by

nikow

Updated on February 07, 2022

Comments

  • nikow
    nikow over 2 years

    I'm working in a project that recently switched to the pytest unittest framework. I was used to calling my tests from Eclipse, so that I can use the debugger (e.g. placing breakpoints to analyze how a test failure develops). Now this is no longer possible, since the only way to run the tests is via the command line blackbox.

    Is there some way to use pytest from within Python, so that one is not forced to drop out of the IDE? The tests should of course not be run in a separate process.

  • nikow
    nikow almost 14 years
    Thanks, I was aware of the --pdb switch. I think in this case pdb is controlled and started by py.test, which won't work for Eclipse (I want my running Eclipse to take over the debugging).
  • nikow
    nikow almost 12 years
    Thanks, for the suggestion. Just recently I had the chance to use PyCharm 2.5, and I agree that it works very well. Right now I'm kind of split between PyCharm and Aptana Studio.
  • Juan Antonio Gomez Moriano
    Juan Antonio Gomez Moriano almost 12 years
    @nikow : I started using aptana... i hated it, also, if you get familiar with pycharm you can also go for phpstorm, rubymine, intellij... all these IDEs are from jetbrains, and have the same structure, shortcuts... So it is definately worth. I use to be an eclipse fan, but know jetbrains got me :)
  • Kostas Demiris
    Kostas Demiris over 10 years
    +1 for PyCharm . I was using Aptana for PHP but after using PyCharm I am going to gradually switch to JetBrain's products