想要使用多个CPU核心来进行测试,可以使用 -n 参数( 或者 --numprocesses)
(使用8个核心来跑测试用例)
|---|---------------|
| 1 | pytest -n 8
|
使用 -n auto
参数可以利用电脑的所有核心来跑测试用例
测试时使用的算法可以根据--dist
命令参数定制:
--dist load
(默认选项):给每个CPU核心随机分配用例,不保证执行顺序。--dist loadscope
:对于测试函数,测试按模块分组,对于测试方法,测试按类分组。每组作为一个整体分配给可用的worker。这保证了组中的所有测试都在同一进程中运行。如果的模块级或类级fixtures,这将非常有用。按类分组优先于按模块分组。--dist loadfile
: 测试用例按其所在文件分组。每组作为一个整体分配给可用的worker。这保证了文件中的所有测试都在同一个辅助进程中运行。--dist loadgroup
: 测试按xdist_group标记分组。每组作为一个整体分配给可用的执行器。这保证了具有相同xdist_ group名称的所有测试都在同一个worker中运行。
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 | @pytest``.mark.xdist_group(name``=``"group1"``)
def
test1():
``pass
class
TestA:
``@pytest``.mark.xdist_group(``"group1"``)
``def
test2():
``pass``-
|
这将确保test1和TestA::test2将在同一个worker中运行。没有xdist_ group标记的测试在--dist=load模式下正常运行。
--dist no
:正常的pytest执行模式,一次运行一个测试(完全没有分发)。
例子:
项目目录结构

