Skip to content

Commit

Permalink
Add PYTEST_VERSION environment variable (#12190)
Browse files Browse the repository at this point in the history
Among other things, it can be used to check if a code is running from within a pytest session.

Fixes #9502
  • Loading branch information
dheerajck authored Apr 18, 2024
1 parent 5884424 commit 48b6d18
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ Daw-Ran Liou
Debi Mishra
Denis Kirisov
Denivy Braiam Rück
Dheeraj C K
Dhiren Serai
Diego Russo
Dmitry Dygalo
Expand Down
1 change: 1 addition & 0 deletions changelog/9502.improvement.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added :envvar:`PYTEST_VERSION` environment variable which is defined at the start of the pytest session and undefined afterwards. It contains the value of ``pytest.__version__``, and among other things can be used to easily check if code is running from within a pytest run.
5 changes: 5 additions & 0 deletions doc/en/reference/reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,11 @@ When set (regardless of value), pytest acknowledges that is running in a CI proc
This contains a command-line (parsed by the py:mod:`shlex` module) that will be **prepended** to the command line given
by the user, see :ref:`adding default options` for more information.

.. envvar:: PYTEST_VERSION

This environment variable is defined at the start of the pytest session and is undefined afterwards.
It contains the value of ``pytest.__version__``, and among other things can be used to easily check if a code is running from within a pytest run.

.. envvar:: PYTEST_CURRENT_TEST

This is not meant to be set by users, but is set by pytest internally with the name of the current test so other
Expand Down
8 changes: 8 additions & 0 deletions src/_pytest/config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
from .exceptions import PrintHelp as PrintHelp
from .exceptions import UsageError as UsageError
from .findpaths import determine_setup
from _pytest import __version__
import _pytest._code
from _pytest._code import ExceptionInfo
from _pytest._code import filter_traceback
Expand Down Expand Up @@ -151,7 +152,9 @@ def main(
:returns: An exit code.
"""
old_pytest_version = os.environ.get("PYTEST_VERSION")
try:
os.environ["PYTEST_VERSION"] = __version__
try:
config = _prepareconfig(args, plugins)
except ConftestImportFailure as e:
Expand Down Expand Up @@ -186,6 +189,11 @@ def main(
for msg in e.args:
tw.line(f"ERROR: {msg}\n", red=True)
return ExitCode.USAGE_ERROR
finally:
if old_pytest_version is None:
os.environ.pop("PYTEST_VERSION", None)
else:
os.environ["PYTEST_VERSION"] = old_pytest_version


def console_main() -> int:
Expand Down
17 changes: 17 additions & 0 deletions testing/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -1094,3 +1094,20 @@ def func() -> None:
with pytest.raises(TypeError) as excinfo:
OutcomeException(func) # type: ignore
assert str(excinfo.value) == expected


def test_pytest_version_env_var(pytester: Pytester, monkeypatch: MonkeyPatch) -> None:
os.environ["PYTEST_VERSION"] = "old version"
pytester.makepyfile(
"""
import pytest
import os
def test():
assert os.environ.get("PYTEST_VERSION") == pytest.__version__
"""
)
result = pytester.runpytest_inprocess()
assert result.ret == ExitCode.OK
assert os.environ["PYTEST_VERSION"] == "old version"

0 comments on commit 48b6d18

Please sign in to comment.