schrodinger.test.pytest.exetest module

Support for discovery and running test executables from pytest.

class schrodinger.test.pytest.exetest.ExecutableFile(*k, **kw)[source]

Bases: _pytest.nodes.File

A compiled executable file that should be executed as a test.

collect()[source]

Return a list of children (items and collectors) for this collection node.

name

A unique name within the scope of the parent node.

parent

The parent collector node.

config
session
fspath

Filesystem path where this node was collected from (can be None).

exception CollectError

Bases: Exception

An error during collection, contains a custom message.

__init__(*args, **kwargs)
args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

__init__(fspath: py._path.local.LocalPath, parent=None, config: Optional[_pytest.config.Config] = None, session: Optional[Session] = None, nodeid: Optional[str] = None) None
add_marker(marker: Union[str, _pytest.mark.structures.MarkDecorator], append: bool = True) None

Dynamically add a marker object to the node.

Parameters

append – Whether to append the marker, or prepend it.

addfinalizer(fin: Callable[[], object]) None

Register a function to be called when this node is finalized.

This method can only be called when this node is active in a setup chain, for example during self.setup().

classmethod from_parent(parent, *, fspath, **kw)

The public constructor.

get_closest_marker(name: str, default: Optional[_pytest.mark.structures.Mark] = None) Optional[_pytest.mark.structures.Mark]

Return the first marker matching the name, from closest (for example function) to farther level (for example module level).

Parameters
  • default – Fallback return value if no marker was found.

  • name – Name to filter by.

gethookproxy(fspath: py._path.local.LocalPath)
getparent(cls: Type[_pytest.nodes._NodeType]) Optional[_pytest.nodes._NodeType]

Get the next parent node (including self) which is an instance of the given class.

property ihook

fspath-sensitive hook proxy used to call pytest hooks.

isinitpath(path: py._path.local.LocalPath) bool
iter_markers(name: Optional[str] = None) Iterator[_pytest.mark.structures.Mark]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

iter_markers_with_node(name: Optional[str] = None) Iterator[Tuple[_pytest.nodes.Node, _pytest.mark.structures.Mark]]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

Returns

An iterator of (node, mark) tuples.

listchain() List[_pytest.nodes.Node]

Return list of all parent collectors up to self, starting from the root of collection tree.

listextrakeywords() Set[str]

Return a set of all extra keywords in self and any parents.

listnames() List[str]
property nodeid: str

A ::-separated string denoting its collection tree address.

repr_failure(excinfo: _pytest._code.code.ExceptionInfo[BaseException]) Union[str, _pytest._code.code.TerminalRepr]

Return a representation of a collection failure.

Parameters

excinfo – Exception information for the failure.

setup() None
teardown() None
warn(warning: Warning) None

Issue a warning for this Node.

Warnings will be displayed after the test session, unless explicitly suppressed.

Parameters

warning (Warning) – The warning instance to issue.

Raises

ValueError – If warning instance is not a subclass of Warning.

Example usage:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

Changed in version 6.2: Any subclass of Warning is now accepted, rather than only PytestWarning subclasses.

keywords

Keywords/markers collected from all scopes.

own_markers: List[Mark]

The marker objects belonging to this node.

extra_keyword_matches: Set[str]

Allow adding of extra keywords to use for matching.

exception schrodinger.test.pytest.exetest.ProcessDied(command: List[str], output: Optional[str], retcode: int)[source]

Bases: RuntimeError

__init__(command: List[str], output: Optional[str], retcode: int)[source]

Exception to indicate a process has terminated with a non zero exit code.

Parameters
  • command – command line arguments of process

  • output – stdout/stderr of process, if found

  • retcode – exit code of process

args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

exception schrodinger.test.pytest.exetest.ProcessKilled(command: List[str], output: Optional[str], timeout: int)[source]

Bases: schrodinger.test.pytest.exetest.ProcessDied

__init__(command: List[str], output: Optional[str], timeout: int)[source]

Exception to indicate a process has timed out.

Parameters
  • command – command line arguments of process

  • output – stdout/stderr of process, if found

  • timeout – number of seconds command run before timeout

args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

