Pytest(十六)多进程并发执行

2022-04-06 08:39:16 浏览数 (1)

系列分享

Pytest系列(一)初次了解

Pytest(二)执行规则以及编写执行多条用例

Pytest(三)Pytest执行命令

Pytest(四)Pytest断言

Pytest(五)标记函数

Pytest(六)跳过测试

Pytest(七) pytest之参数化

Pytest(八) pytest Fixture(一)

Pytest(九) pytest Fixture(二)

Pytest(十) pytest Fixture(三)

Pytest(十一) pytest ini文件

Pytest(十二) Pytest产生测试报告

Pytest(十三)durations统计用例运行时间

Pytest(十四)用例执行顺序

Pytest(十五)重试机制


在用例执行的过程中,想要用多进程并发执行测试用例,如何实现呢,其实很简单,pytest有对应的模块,安装方式

代码语言:javascript复制
 pip install pytest-xdist

安装成功后如下

如何使用呢?

代码语言:javascript复制
pytest test_11.py -n 2 -s

结果

那么还可以跟什么参数呢?

-n 2 表示以两个进程的方式并行执行自动化测试用例,默认以用例层面进行分配(用例之间不能有依赖关系)

-n auto 按照cpu核数自动生成多个进程

--dist=loadfile 改变分布式执行用例时的分配模式,按照测试文件进行分配(测试文件之间不能有依赖关系)

--dist=loadscope 按照模块分配(测试模块之间不能有依赖关系)

当使用-n auto 我们可以看到

会自动划分。

有一个问题,多进程执行执行效率有什么影响吗?可以看下

代码语言:javascript复制
def test_api():
  time.sleep(1)
  assert 2 == 2
def test_api1():
  time.sleep(1)  
  assert 2 == 2
def test_api3():
  time.sleep(1)
  assert 2 == 2
def test_api4():
  time.sleep(1)
  assert 2 == 2def test_api():
  time.sleep(1)
 

用并发执行的结果

不用并发执行结果如下

可以看到,执行差了2倍,但是也并不是所有的都能有提升的。

在执行的时候,如果有依赖的时候,在选择并行的时候,一定要注意下避免数据的依赖下的case之间的执行。

另外还有一个方面要注意,看下演示的代码

代码语言:javascript复制

@pytest.mark.skipif(2==2,reason='2==2')
def test_api():
  time.sleep(1)
  assert 2 == 2
@pytest.mark.skipif(2==2,reason='2==2')
def test_api1():
  time.sleep(1)  
  assert 2 == 2
def test_api3():
  time.sleep(1)
  assert 2 == 2
def test_api4():
  time.sleep(1)
  assert 2 == 2

选择并发执行看下:

网上资料有说:xdist和skipif方法不兼容。经过测试,互相存在下执行可以正常进行,用的pytest版本。大家在看到学习资料后,一定要用自己的版本测试下。

0 人点赞