- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在主节点和工作节点之间共享数据库中的随机条目列表(我对共享资源的定义),并使用 pytest-xdist 并行化测试。我的代码遵循以下结构:
## in conftest.py
def get_db_entries():
connect to db
run a query with group by and random
returns one random entry per group as a list of dictionaries.
我采纳了https://hackebrot.github.io/pytest-tricks/shared_directory_xdist/提供的建议在主节点和工作节点之间共享数据库条目:
# in conftest.py
def pytest_configure(config):
if is_master(config):
# share db_entries across master and worker nodes.
config.db_samples = get_db_entries()
def pytest_configure_node(node):
"""xdist hook"""
node.slaveinput['db_entries'] = node.config.db_samples
def is_master(config):
"""True if the code running the given pytest.config object is running in a xdist master
node or not running xdist at all.
"""
return not hasattr(config, 'slaveinput')
@pytest.fixture
def db_samples(request):
"""Returns a unique and temporary directory which can be shared by
master or worker nodes in xdist runs.
"""
if is_master(request.config):
return request.config.db_samples
else:
return request.config.slaveinput['db_entries']
我可以使用上述方法在主机和工作人员之间共享这些数据库条目,如下所示:
# in test-db.py
def test_db(db_samples):
for sample in samples:
# test each sample.
到目前为止,测试用例还没有并行化。我只是在主节点和工作节点之间共享相同的数据库条目。
我的问题:如何参数化共享资源状态(数据库条目),以便我可以使用 pytest-xdist 并行执行这些测试?
我想做一些类似的事情:
# in conftest.py
samples = db_samples() # will FAIL coz fixture can't be invoked directly.
@pytest.fixture(params=samples)
def get_sample(request):
return request.param
# in test-db.py
def test_db(get_sample):
# test one sample.
最佳答案
感谢@hoefling的建议,我能够使用pytest-xdist
钩子(Hook)和pytest_generate_tests
来获得一个可行的解决方案。
# in conftest.py
def pytest_configure(config):
if is_master(config):
# share db_entries across master and worker nodes.
config.db_samples = get_db_entries()
def pytest_configure_node(node):
"""xdist hook"""
node.slaveinput['db_entries'] = node.config.db_samples
def is_master(config):
"""True if the code running the given pytest.config object is running in a xdist master
node or not running xdist at all.
"""
return not hasattr(config, 'slaveinput')
def pytest_generate_tests(metafunc):
if 'sample' in metafunc.fixturenames:
if is_master(metafunc.config):
samples = metafunc.config.db_samples
else:
samples = metafunc.config.slaveinput['db_entries']
metafunc.parametrize("sample", samples)
@pytest.fixture
def sample(request):
return request.param
# in test-db.py
def test_db(sample):
# test one sample.
@hoefling 建议使用 pytest_generate_tests
钩子(Hook)是缺失的部分。使用这个钩子(Hook)来参数化测试 fixture 有助于解决这个问题。
关于python - 使用 pytest-xdist 跨主节点和工作节点访问共享资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57551837/
我刚开始结合使用 pytest 和 xdist 来并行运行测试。我的 contest.py 我有一个配置 Hook 来创建一些测试数据目录(带有时间戳)和测试运行所需的文件。在我使用 xdist 之前
我有一个使用 pytest 运行的测试文件 该文件具有参数化测试,还有一个设置,我希望它在任何测试运行之前仅运行一次,在该设置上我执行无法并行完成的操作(写入文本文件)。 设置是这样的 @pytest
第一次在这里发帖,过去 2 天我尝试搜索 xdist 问题的解决方案。当我尝试使用 n=2 或更高的值运行时,有时(我说有时是因为它随机工作)会出现类似 的错误 Different tests wer
我正在使用 Python 引导一个新的 Selenium 项目。来自 Java 世界,我曾经将 Webdriver 实例包装在 ThreadLocal 中。这样,我可以确定当我的测试与 TestNG
在进程开始运行测试之前,我需要在 xdist 创建的每个进程内执行一些设置(例如创建套接字)。我看过hooks由 xdist 提供,但是 pytest_configure_node() 和 pytes
我目前正在从事一个涉及在远程主机 (bash) 上运行的测试的项目。不幸的是,远程 python 解释器不尊重可用的站点包(它是一个嵌入式包:abaqus python (2.6))。但是,使用 PY
我想访问一个包含所有帐户凭据的列表,以将它们提供给 pytest-xdist 中的每个单独线程。我该如何实现?据我所知,pytest-dist,对于每个启动的线程,它是一个单独的测试 session
我想为 pytest-xdist 产生的每个子进程/网关创建一个单独的日志文件。是否有一种优雅的方法可以找出 pytest 当前所在的子进程/网关?我正在使用位于 conftest.py 的 sess
我正在尝试通过使用 4 个线程的并行执行 (-n=4) 来加速我的 python Django Web 应用程序中的 Selenium 测试 在前 4 次测试中,3 次出现以下错误: [test se
我试图在主节点和工作节点之间共享数据库中的随机条目列表(我对共享资源的定义),并使用 pytest-xdist 并行化测试。我的代码遵循以下结构: ## in conftest.py def get_
当我的测试运行器启动时,我想设置一些东西(调整 sys.path,添加一些环境变量,启动一些全局装置)。我可以使用什么钩子(Hook)在生成的每个 xdist 进程中进行这些更改? 我试过重载几个普通
我将 pytest 与 pytest-xdist 一起用于并行测试运行。它似乎不支持在测试运行时将标准输出传递到终端的 -s 选项。有什么办法可以做到这一点?我意识到这可能会导致不同进程的输出在终端中
我有以下目录布局: runner.py lib/ tests/ testsuite1/ testsuite1.py testsuite2/
我正在从 nose 移植一个 ~2000 方法测试套件至 pytest因为 django-nose没有很好地支持并行化。将 Nose 换成 pytest 似乎工作得很好,并且在添加 python_fi
想象一下,我有可以安全并行运行的 test/unit/... 和尚不能并行运行的 test/function/... . 有没有一种简单的方法可以说服 pytest 按顺序运行功能?考虑到我们正在讨论
我有一个简单的测试。 def test_sample(str): print str 并使用 pytest_generate_tests() 例如 def pytest_generate_te
我正在使用日志记录模块打印到标准输出。当我使用 pytest-xdist 运行测试时,很难理解什么消息对应于worker 是否可以将 xdist 网关编号打印到 stdout 中的每一行? 我现在拥有
我有几千个测试要并行运行。测试都是编译后的二进制文件,返回代码为 0 或非零(失败时)。它们的一些未知子集尝试使用相同的资源(文件、端口等)。每个测试都假定它是独立运行的,并且只在资源不可用时报告失败
我正在运行 Astropy tests in parallel使用 python setup.py test --parallel N我的 Macbook 上的选项(4 个真实内核,固态磁盘),它使用
有没有人注意到 pytest 和 xdist 的以下奇怪行为。 当尝试运行使用一些随机选择的值进行参数化的测试时,测试实际上并未运行。如果不使用 xdist,则执行相同的测试没有任何问题。 可以使用以
我是一名优秀的程序员,十分优秀!