class schrodinger.test.pytest.exetest.ExecutableTest(*k, **kw)[source]

Bases: _pytest.nodes.Item

Use $SCHRODINGER/run to execute a file with no arguments.

__init__(name, parent=None, **kw)[source]
getCommand()[source]

Build the list command arguments to execute the test.

Parameters

memtest_cmd (list or None) – command string section to make the test run through valgrind.

Returns

list

findValgrindSuppressionsFiles(src_dirname)[source]

Search from the test directory in the source repository to $SCHRODINGER_SRC. Also search $SCHRODINGER_SRC/build_tools.

runtest(env: Optional[Dict[str, str]] = None, capture: Optional[bool] = None, stdout=None, stderr=None)[source]

Executed for each test. (pytest method)

Relegate this to a function that is easier to test.

Parameters
  • env (dict) – Shell environment for subprocess.Popen

  • capture – Should output be captured and stored? If not, it goes to stdout.

  • stdout (file-like object) – file descriptor, file object, or subprocess special variable for use as stdout argument to subprocess call. Overrides capture if not None.

  • stderr – file descriptor, file object, or subprocess special variable for use as stderr argument to subprocess call. Overrides capture if not None.

repr_failure(excinfo)[source]

Called when self.runtest() raises an exception. (pytest method)

reportinfo()[source]

The short and long names of the test. (pytest method)

name

A unique name within the scope of the parent node.

parent

The parent collector node.

config
session
fspath

Filesystem path where this node was collected from (can be None).

add_marker(marker: Union[str, _pytest.mark.structures.MarkDecorator], append: bool = True) None

Dynamically add a marker object to the node.

Parameters

append – Whether to append the marker, or prepend it.

add_report_section(when: str, key: str, content: str) None

Add a new report section, similar to what’s done internally to add stdout and stderr captured output:

item.add_report_section("call", "stdout", "report section contents")
Parameters
  • when (str) – One of the possible capture states, "setup", "call", "teardown".

  • key (str) – Name of the section, can be customized at will. Pytest uses "stdout" and "stderr" internally.

  • content (str) – The full contents as a string.

addfinalizer(fin: Callable[[], object]) None

Register a function to be called when this node is finalized.

This method can only be called when this node is active in a setup chain, for example during self.setup().

classmethod from_parent(parent: _pytest.nodes.Node, **kw)

Public constructor for Nodes.

This indirection got introduced in order to enable removing the fragile logic from the node constructors.

Subclasses can use super().from_parent(...) when overriding the construction.

Parameters

parent – The parent node of this Node.

get_closest_marker(name: str, default: Optional[_pytest.mark.structures.Mark] = None) Optional[_pytest.mark.structures.Mark]

Return the first marker matching the name, from closest (for example function) to farther level (for example module level).

Parameters
  • default – Fallback return value if no marker was found.

  • name – Name to filter by.

getparent(cls: Type[_pytest.nodes._NodeType]) Optional[_pytest.nodes._NodeType]

Get the next parent node (including self) which is an instance of the given class.

property ihook

fspath-sensitive hook proxy used to call pytest hooks.

iter_markers(name: Optional[str] = None) Iterator[_pytest.mark.structures.Mark]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

iter_markers_with_node(name: Optional[str] = None) Iterator[Tuple[_pytest.nodes.Node, _pytest.mark.structures.Mark]]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

Returns

An iterator of (node, mark) tuples.

listchain() List[_pytest.nodes.Node]

Return list of all parent collectors up to self, starting from the root of collection tree.

listextrakeywords() Set[str]

Return a set of all extra keywords in self and any parents.

listnames() List[str]
property location
nextitem = None
property nodeid: str

A ::-separated string denoting its collection tree address.

setup() None
teardown() None
warn(warning: Warning) None

Issue a warning for this Node.

Warnings will be displayed after the test session, unless explicitly suppressed.

Parameters

warning (Warning) – The warning instance to issue.

Raises

ValueError – If warning instance is not a subclass of Warning.

Example usage:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

Changed in version 6.2: Any subclass of Warning is now accepted, rather than only PytestWarning subclasses.

user_properties: List[Tuple[str, object]]

A list of tuples (name, value) that holds user defined properties for this test.