xdist_test.py
|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import
logging
import
pytest
class
TestXdist(``object``):
``@pytest``.mark.xdist_group(``"group1"``)
``def
test_one(``self``):
``logging.info(``"1"``)
``assert
True
``@pytest``.mark.xdist_group(``"group1"``)
``def
test_two(``self``):
``logging.info(``"2"``)
``assert
True
``@pytest``.mark.xdist_group(``"group2"``)
``def
test_three(``self``):
``logging.info(``"3"``)
``assert
True
``@pytest``.mark.xdist_group(``"group2"``)
``def
test_four(``self``):
``logging.info(``"4"``)
``assert
True
|
xdist_dummy_test.py
|-------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import
logging
import
pytest
class
TestXdist(``object``):
``@pytest``.mark.run(order``=``1``)
``@pytest``.mark.xdist_group(``"group1"``)
``def
test_dummy_one(``self``):
``logging.info(``"d1"``)
``assert
True
``@pytest``.mark.xdist_group(``"group1"``)
``@pytest``.mark.run(order``=``2``)
``def
test_dummy_two(``self``):
``logging.info(``"d2"``)
``assert
True
``@pytest``.mark.run(order``=``3``)
``@pytest``.mark.xdist_group(``"group2"``)
``def
test_dummy_three(``self``):
``logging.info(``"d3"``)
``assert
True
``@pytest``.mark.xdist_group(``"group2"``)
``@pytest``.mark.run(order``=``4``)
``def
test_dummy_four(``self``):
``logging.info(``"d4"``)
``assert
True
|
|-------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | (venv) ➜ pytest pytest ``-``n auto ``-``-``dist loadscope
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
test session starts ``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
platform darwin ``-``-
Python ``3.8``.``9``, pytest``-``7.1``.``2``, pluggy``-``1.0``.``0
rootdir: ``/``Users``/``spock``/``PycharmProjects``/``pytest, configfile: pytest.ini
plugins: xdist``-``2.5``.``0``, forked``-``1.4``.``0``, ordering``-``0.6
[gw0] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw1] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw2] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw3] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw4] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw5] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw6] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw7] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
gw0 [``8``] ``/
gw1 [``8``] ``/
gw2 [``8``] ``/
gw3 [``8``] ``/
gw4 [``8``] ``/
gw5 [``8``] ``/
gw6 [``8``] ``/
gw7 [``8``]
scheduling tests via LoadScopeScheduling
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one
test``/``xdist_test.py::TestXdist::test_one
[gw0] [ ``12``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one
[gw1] [ ``25``%``] PASSED test``/``xdist_test.py::TestXdist::test_one
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two
test``/``xdist_test.py::TestXdist::test_two
[gw1] [ ``37``%``] PASSED test``/``xdist_test.py::TestXdist::test_two
test``/``xdist_test.py::TestXdist::test_three
[gw0] [ ``50``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three
[gw1] [ ``62``%``] PASSED test``/``xdist_test.py::TestXdist::test_three
test``/``xdist_test.py::TestXdist::test_four
[gw0] [ ``75``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four
[gw1] [ ``87``%``] PASSED test``/``xdist_test.py::TestXdist::test_four
[gw0] [``100``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
8
passed ``in
0.40s
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
|
|----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | (venv) ➜ pytest pytest ``-``n auto ``-``-``dist loadfile
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
test session starts ``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
platform darwin ``-``-
Python ``3.8``.``9``, pytest``-``7.1``.``2``, pluggy``-``1.0``.``0
rootdir: ``/``Users``/``spock``/``PycharmProjects``/``pytest, configfile: pytest.ini
plugins: xdist``-``2.5``.``0``, forked``-``1.4``.``0``, ordering``-``0.6
[gw0] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw1] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw2] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw3] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw4] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw5] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw6] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw7] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
gw0 [``8``] ``/
gw1 [``8``] ``/
gw2 [``8``] ``/
gw3 [``8``] ``/
gw4 [``8``] ``/
gw5 [``8``] ``/
gw6 [``8``] ``/
gw7 [``8``]
scheduling tests via LoadFileScheduling
test``/``xdist_test.py::TestXdist::test_one
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one
[gw1] [ ``12``%``] PASSED test``/``xdist_test.py::TestXdist::test_one
[gw0] [ ``25``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one
test``/``xdist_test.py::TestXdist::test_two
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two
[gw1] [ ``37``%``] PASSED test``/``xdist_test.py::TestXdist::test_two
[gw0] [ ``50``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three
test``/``xdist_test.py::TestXdist::test_three
[gw1] [ ``62``%``] PASSED test``/``xdist_test.py::TestXdist::test_three
[gw0] [ ``75``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four
test``/``xdist_test.py::TestXdist::test_four
[gw1] [ ``87``%``] PASSED test``/``xdist_test.py::TestXdist::test_four
[gw0] [``100``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
8
passed ``in
0.38s
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
|
|----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | (venv) ➜ pytest pytest ``-``n auto ``-``-``dist loadgroup
=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
test session starts ``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=``=
platform darwin ``-``-
Python ``3.8``.``9``, pytest``-``7.1``.``2``, pluggy``-``1.0``.``0
rootdir: ``/``Users``/``spock``/``PycharmProjects``/``pytest, configfile: pytest.ini
plugins: xdist``-``2.5``.``0``, forked``-``1.4``.``0``, ordering``-``0.6
[gw0] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw1] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw2] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw3] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw4] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw5] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw6] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
[gw7] Python ``3.8``.``9
(default, May ``17
2022``, ``12``:``55``:``41``) ``-``-
[Clang ``13.1``.``6
(clang``-``1316.0``.``21.2``.``5``)]
gw0 [``8``] ``/
gw1 [``8``] ``/
gw2 [``8``] ``/
gw3 [``8``] ``/
gw4 [``8``] ``/
gw5 [``8``] ``/
gw6 [``8``] ``/
gw7 [``8``]
scheduling tests via LoadGroupScheduling
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three@group2
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one@group1
[gw1] [ ``12``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_three@group2
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four@group2
[gw0] [ ``25``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_one@group1
[gw1] [ ``37``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_four@group2
test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two@group1
[gw0] [ ``50``%``] PASSED test2``/``xdist_dummy_test.py::TestXdist::test_dummy_two@group1
test``/``xdist_test.py::TestXdist::test_three@group2
[gw1] [ ``62``%``] PASSED test``/``xdist_test.py::TestXdist::test_three@group2
test``/``xdist_test.py::TestXdist::test_four@group2
[gw1] [ ``75``%``] PASSED test``/``xdist_test.py::TestXdist::test_four@group2
test``/``xdist_test.py::TestXdist::test_one@group1
[gw0] [ ``87``%``] PASSED test``/``xdist_test.py::TestXdist::test_one@group1
test``/``xdist_test.py::TestXdist::test_two@group1
[gw0] [``100``%``] PASSED test``/``xdist_test.py::TestXdist::test_two@group1
|
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

