Address review
This commit is contained in:
@@ -98,8 +98,7 @@ def pytest_addoption(parser):
|
||||
" the same scope to any available environment.\n\n"
|
||||
"loadfile: load balance by sending test grouped by file"
|
||||
" to any available environment.\n\n"
|
||||
"loadgroup: load balance by sending any pending test or test group"
|
||||
" to any available enviroment.\n\n"
|
||||
"loadgroup: like load, but sends tests marked with 'xdist_group' to the same worker.\n\n"
|
||||
"(default) no: run tests inprocess, don't distribute."
|
||||
),
|
||||
)
|
||||
@@ -207,7 +206,7 @@ def pytest_configure(config):
|
||||
config.option.forked = True
|
||||
|
||||
config_line = (
|
||||
"xgroup: specify group for tests should run in same session."
|
||||
"xdist_group: specify group for tests should run in same session."
|
||||
"in relation to one another. " + "Provided by pytest-xdist."
|
||||
)
|
||||
config.addinivalue_line("markers", config_line)
|
||||
|
||||
@@ -120,15 +120,15 @@ class WorkerInteractor:
|
||||
# add the group name to nodeid as suffix if --dist=loadgroup
|
||||
if config.getvalue("loadgroup"):
|
||||
for item in items:
|
||||
try:
|
||||
mark = item.get_closest_marker("xgroup")
|
||||
except AttributeError:
|
||||
mark = item.get_marker("xgroup")
|
||||
|
||||
if mark:
|
||||
gname = mark.kwargs.get("name")
|
||||
if gname:
|
||||
item._nodeid = "{}@{}".format(item.nodeid, gname)
|
||||
mark = item.get_closest_marker("xdist_group")
|
||||
if not mark:
|
||||
continue
|
||||
gname = (
|
||||
mark.args[0]
|
||||
if len(mark.args) > 0
|
||||
else mark.kwargs.get("name", "default")
|
||||
)
|
||||
item._nodeid = "{}@{}".format(item.nodeid, gname)
|
||||
|
||||
@pytest.hookimpl
|
||||
def pytest_collection_finish(self, session):
|
||||
@@ -250,7 +250,7 @@ def remote_initconfig(option_dict, args):
|
||||
|
||||
|
||||
def setup_config(config, basetemp):
|
||||
config.option.loadgroup = True if config.getvalue("dist") == "loadgroup" else False
|
||||
config.option.loadgroup = config.getvalue("dist") == "loadgroup"
|
||||
config.option.looponfail = False
|
||||
config.option.usepdb = False
|
||||
config.option.dist = "no"
|
||||
|
||||
@@ -3,22 +3,10 @@ from py.log import Producer
|
||||
|
||||
|
||||
class LoadGroupScheduling(LoadScopeScheduling):
|
||||
"""Implement load scheduling across nodes, but grouping test only has group mark.
|
||||
"""Implement load scheduling across nodes, but grouping test by xdist_group mark.
|
||||
|
||||
This distributes the tests collected across all nodes so each test is run
|
||||
just once. All nodes collect and submit the list of tests and when all
|
||||
collections are received it is verified they are identical collections.
|
||||
Then the collection gets divided up in work units, grouped by group mark
|
||||
(If there is no group mark, it is itself a group.), and those work units
|
||||
et submitted to nodes. Whenever a node finishes an item, it calls
|
||||
``.mark_test_complete()`` which will trigger the scheduler to assign more
|
||||
work units if the number of pending tests for the node falls below a low-watermark.
|
||||
|
||||
When created, ``numnodes`` defines how many nodes are expected to submit a
|
||||
collection. This is used to know when all nodes have finished collection.
|
||||
|
||||
This class behaves very much like LoadScopeScheduling,
|
||||
but with a itself or group(by marked) scope.
|
||||
This class behaves very much like LoadScopeScheduling, but it groups tests by xdist_group mark
|
||||
instead of the module or class to which they belong to.
|
||||
"""
|
||||
|
||||
def __init__(self, config, log=None):
|
||||
@@ -49,10 +37,9 @@ class LoadGroupScheduling(LoadScopeScheduling):
|
||||
example/loadsuite/test/test_gamma.py::test_beta0@gname
|
||||
example/loadsuite/test/test_delta.py::Gamma1::test_gamma0@gname
|
||||
|
||||
This function will group tests with the scope determined by splitting
|
||||
the first ``@`` from the right. That is, test will be grouped in a
|
||||
single work unit when they have same group name.
|
||||
In the above example, scopes will be::
|
||||
This function will group tests with the scope determined by splitting the first ``@``
|
||||
from the right. That is, test will be grouped in a single work unit when they have
|
||||
same group name. In the above example, scopes will be::
|
||||
|
||||
example/loadsuite/test/test_beta.py::test_beta0
|
||||
example/loadsuite/test/test_delta.py::Delta1::test_delta0
|
||||
|
||||
Reference in New Issue
Block a user