pytest分布式执行(pytest-xdist)

news2024/9/22 19:30:03

前言

平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟。如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候,
我们会用测试人力成本换取时间成本,这个时候多找个小伙伴把任务分成2部分,于是时间缩减一半。如果是十个人一起执行,1000个用例理论上只需100分钟就能完成,时间缩短到了1/10。大大节省的测试时间,为项目节省了时间成本。

  • pytest 3.6.3
  • pytest-xdist 1.23.2

同样道理,当我们测试用例非常多的时候,一条条执行,很显然会比较慢,那么如何让测试用例并行执行呢,这就是我们接下来要讲的pytest分布式执行插件pytest-xdist

pytest-xdist

cmd里面使用pip安装,目前版本号Version: 1.23.2

pip install pytest-xdist

>pip show pytest-xdist
Name: pytest-xdist
Version: 1.23.2
Summary: pytest xdist plugin for distributed testing and loop-on-failing modes
Home-page: https://github.com/pytest-dev/pytest-xdist
Author: holger krekel and contributors
Author-email: pytest-dev@python.org,holger@merlinux.eu
License: MIT
Location: e:\python36\lib\site-packages
Requires: execnet, pytest-forked, six, pytest

pytest-xdist官网地址:【Home-page: https://github.com/pytest-dev/pytest-xdist】

该pytest-xdist插件扩展了一些独特的测试执行模式pytest:

  • 测试运行并行化:如果有多个CPU或主机,则可以将它们用于组合测试运行。会加快运行速度

  • --looponfail:在子进程中重复运行测试。每次运行之后,pytest会等待,直到项目中的文件发生更改,然后重新运行以前失败的测试。
    重复此过程直到所有测试通过,之后再次执行完整运行。

  • 多平台覆盖:您可以指定不同的Python解释器或不同的平台,并在所有平台上并行运行测试。
    在远程运行测试之前,pytest有效地将您的程序源代码“rsyncs”到远程位置。报告所有测试结果并显示给您的本地终端。您可以指定不同的Python版本和解释器。
    如果您想知道pytest-xdist如何在幕后工作,可以看这里【OVERVIEW】

并行测试

多cpu并行执行用例,直接加个-n参数即可,后面num参数就是并行数量,比如num设置为3

pytest -n 3

运行以下代码,项目结构如下

web_conf_py是项目工程名称
│  conftest.py
│  __init__.py
│              
├─baidu
│  │  conftest.py
│  │  test_1_baidu.py
│  │  test_2.py
│  │  __init__.py 
│          
├─blog
│  │  conftest.py
│  │  test_2_blog.py
│  │  __init__.py      

代码参考:

# web_conf_py/conftest.py
import pytest

@pytest.fixture(scope="session")
def start():
    print("\n打开首页")
    return "yoyo"

# web_conf_py/baidu/conftest.py
import pytest

@pytest.fixture(scope="session")
def open_baidu():
    print("打开百度页面_session")

# web_conf_py/baidu/test_1_baidu.py
import pytest
import time

def test_01(start, open_baidu):
    print("测试用例test_01")
    time.sleep(1)
    assert start == "yoyo"

def test_02(start, open_baidu):
    print("测试用例test_02")
    time.sleep(1)
    assert start == "yoyo"

if __name__ == "__main__":
    pytest.main(["-s", "test_1_baidu.py"])


# web_conf_py/baidu/test_2.py
import pytest
import time

def test_06(start, open_baidu):
    print("测试用例test_01")
    time.sleep(1)
    assert start == "yoyo"
def test_07(start, open_baidu):
    print("测试用例test_02")
    time.sleep(1)
    assert start == "yoyo"

if __name__ == "__main__":
    pytest.main(["-s", "test_2.py"])


# web_conf_py/blog/conftest.py
import pytest

@pytest.fixture(scope="function")
def open_blog():
    print("打开blog页面_function")

# web_conf_py/blog/test_2_blog.py

import pytest
import time
def test_03(start, open_blog):
    print("测试用例test_03")
    time.sleep(1)
    assert start == "yoyo"

def test_04(start, open_blog):
    print("测试用例test_04")
    time.sleep(1)
    assert start == "yoyo"

