import time import pytest def pytest_configure_node(node): node.slaveinput['all_nodes'] = {'a': True, 'b': True, 'c': True} node.slaveinput['used_nodes'] = {} def _get_browser(request): def get_browser(): class Browser(object): node = None browser = Browser() if hasattr(request.config, 'slaveinput'): all_nodes = request.config.slaveinput['all_nodes'] used_nodes = request.config.slaveinput['used_nodes'] free_nodes = set(all_nodes.keys()) - set(used_nodes.keys()) node = free_nodes.pop() used_nodes[node] = all_nodes[node] request.config.slaveinput['used_nodes'] = used_nodes browser.node = node return browser return get_browser def _close_browser(request): def close_browser(browser): if hasattr(request.config, 'slaveinput'): used_nodes = request.config.slaveinput['used_nodes'] del used_nodes[browser.node] request.config.slaveinput['used_nodes'] = used_nodes return close_browser def pytest_funcarg__browser(request): return request.cached_setup( setup=_get_browser(request), teardown=_close_browser(request), scope='function')