PyTest-将每个测试作为多处理流程运行

lyn*_*hey 3 python selenium multithreading pytest python-3.x

我正在使用pytest来运行测试,并测试我的Web应用程序。我的测试文件看起来像

def test_logins():
    # do stuff

def test_signups():
    # do stuff

def testing_posting():
    # do stuff
Run Code Online (Sandbox Code Playgroud)

它们大约有20个,其中许多具有恒定时间运行或依赖于外部HTTP请求的元素,因此,如果我可以让pytest启动20个不同的mutliprocessing,这似乎会导致测试速度大大提高。流程(每个测试一个)来运行每个测试功能。这可能/合理/建议吗?

我调查了xdist,但将测试进行了拆分,以便根据我的计算机上的内核数量运行这些测试不是我想要的。

同样在相关的情况下,大部分测试是使用python的请求库完成的(尽管最终它们将移至selenium)

Ana*_*kov 5

我仍然建议使用pytest-xdist。而且,正如您已经提到的那样,由于您的测试主要是通过网络IO进行的,因此可以使用比内核更多的并行进程(例如20个)来启动pytest,这仍然是有益的,因为GIL不会阻止加速从并行化。

因此,您可以像这样运行它:

py.test tests -n<number>
Run Code Online (Sandbox Code Playgroud)

xdist的另一个好处是,您可以轻松地将测试运行轻松扩展到多台计算机。为了在多台机器之间更轻松地扩展,pytest-cloud可以提供很大帮助。