Skip to content

Commit 14e1d80

Browse files
Add instructions to create one file for each worker
1 parent 29c4cce commit 14e1d80

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

docs/how-to.rst

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,52 @@ initializing a database service and populating initial tables.
222222

223223
This technique might not work for every case, but should be a starting point for many situations
224224
where executing a high-scope fixture exactly once is important.
225+
226+
227+
Creating one log file for each worker
228+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
229+
230+
To create one log file for each worker with ``pytest-xdist``, add
231+
an option to ``pytest.ini`` for the file base name. Then, in ``conftest.py``,
232+
register it with ``pytest_addoption(parser)`` and use ``pytest_configure(config)``
233+
to rename it with the worker id.
234+
235+
Example:
236+
237+
.. code-block:: python
238+
239+
# content of pytest.ini
240+
[pytest]
241+
log_file_format = %(asctime)s %(name)s %(levelname)s %(message)s
242+
log_file_level = INFO
243+
worker_log_file = tests_%w.log
244+
245+
246+
.. code-block:: python
247+
248+
# content of conftest.py
249+
def pytest_addoption(parser):
250+
log_help_text = 'Similar to log_file, but %w will be replaced with a worker identifier.'
251+
parser.addini('worker_log_file', help=log_help_text)
252+
253+
254+
def pytest_configure(config):
255+
configure_logger(config)
256+
257+
258+
def configure_logger(config):
259+
if xdist_is_enabled():
260+
log_file = config.getini('worker_log_file')
261+
logging.basicConfig(
262+
format=config.getini('log_file_format'),
263+
filename=log_file.replace('%w', os.environ.get('PYTEST_XDIST_WORKER')),
264+
level=config.getini('log_file_level')
265+
)
266+
267+
268+
def xdist_is_enabled():
269+
return os.environ.get('PYTEST_XDIST_WORKER') is not None
270+
271+
272+
If running tests with ``-n3``, for example, three files would be created and named
273+
as ``tests_gw0.log``, ``tests_gw1.log`` and ``tests_gw2.log``.

0 commit comments

Comments
 (0)