keywords

Keywords/markers collected from all scopes.

own_markers: List[Mark]

The marker objects belonging to this node.

extra_keyword_matches: Set[str]

Allow adding of extra keywords to use for matching.

schrodinger.test.pytest.exetest.run_subprocess_test(cmd: List[str], timeout: Optional[int], capture: bool, verbose: bool, env: Optional[Dict[str, str]], *, memtest_log_files: Optional[List[str]] = None, stdout=None, stderr=None)[source]

Run the test in a subprocess.

Parameters
  • cmd – subprocess.Popen command argument

  • timeout – passed to subprocess.wait

  • capture – capture test output

  • verbose – pytest verbosity

  • env – Shell environment for subprocess.Popen

  • memtest_log_files (iterable) – iterable with the names of the log files generated by the memtestz, or None if not running a memtest.

  • stdout (file-like object) – file descriptor, file object, or subprocess special variable for use as stdout argument to subprocess call. Overrides capture if not None.

  • stderr (file-like object) – file descriptor, file object, or subprocess special variable for use as stderr argument to subprocess call. Overrides capture if not None.

class schrodinger.test.pytest.exetest.Makefile(*k, **kw)[source]

Bases: _pytest.nodes.File

collect()[source]

Return a list of children (items and collectors) for this collection node.

name

A unique name within the scope of the parent node.

parent

The parent collector node.

config
session
fspath

Filesystem path where this node was collected from (can be None).

exception CollectError

Bases: Exception

An error during collection, contains a custom message.

__init__(*args, **kwargs)
args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

__init__(fspath: py._path.local.LocalPath, parent=None, config: Optional[_pytest.config.Config] = None, session: Optional[Session] = None, nodeid: Optional[str] = None) None
add_marker(marker: Union[str, _pytest.mark.structures.MarkDecorator], append: bool = True) None

Dynamically add a marker object to the node.

Parameters

append – Whether to append the marker, or prepend it.

addfinalizer(fin: Callable[[], object]) None

Register a function to be called when this node is finalized.

This method can only be called when this node is active in a setup chain, for example during self.setup().

classmethod from_parent(parent, *, fspath, **kw)

The public constructor.

get_closest_marker(name: str, default: Optional[_pytest.mark.structures.Mark] = None) Optional[_pytest.mark.structures.Mark]

Return the first marker matching the name, from closest (for example function) to farther level (for example module level).

Parameters
  • default – Fallback return value if no marker was found.

  • name – Name to filter by.

gethookproxy(fspath: py._path.local.LocalPath)
getparent(cls: Type[_pytest.nodes._NodeType]) Optional[_pytest.nodes._NodeType]

Get the next parent node (including self) which is an instance of the given class.

property ihook

fspath-sensitive hook proxy used to call pytest hooks.

isinitpath(path: py._path.local.LocalPath) bool
iter_markers(name: Optional[str] = None) Iterator[_pytest.mark.structures.Mark]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

iter_markers_with_node(name: Optional[str] = None) Iterator[Tuple[_pytest.nodes.Node, _pytest.mark.structures.Mark]]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

Returns

An iterator of (node, mark) tuples.

listchain() List[_pytest.nodes.Node]

Return list of all parent collectors up to self, starting from the root of collection tree.

listextrakeywords() Set[str]

Return a set of all extra keywords in self and any parents.

listnames() List[str]
property nodeid: str

A ::-separated string denoting its collection tree address.

repr_failure(excinfo: _pytest._code.code.ExceptionInfo[BaseException]) Union[str, _pytest._code.code.TerminalRepr]

Return a representation of a collection failure.

Parameters

excinfo – Exception information for the failure.

setup() None
teardown() None
warn(warning: Warning) None

Issue a warning for this Node.

Warnings will be displayed after the test session, unless explicitly suppressed.

Parameters

warning (Warning) – The warning instance to issue.

Raises

ValueError – If warning instance is not a subclass of Warning.

Example usage:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

Changed in version 6.2: Any subclass of Warning is now accepted, rather than only PytestWarning subclasses.

keywords

Keywords/markers collected from all scopes.

own_markers: List[Mark]