def test_05(start, open_blog):
    '''跨模块调用baidu模块下的conftest'''
    print("测试用例test_05,跨模块调用baidu")
    time.sleep(1)
    assert start == "yoyo"

if __name__ == "__main__":
    pytest.main(["-s", "test_2_blog.py"])

正常运行需要消耗时间:7.12 seconds

E:\YOYO\web_conf_py>pytest
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py, inifile:
plugins: xdist-1.23.2, metadata-1.7.0, html-1.19.0, forked-0.2
collected 7 items

baidu\test_1_baidu.py ..                                                 [ 28%]
baidu\test_2.py ..                                                       [ 57%]
blog\test_2_blog.py ...                                                  [100%]

========================== 7 passed in 7.12 seconds ===========================

设置并行运行数量为3,消耗时间:3.64 seconds,大大的缩短了用例时间

E:\YOYO\web_conf_py>pytest -n 3
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py, inifile:
plugins: xdist-1.23.2, metadata-1.7.0, html-1.19.0, forked-0.2
gw0 [7] / gw1 [7] / gw2 [7]
scheduling tests via LoadScheduling
.......                                                                  [100%]
========================== 7 passed in 3.64 seconds ===========================

测试报告

使用pytest-xdist插件也能生成html报告,完美支持pytest-html插件

pytest -n 3 --html=report.html --self-contained-html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加密与解密

加密与解密 加密方式分类 加密方式主要分为两种 一种是对称加密一种是非对称加密 对称加密 对称和非对称两种方式主要说的是加密和解密两个过程。 如果对数据用一个钥匙进行了加密,那么, 你想成功读取到这个加密了的数据的话,就必须对这…

任务提醒工具:Gestimer for Mac

Gestimer for Mac是一款运行在mac平台上的任务提醒工具,可以帮助用户快速地创建提醒事项,提醒用户完成重要的任务。它采用了简单的手势操作,让用户可以更加快速地创建和管理提醒事项,提高了工作效率。 Gestimer是一款美丽的菜单栏…

Win10下Docker Desktop+k8s安装

一、安装docker 安装好了docker环境,必须是desktop 版本,本例子就是以docker decktop版本为基本讲解的 具体docker的安装方法如下 进入 https://www.docker.com/get-started 点击下载就是 双击“Docker Desktop Installer.exe”安装docker desktop&a…

什么是UN38.3/UN38.3/MSDS+货物运输鉴定报告是什么?怎么做?

一:什么是UN38.3? UN38.3是指在联合国针对危险品运输专门制定的《联合国危险物品运输试验和标准手册》的第3部分38.3款,简称UN38.3。 据国际航协《危险物品规则》的相关规定,对适用于包括但不限于单独或与设备一起运输的属可充电型锂电池的手…

JS逆向 -- 某房登录加密分析

一、输入账号密码,点击登录 账号:15836353612 密码:123456 二、F12打开开发者工具,抓包分析,j_password被加密了 三、全局搜索j_password,发现就一个JS文件 四、进入JS文件,局部搜索&#xff0…

励志长篇小说《周兴和》书连载之一地窖出生的孩子

第一章 苦 难 岁 月 人,离开母体一来到这个陌生的世界,或许由于胆怯,或许由于惶恐,或许由于焦虑,面对即将走过的人生,无一例外地都是嗷嗷大哭。人生美好,但人生无常。无论帝王或是庶民&#x…

使用chroot定制系统

假设下载的桌面系统为ubuntu.iso。 一、进入iso并安装软件包 首先创建一个目录,如my-ubuntu,然后将ubuntu.iso挂载到这个目录上,或者不用挂载,直接解压也行,总之要能进入到iso里面去: sudo mount -o loop…

2023年宜昌市中职组“网络安全”赛项竞赛任务书-2

2023年宜昌市中职组“网络安全”赛项 竞赛任务书-2 一、竞赛时间 总计:180分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 100分钟 700分 任务二 Linux操作系统渗透测试…

