首页 > 其他分享 >pytest--xdist分布式运行

pytest--xdist分布式运行

时间:2023-03-27 18:15:13浏览次数:35  
标签:-- xdist 用例 pytest time test 执行

前言

当测试用例数量上去以后,执行一遍所有测试用例,那么执行速度就会比较慢,除了多线程来提高效率外,pytest也提供pytest-xdist插件来做分布式执行,从而减少测试时间,它属于进程级别的并发

 

pytest-xidst安装

可以直接通过pip进行安装

pip install pytest-xdist

如果一直下载失败,推荐使用国内镜像源下载

pip install pytest-xdist -i http://pypi.douban.com/simple/

分布式测试用例的设计原则:
1、独立运行:用例之间互相独立,并且没有依赖关系,还可以完全独立运行
2、随机执行,用例执行不强制按顺序执行,支持顺序执行或随机执行
3、不影响其他用例:每个用例都能重复运行,运行结果不会影响其他用例

 

使用方法

1、设置运行cpu核数

pytest -n x

-n x:n:设置cpu核数参数 ,x:cpu核数个数(也可以设置auto,表示使用所有cpu核数运行,但此运行方式cpu使用率会占用很高)

直接上例子,对比运行时间能够提升多少

import time


def test_01():
    time.sleep(2)
    print('用例一执行')

def test_02():
    time.sleep(2)
    print('用例二执行')

def test_03():
    time.sleep(2)
    print('用例三执行')

def test_04():
    time.sleep(2)
    print('用例四执行')

pytest test_xdist.py -sv输出结果:

 

 单进程4个测试用例执行时间为8.07s

 

那么接下来使用pytest test_xdist.py -n auto输出结果:

 

 gw0、1、2、3表示用例执行的进程编号,这表示4个测试用分别在4个子进程中并行运行,性能为4.92s,可以看到远比单进程运行要效率很多,快整整3s左右

 

2、调试代码

pytest-xdist插件也提供--looponfail参数来帮助调试测试用例的代码,它会自动监视代码的修改。当执行到错误用例时,它会停住,并打印出错误用例和错误代码行数,等待你修改代码完毕后,会单独运行这个错误用例,如果错误用例执行通过后,会再次运行所有测试用例。所有用例都测试通过后,需要手动ctrl+c退出

示例代码:

import time


def test_01():
    time.sleep(2)
    print('用例一执行')

def test_02():
    time.sleep(2)
    print('用例二执行')

def test_03():
    time.sleep(2)
    assert 1 == 2 
    print('用例三执行')

def test_04():
    time.sleep(2)
    print('用例四执行')

cmd窗口当前路径下执行pytest test_xdist.py -sv --looponfail,输出结果如下:

 

 出现waiting for changes就表示执行已经暂停住,这时候就可以对代码内容进行修改,这里报错提示test_03的断言错误,那么将assert 1 == 2 改为正确的 assert 2 == 2。当你修改完成后,重新回到cmd窗口才会开始执行,所以并不需要那么急地修改代码,pytest监测到代码内容已经更改,就会继续执行,将fail的测试用例重新运行,运行通过后,再将所有测试用例执行

 

 

总结

pytest-xdist插件帮助我们大大提高了测试用例执行效率,也提供更方便的代码调试参数,是一个功能十分强大的pytest的插件

 

标签:--,xdist,用例,pytest,time,test,执行
From: https://www.cnblogs.com/trystudy/p/17262435.html

相关文章

  • 实验二 字符串和列表
    任务一源代码:1#字符串的基础操作2#课堂上没有演示的一些方法34x='nbaFIFA'5print(x.upper())#字符串转大写6print(x.lower())#字符串转小......
  • git提交时剔除不需要提交的文件方法
    在根目录新建一个文件.gitignore文件  在文件内写上不需要提交的文件名称保存后即可 ......
  • Sass
    SassSass变量变量用于存储一些信息,它可以重复使用。Sass变量可以存储以下信息:●字符串●数字●颜色值●布尔值●列表●null值Sass变量使用$符号:$variable......
  • Linux学习第三课-文件基本属性
    1.文件基本属性​ 在Linux中,可以使用ll或ls-l命令来显示一个目录或文件的属性以及所属的用户和组​ 如在根目录下:​ 如上图所示,每列的含义为:第一列表示属性;第......
  • 实验2 字符串和列表
    一、实验任务1.实验任务1程序源代码:x='nbaFIFA'print(x.upper())print(x.lower())print(x.swapcase())print()x='abc'print(x.center(10,"*"))print(x.ljus......
  • 11、短语
    2023/3/27短语theNorthAtlantic,北大西洋fromendtoend,从头到尾、从这端到另一端haveeffecton...,对······产生影响theglobalclimate,全球气候powerpl......
  • Grainger 固安捷 EDI 需求分析
    Grainger固安捷是全球领先的设备维护、修理和MRO工业品分销商,成立于1927年,由威廉·W·格兰杰(WilliamW. Grainger)在芝加哥创立。他创建这家公司的目的是为了让消费者能......
  • PHP 图片的合并,微信小程序码合并,文字合并
    //业务需求:我们需要一个微信小程序码,但是是需要提供给别人扫码的但是只有一个纯粹的小程序码是不好看的,所以需要推广的海报图片。再结合文字 最终效果  准备工作......
  • ubantu 避坑
    1、无法安装ssh下列软件包有为满足的依赖关系:openssh-server:依赖:openssh-client(=1:7.6p1-4)依赖:openssh-sftp-server但是它将不会被安装推荐:ssh-import-id但是它将不会被安......
  • 服务器上导入文件夹中的模块错误
    importsysimportossys.path.append(os.path.dirname(sys.path[0]))可以在自己代码的顶端加入以上代码 来源:(13条消息)python服务器运行代码报错ModuleNot......