The marker objects belonging to this node.

extra_keyword_matches: Set[str]

Allow adding of extra keywords to use for matching.

class schrodinger.test.pytest.exetest.MakefileTest(*k, **kw)[source]

Bases: schrodinger.test.pytest.exetest.ExecutableTest

Run the make test target in a directory.

__init__(name, parent, **kw)[source]
getCommand()[source]

Build the list command arguments to execute the test.

Parameters

memtest_cmd (list or None) – command string section to make the test run through valgrind.

Returns

list

runtest(env=None)[source]

Make on Windows requires the path separator to be “/”, but toplevel turns the SCHRODINGER path into a valid path for the current os. “unfix” the SCHRODINGER path separator.

name

A unique name within the scope of the parent node.

parent

The parent collector node.

config
session
fspath

Filesystem path where this node was collected from (can be None).

add_marker(marker: Union[str, _pytest.mark.structures.MarkDecorator], append: bool = True) None

Dynamically add a marker object to the node.

Parameters

append – Whether to append the marker, or prepend it.

add_report_section(when: str, key: str, content: str) None

Add a new report section, similar to what’s done internally to add stdout and stderr captured output:

item.add_report_section("call", "stdout", "report section contents")
Parameters
  • when (str) – One of the possible capture states, "setup", "call", "teardown".

  • key (str) – Name of the section, can be customized at will. Pytest uses "stdout" and "stderr" internally.

  • content (str) – The full contents as a string.

addfinalizer(fin: Callable[[], object]) None

Register a function to be called when this node is finalized.

This method can only be called when this node is active in a setup chain, for example during self.setup().

findValgrindSuppressionsFiles(src_dirname)

Search from the test directory in the source repository to $SCHRODINGER_SRC. Also search $SCHRODINGER_SRC/build_tools.

classmethod from_parent(parent: _pytest.nodes.Node, **kw)

Public constructor for Nodes.

This indirection got introduced in order to enable removing the fragile logic from the node constructors.

Subclasses can use super().from_parent(...) when overriding the construction.

Parameters

parent – The parent node of this Node.

get_closest_marker(name: str, default: Optional[_pytest.mark.structures.Mark] = None) Optional[_pytest.mark.structures.Mark]

Return the first marker matching the name, from closest (for example function) to farther level (for example module level).

Parameters
  • default – Fallback return value if no marker was found.

  • name – Name to filter by.

getparent(cls: Type[_pytest.nodes._NodeType]) Optional[_pytest.nodes._NodeType]

Get the next parent node (including self) which is an instance of the given class.

property ihook

fspath-sensitive hook proxy used to call pytest hooks.

iter_markers(name: Optional[str] = None) Iterator[_pytest.mark.structures.Mark]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

iter_markers_with_node(name: Optional[str] = None) Iterator[Tuple[_pytest.nodes.Node, _pytest.mark.structures.Mark]]

Iterate over all markers of the node.

Parameters

name – If given, filter the results by the name attribute.

Returns

An iterator of (node, mark) tuples.

listchain() List[_pytest.nodes.Node]

Return list of all parent collectors up to self, starting from the root of collection tree.

listextrakeywords() Set[str]

Return a set of all extra keywords in self and any parents.

listnames() List[str]
property location
nextitem = None
property nodeid: str

A ::-separated string denoting its collection tree address.

reportinfo()

The short and long names of the test. (pytest method)

repr_failure(excinfo)

Called when self.runtest() raises an exception. (pytest method)

setup() None
teardown() None
warn(warning: Warning) None

Issue a warning for this Node.

Warnings will be displayed after the test session, unless explicitly suppressed.

Parameters

warning (Warning) – The warning instance to issue.

Raises

ValueError – If warning instance is not a subclass of Warning.

Example usage:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

Changed in version 6.2: Any subclass of Warning is now accepted, rather than only PytestWarning subclasses.

user_properties: List[Tuple[str, object]]

A list of tuples (name, value) that holds user defined properties for this test.

own_markers: List[Mark]

The marker objects belonging to this node.

extra_keyword_matches: Set[str]

Allow adding of extra keywords to use for matching.

keywords

Keywords/markers collected from all scopes.