问题标签 [pytest-xdist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
211 浏览

python - 如何在单个 pytest-xdist 运行中从参数化测试函数中收集值

使用 pytest-xdist 我运行了一个参数化的测试函数,该函数有一个我感兴趣的变量。我想将变量的值存储在一个单独的对象中,然后使用该对象来编写测试报告。

我尝试使用一个会话范围夹具,它应该在所有测试完成并且结果对象变得可用后立即运行一次。乍一看,它确实工作得很好,但我发现 pytest-xdist没有内置支持来确保会话范围的夹具只执行一次。这意味着我的存储对象很可能从头开始被覆盖 N 次,其中 N 是共享我的测试的 pytest-xdist 工作人员的数量。这不是可取的行为。

一个简短的片段来说明这个问题

我运行它pytest -n auto test_x.py

有没有另一种方法来收集result这种顺序多处理测试调用中的所有值?对于此事,我将不胜感激。

Edited

昨天我找到了一个很有前途的 pytest_harvest,但还没有成功。只要不pytest-xdist参与,一切都会顺利。美妙的夹具按预期工作,存储需要的值并在它全部停止时将其results_bag返回到会话结果挂钩中。pytest_sessionfinish但是,当您添加 xdist 工作人员时,突然根本没有会话结果(尽管它确实返回了一个空字典)。

pytest -sv test_parallel.py-> 好的

pytest -sv -n auto test_parallel.py-> 一个空的 OrderedDict

任何想法如何使它体面地工作?

0 投票
0 回答
160 浏览

pytest - 我们可以并行运行多个标记吗?

我有一个 python 脚本,并说我有 10 个测试用例。5个是marker1的一部分,另外5个是marker2的一部分。我想并行启动 2 个线程,以便 marker1 测试可以在 1 个线程中运行,而 marker2 测试可以在另一个线程中运行。而且我的执行时间减少了。

如果使用标记无法解决问题,请建议我如何并行运行 5 个链接测试和另外 5 个并行测试。

0 投票
0 回答
645 浏览

python - 在远程机器上运行测试并使用 pytest 捕获输出

如果我在本地机器上执行测试,我可以看到测试用例的控制台输出。但是,在使用 pytest 在远程机器上运行测试时,不会捕获控制台输出。这是示例测试用例 -

test_sample.py

pytest.ini

~/.ssh/config

Pytest 命令在本地 VM 上执行测试

控制台输出

Pytest 命令在远程 VM ubuntu 上执行测试

控制台输出

**我在本地和远程 vm 上的 pytest 版本 ==> **

我已经验证了最新的 pytest-xdist https://github.com/pytest-dev/pytest/issues/680支持--capture / -s选项

不需要在不捕获输出的情况下应用以下解决方法
pytest + xdist?

0 投票
0 回答
88 浏览

python - Pytest,更改动态传递给标记的计数器

我正在从 Python 文件中读取我的测试数据,如下所示。

//testdata.py -- 它是一个集合列表。

现在我将此测试数据用作 pytest 测试文件的一部分。

现在当我打印开始时,它会不断地改变它的值。但是当我尝试检索 pytest 结果时,我仍然不断得到 start = 0,因为我的测试用例 ID 没有被正确记录。

我也可以吗

  1. 从函数内部传递标记。
  2. 或者有没有办法在这个例子中动态改变开始计数?

PS 这是我目前能够存储测试数据的最佳方式。

这是我定义 testcaseid.marktc 的方式。// testrailthingy.py

0 投票
0 回答
126 浏览

python - 减少 python 测试阶段的管道执行时间

感谢您的支持,因为我需要减少运行 python 测试用例的管道执行时间

通过我的本地机器需要 3 分钟或更短时间,但通过管道机器需要 8 分钟或更长时间

本地机器

处理器 Intel(R) Core(TM) i7-4510U CPU @ 2.00GHz

内存 16GiB 系统内存

Cloudbuild 流水线机器

8 个 vCPU 8 个 Gib RAM

我使用下面的命令来执行测试用例,但它并没有什么不同,所以我认为测试工作人员不能并行工作,8 个 cpu 内核没有很好地使用或者 docker-compose 步骤没有使用管道机器的全部功能。

我的 docker-compose 文件

我的云构建文件

0 投票
1 回答
236 浏览

pytest - 如何仅在使用过滤器调用 pytest 时禁用 pytest xdist?

当我运行所有 pytests 时,我确实希望充分受益于将负载分散到所有 m 个核心 (xdist) 上,但是当我运行其中的一个子集时,几乎总是出于开发/调试目的,在这种情况下,我确实想避免xdist 为:

  • 较慢的开始时间
  • 无法使用 pdb 调试

例如:调用pytest -k foo应该有效地运行pytest -n0 -k foo。请记住,不带参数调用 pytest 不应影响 -n 值。

0 投票
0 回答
95 浏览

python - 跨多个设备的 pytest 并行测试

我有一个测试类,我想用它来测试多个设备。我正在为设备使用参数化,并使用 pytest-xdist 来并行运行它们。我遇到的问题是负载平衡可以在正在运行测试的设备上启动新测试,导致新测试失败。有没有办法让每个工作人员从 xdist 开始只使用其中一个参数运行测试,例如 d1 的 worker1 运行测试,然后为其他工作人员和设备退出相同的测试?

例子:

我的 pytest 命令是 pytest -n4. 虽然 test_1 在 d1 上运行,但在 d1 上无法执行其他任何操作,但测试需要按此顺序运行,这也是因为硬件 d4 比其他 3 个设备需要更长的时间来运行某些测试。例如,worker 4 使用 d4 启动 test_1,然后另一个 worker 完成其测试并使用 d4 启动 test_2,导致 test_2 失败。我曾尝试将 --dist 命令与 loadscope 一起使用。

我想到的唯一其他解决方案是将每个设备分成一个单独的测试文件,但这似乎是太多重复的代码。

提前致谢。

0 投票
2 回答
759 浏览

pytest - 如何解决在 bitbucket 管道中通过 xdist 并行运行 pytest 的错误

我们在 bitbucket 管道中为我们的 python 存储库执行单元测试。最近我们开始使用 pytest-xdist ( https://pypi.org/project/pytest-xdist/coverage run -m pytest -n auto ) 包,并在通过命令在本地运行时成功地并行运行了我们的单元测试。这会在我们本地机器上的所有可用 CPU 上执行所有单元测试。但是,当我们通过 bitbucket 管道使用相同的命令运行测试时,我们会遇到以下异常。关于如何解决这个问题有什么建议吗?

提前感谢您的帮助!

0 投票
0 回答
38 浏览

pytest - python pytest - 如何修改测试方法中的测试标记?

我在 pytest 中进行了测试并添加了一些标记,例如:'@pytest.mark.C123'。但根据测试结果,我想将标记从“C123”编辑为“C124”。这可能吗。

0 投票
0 回答
166 浏览

python - pytest-xdist:如何在执行测试方法之前执行方法(我在其中为该文件中的所有测试初始化​​ DB 模拟)

我有一个曾经用 pytest 执行的测试套件,我使用before_all_tests(request)每个测试文件中的方法来初始化这些测试的数据库模型。

我想用来pytest-xdist并行运行它们,但before_all_tests(request)如果我运行pytest -n X(并行)则不会被执行。

现在我不知道如何重写我的所有代码,以便我只能初始化正在执行的测试的模拟:(

我使用标记对测试进行分类,所以有时我只在一个类别下运行测试,或者只是在其中一组。我不想初始化所有测试文件的模拟,因为那时并非所有测试文件都会执行。

有谁能够帮我?如有必要,我可以发布一些代码。

提前致谢!!