Pytest 测试用例并行运行与分布式运行
接下来我们来学习在 pytest 中如何并行运行或者分布式运行测试用例。
简介
Pytest 支持测试用例的并行运行和分布式运行,这可以加速测试执行,特别是在大型测试套件中。
Pytest 支持测试用例的并行和分布式执行,这能显著加快测试的执行速度,尤其在测试用例数量较多的情况下。并行和分布式执行的关键作用就是让你能够在多个进程或机器上同时运行多个测试用例,节省时间,提高效率。
使用场景
- 场景 1:
- 测试用例 1000 条,一个用例执行 1 分钟,一个测试人员执行需要 1000 分钟。
- 通常我们会用人力成本换取时间成本,加几个人一起执行,时间就会缩短。
-
如果 10 人一起执行只需要 100 分钟,这就是一种分布式场景。
-
场景 2:
- 假设有个报名系统,对报名总数统计,数据同时进行修改操作的时候有可能出现问题,需要模拟这个场景,需要多用户并发请求数据。
- 解决方案:使用分布式并发执行测试用例。
让我们来看两个实际场景,帮助大家理解何时使用并行和分布式测试。第一个场景是,你有 1000 条测试用例,每个用例执行需要 1 分钟,如果一个人来做,1000 条测试用例就需要 1000 分钟。但是,如果有 10 个人一起执行,时间就缩短到 100 分钟。这个场景中,通过分布式执行来减小执行时间。第二个场景是模拟多用户并发请求,比如你有一个报名系统,假设有很多人同时报名,系统可能会出问题。在这种情况下,我们可以通过并行执行多个测试用例来模拟高并发,测试系统在并发情况下的表现。
使用步骤
- 分布式插件:
pytest-xdist
- 安装及运行:
pip install pytest-xdist
注意:用例多的时候效果明显,多进程并发执行,同时支持
allure
。
要实现分布式测试,我们需要用到一个 pytest 插件,叫做 pytest-xdist。这个插件可以让我们把测试用例分配到多个进程中并行运行。安装插件的命令是 pip install pytest杠xdist。安装后,我们可以用 pytest 杠n auto 命令来启动并行执行。这里的 杠n auto 参数会自动检测你的 CPU 核心数,并根据核心数量来决定开启多少进程。这样,测试就会在多个进程中并行执行,从而提高测试效率。
from time import sleep
def test_foo():
sleep(1)
assert True
def test_bar():
sleep(1)
assert True
def test_bar1():
sleep(1)
assert True
下面是一个简单的示例。每个用例都有一个 sleep(1) 来模拟执行时间。这个示例的重点不是测试用例的内容,而是如何使用 pytest杠xdist 来并行执行这些测试。你可以看到,三个测试用例的执行时间总和是 3 秒,但如果使用并行执行,它们可以同时运行,整体耗时就会大大减少。
执行 pytest -n auto
启用并行测试,它会自动检测计算机的 CPU 核心数量,并根据可用的核心数来并行运行测试用例,以加快测试执行速度。
运行 pytest 杠n auto 后,Pytest 会自动根据你的机器的 CPU 核心数来并行执行测试用例。如果你的电脑有 4 核 CPU,那么 Pytest 会使用 4 个进程来同时执行测试,这样测试的速度会加快。例如,如果你有 100 个测试用例,那么分布式执行可以将执行时间从 1000 分钟缩短到 250 分钟,节省大量时间。
下面来给大家演示一下具体操作。进入项目之后,我们先来安装一下,比如说来执行一下 pipe install,然后拍 test gun try this。好,安装好之后我们进入到 test 词下面,然后来创建一个测试文件,比如说就叫 test 叉disk。然后在这个里面的话,我们也是来准备 3 个测试用例。这个我们就先不指定这个顺序了啊。那准备好三个测试用例之后的话,我们在这个里面给它加上一些这个等待的时间,让它能够这个时间明显一点。好,那么准备好之后,那首先的话我们先进入到这个对应的 task 目录下。好,先来执行一遍拍test。好,执行完了之后我们可以看出来它一共是花了 3.05 秒,那然后的话我们再来执行一下,加上杠 n auto。大家可以看到执行完了之后,我们加上这个插件之后,它就变成了 1.85 秒,时间就快多了。
./assets/Pytest测试用例并行运行与分布式运行.mp4
总结
- 插件使用场景
- 插件使用步骤
总结一下,pytest杠xdist 插件非常适用于大量测试用例的场景,它能显著提高测试效率,尤其是在用例数量多、测试时间长的情况下。使用这个插件,你只需要安装并运行一个命令,就能轻松实现并行和分布式测试,减少测试时间,提升效率。好了,关于测试用例并行执行先介绍这么多。