问题标签 [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 回答
204 浏览

selenium - 如何使用 xdist 运行 pytest-selenium 并使用 cli arg 驱动程序?

我正在尝试使用 xdist 并行运行多个测试,并根据用户的命令行参数(例如 --driver Remote/Chrome/etc)确定 webdriver

最终,我试图把它扔到 docker 中,以便它可以在 gitlab 管道中使用。

这是我尝试过的..

conftest.py

test_login.py

这给了我错误..

如果我尝试从 setup 夹具中删除范围,我会从 conftest.py 收到以下错误

以前在没有 xdist 集合的情况下执行此方法。如果可能的话,我该如何完成这项工作,我做错了什么?

0 投票
0 回答
544 浏览

python-3.x - Pytest/xdist 中的序列化问题

键错误:

- 我在并行运行 UI 测试时遇到了这个问题。我想在 3 chrome 驱动程序中并行运行测试用例。这是我所做的:

我遇到了上述错误。如果有人遇到同样的问题并解决它,将不胜感激。

0 投票
0 回答
378 浏览

python - xdist 在 pytest 中将对象作为参数传递时显示错误

0 投票
1 回答
157 浏览

python - 使用 Pytest,我找不到同时运行 2 个测试类的方法,而每个类都有多个测试?

我正在使用 Pytest,并具有以下测试结构:

类A.py

---------------test_a

---------------test_b

---------------test_c

并且

B类.py

---------------test_d

---------------test_e

---------------test_f

我正在通过终端命令运行我的测试(即:pytest -v -s ClassA.py)

我的问题:有没有办法并行运行 ClassA 和 ClassB(你可能会说 2 个实例),同时保持每个类的顺序 - 分别?这意味着我希望 ClassA 的所有测试都将在第一个浏览器实例上运行,而 ClassB 的所有测试都将在不同的实例上运行。

我也熟悉使用“pytest-xdist”插件执行并行测试。但是一旦使用它,ClassA 和 ClassB 中的测试用例就会以混合顺序执行,所以这对我不利。

已编辑: 我的主要目的是避免在 test_b 的单独浏览器实例上运行 test_a。我希望每个类的测试在同一个浏览器实例上运行

0 投票
0 回答
96 浏览

python - Selenium:并行运行测试套件(不是跨浏览器测试)

我想并行运行一个硒测试套件。(或分布式模式)

(套件中有 30 个测试,希望 3 个线程并行运行,完成后总共执行 30 个测试,没有重复测试)我只想针对 Chrome 浏览器进行测试。我不想在其他不同的浏览器上进行测试。将希望在本地和 CI 管道中运行。

我正在使用 Python + Pytest 和可能的 xdist(3 个线程)。是否只是为每个进程实例化一个 webdriver 实例,它们可以独立并行工作而没有争用?将 selenium 网格与具有相同配置的三个节点一起使用是否有意义。(这是否矫枉过正)这是否意味着每个节点将运行 30 个测试?还是会导致每个节点运行 10 次测试?

最好的方法是什么?提前致谢。

0 投票
1 回答
739 浏览

python - 当测试还包含多处理时,使用 xdist 与工人(例如 -n 1)进行 pytest

我在用着

  • 蟒蛇 3.6
  • pytest 6.1.1
  • pytest xdist 2.1.0
  • Pycharm 2018.3.7

使用 HTML 插件进行报告以及自定义报告

我正在通过 pycharm >pytest 运行自动化测试,参数如下: --html=../../reports/report.html --self-contained-html -n 1 -k test_instalment_mtn_ng_unified_eco

为了在硒期间捕获屏幕,我正在使用多重处理,它开始捕获,并继续测试

如果我没有在参数中使用-n 1(表示没有工人)-测试成功通过(包括屏幕截图)

如果我使用 -n 1 (表示 1 个工人)pytest crush 并出现以下错误:

google了2天,没有找到可能是什么原因附上部分测试代码提前谢谢

0 投票
0 回答
96 浏览

python - 使用 pytest 和 xdist 访问 CLI 参数

我有一个文件 data.py ,我根据环境获取每个测试中使用的数据,我使用 sys.argv 获取环境,因为它是在 CLI 中指定的。

如果我用 pytest 运行它,它工作得很好,但是当我尝试用 xdist (-nx) 运行 pararel 测试时,我得到一个错误,因为 sys.argv 只返回“-c”,我不能得到 environmet 参数。

我读过这篇文章:https ://pypi.org/project/pytest-xdist/

从 worker 中的主节点访问 sys.argv 要访问传递给主节点命令行的 sys.argv,请使用 request.config.workerinput["mainargv"]。

但我的问题是,使用该选项我需要将其作为夹具发送,并且我不能在 data.py 中使用夹具,因为没有类,只是一个包含数据的文件。

当我使用 xdist -n 运行并行测试时,如何从 data.py 中的 CLI 获取环境参数?

0 投票
0 回答
46 浏览

python - pytest-xdist 管理文件顺序

我有 10 个测试文件:

sc0 - 运行 4 分钟

sc1 - 运行 6 分钟

sc2 - 运行 6 分钟

sc3 - 运行 25 分钟

sc4 - 运行 25 分钟

sc5 - 运行 5 分钟

sc6 - 运行 5 分钟

sc7 - 运行 5 分钟

sc8 - 运行 6 分钟

sc9 - 运行 33 分钟

我使用下面的命令来并行运行测试(每个文件应该按顺序运行)

我看到工作人员根据文件名顺序运行测试,总执行时间为 1 小时

分布是:

worker0 - sc0 (4m), sc3 (25m) 和 sc9 (33m) = 1h

worker1 - sc1 (6m), sc4 (25m) = 31m

worker2 - sc2 (6m), sc5 (5m), sc6 (5m), sc7 (5m), sc8 (6m) = 27m

但如果我能够控制工作人员拆分决定选择哪个文件,我可以节省 20m 的测试执行时间

worker0 - sc3 (25m), sc0 (4m), sc2 (6m), sc7 (5m) = 40m

worker1 - sc4 (25m), sc1 (6m), sc5 (5m), sc8 (6m) = 42m

worker2 - sc9 (33m), sc6 (5m) = 38m

如何控制 pytest-xdist 插件的测试文件分发顺序?(我不想重命名文件名)

0 投票
1 回答
39 浏览

python - 延迟语句执行和测试结果不保持测试

(我是非技术QA,请原谅我的技术无知)

图书馆:

  1. pytest ==6.2.4
  2. mysql-connector-python ==8.0.23
  3. ==3.141.0
  4. psycopg2 ==2.8.6
  5. 断言==1.1
  6. 请求==2.25.1
  7. sshtunnel ==0.4.0

(如果它解决了我的问题,我不介意切换到另一个 python 测试框架)

测试执行环境:目前在本地并手动触发。未来,通过 CI 管道。

用例:

我将使用 selenium 运行 E2E 测试,然后在 DB 中检查一些东西。一些检查会立即进行,而一些检查会延迟一些已知的持续时间。

这些检查被延迟,因为被测 API 创建了一个作业,该作业在 20 分钟后执行以在数据库表中插入/更新某些内容。

API 与前端 cookie 紧密耦合,因此无法通过 API 单元/集成测试单独测试此功能。

这些测试与合规性相关,因此不能忽略它们。现在每周手动测试一次。这是一个真正的痛苦......

假设我有 35 个这样的测试并且每个自动化测试需要等待 20 分钟,那么测试执行的总持续时间非常长。

考虑一个场景:

我的测试文件很少,其中有 5 个测试。在每个测试方法的末尾有 4 个断言。最后 2 个断言需要我在“x”分钟后验证数据库表中的某些内容。对于每种测试方法,最后 2 个断言的等待持续时间可能会有所不同(>=15 分钟),这将是事先知道的。

现在我试过了,

  1. time.sleep(duration) 这只是支撑整个测试。

  2. 即使并发/并行执行也无济于事,因为当它们到达每个测试方法中的最后 2 个断言语句时,它们都必须等待一段时间,并且它只会在给定的时间内停止测试。

  3. 考虑过将 RabbitMQ 与 Celery 一起使用并安排这些断言,但是在执行这些断言时,pytest 会为所有测试分配一个状态:(通过/失败)。因此,如果 test1 被标记为 Pass 并且在 10 分钟后,在执行断言语句后它失败,那么我将无法在 pytest 中更新 test1 的状态。

当前解决方法:

对于每种测试方法,我将所需的 id 存储在一个文件中,并在 30 分钟后手动检查它们。

我有几件事:

如果我能够:

  1. 延迟或计划执行测试方法中的语句。(这样的语句将是测试方法中的最后几条语句)

  2. 保持延迟语句执行完成的测试结果。

  3. 在延迟断言结束后更新此类测试或测试方法的结果。

  4. 在运行并行测试时安排这些延迟语句后,从下一个测试方法开始。(总是理解这样的延迟语句将是测试方法的最后几个语句)

这是可行和可实现的吗?

其他参考:https ://github.com/pytest-dev/pytest/issues/9012#issuecomment-900851702 (我真的没明白)

任何已解决类似问题的参考文档、伪代码、文章、博客将不胜感激。

0 投票
0 回答
43 浏览

selenium - 有没有办法使用 pytest --dist loadfile 和 loadscope 来控制测试的分发方式

我试图弄清楚当我使用 --dist=loadfile 或 loadscope 功能时,是否有一种方法可以控制/理解测试在不同工作人员之间的分布方式。

我的项目结构是

每个测试模块都定义了随机数量的测试。假设我在 tests_b.py 中有一个特定的测试,我想在测试套件结束时运行它并使用@pytest.mark.last.

我还实现了该特定测试中的机制,如果它由工作人员运行并且有其他工作人员在运行其他测试,它将等到它们全部完成。(通过使用 --dashboard 函数更新未测试的测试数量)

我面临的问题是有时测试被随机分配给不同的工作人员,所有其他工作人员都按预期完成了测试,但是在 tests_b.py 上工作的工作人员具有 tearDown()(我希望在最后发生的功能) 运行测试,即使它需要完成其他模块(假设 test_f.py 已分配给同一工作人员)。所有其他工作人员完成运行并关闭。但是这个工作人员运行了 tearDown() ,它等待所有其他测试完成并陷入循环,因为其他未经测试的测试被分配给同一个工作人员并且它们永远不会被执行。有没有办法让这个特定的测试在分配给工作人员的所有测试结束时运行?

谢谢