前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest(十六)多进程并发执行

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

作者头像
雷子
发布2022-04-06 08:39:16
1.8K0
发布2022-04-06 08:39:16
举报
文章被收录于专栏:雷子说测试开发

系列分享

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版本。大家在看到学习资料后,一定要用自己的版本测试下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档