【三十天精通Vue 3】第三十天 Vue 3中的Nuxt.js框架详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Nuxt.js框架详解1.1 什么是Nuxt.js框架1.2 Nuxt.js的优点和特点1.3 Nuxt.js与Vue.js的关系二、Nuxt.js项目的搭建2.1 安…

【三维CAD软件】上海道宁为您带来国际一流的国产自主可控的三维CAD软件——天工CAD

天工CAD©融合了 新迪数字收购的 国际一流三维CAD软件技术和 十几年CAD软件研发积累 是一款国产自主可控的三维CAD软件 产品成熟度和技术能力比肩国际先进水平 满足工业企业研发设计需求 软件功能强大、运行稳定、 易学易用、兼容性强 可以显著提升产品设计质量和效…

k8s pv pvc的使用

k8s pv pvc的使用 安装nfs服务器 yum install rpcbind nfs-utils -y systemctl enable rpcbind systemctl enable nfs systemctl start rpcbind systemctl start nfsmkdir -p /root/data/sc-data [rootmaster sc-data]# cat /etc/exports /root/data/sc-data 192.168.1.0/24(…

搜索、添加、删除均为O(logn)的数据结构——跳表

文章目录 有序数组和链表的对比有序数组有序链表 跳表跳表的搜索跳表的插入跳表的删除 跳表完整Java实现代码(包含上面介绍的所有功能模块) 有序数组和链表的对比 有序数组 有序数组支持高效随机访问,可以使用二分查找使得查找的时间复杂度…

SEO外包是为了省钱还是为了更好的效果呢?我们的探讨!

SEO是指优化网站以获得更高的自然搜索引擎排名的一系列技术和方法,它可以提高网站的可见性、流量和收入。随着互联网的不断发展,越来越多的企业意识到了SEO的重要性,但是,由于技术难度和人力成本的限制,许多企业选择将…

TikTok选品思路你真的知道吗

TikTok是一款非常流行的短视频社交应用程序,用户群体广泛,主要集中在年轻人之间,越来越多跨境商家布局TikTok。那么在TikTok上进行选品时,要采用什么思路和方法才能让自己的产品比较出众吸睛并且让自己财源滚滚呢? 一、…

阿里云服务器镜像是什么?镜像系统怎么选择?

阿里云服务器镜像是云服务器的装机盘,镜像是为云服务器安装操作系统的。云服务器镜像系统怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心…

BI 数字化转型对央企和中小企业的利好

数字化产品和服务的大规模应用也让数字经济、数据价值得到了众多企业的重视。先说数字经济,据统计,2020年全球数字经济规模达到32.61万亿美元,与GDP总量比例为43.7%,其中中国数字经济规模达到了5.4万亿美元,并维持着9.…

手麻系统源码,PHP手术麻醉临床信息系统源码,手术前管理模块功能

手麻系统源码,PHP手术麻醉临床信息系统源码,手术前管理模块功能 术前管理模块主要有手术排班、手术申请单、手术通知单、手术知情同意书、输血血液同意书、术前查房记录、术前访视、风险评估、手术计划等功能。 功能: 手术排班:…

免费换电池还倒塞用户200,iPhone惨遭“耐用”反噬

多年来 iPhone 最为诟病的几个缺点之一肯定少不了电池。 在 Android 已经普及4、5000mAh 大电池加快充组合的情况下,iPhone 仅有 Pro Max(Plus)勉强及格。 更难受的是今年3月,官方换电池还迎来了幅度不小的涨价。 苹果这是在建议我…

STM32F4_RTC实时时钟

目录 1. RTC实时时钟简介 2. RTC框图 3. RTC初始化和配置 3.1 RTC和低功耗模式 3.2 RTC中断 4. RTC相关寄存器 4.1 时间寄存器:RTC_TR 4.2 日期寄存器:RTC_DR 4.3 亚秒寄存器:RTC_SSR 4.4 控制寄存器:RTC_CR 4.5 RTC初…

【LoadRunner】教你快速编写一个性能测试脚本 demo

目录 LoadRunner 工具介绍 UI性能测试步骤 编写性能测试脚本(VUG) 创建测试场景(Controller) 生成测试报告(Analysis) LoadRunner 工具介绍 我们使用以上三个工具针对我们的项目进行性能测试。 a&am…