pytest实现多进程与多线程运行超好用的插件
作者:好好先生&Mr.Li 发布时间:2023-03-23 15:56:23
前言
如果想分布式执行用例,用例设计必须遵循以下原则:
1、用例之间都是独立的,
2、用例a不要去依赖用例b
3、用例执行没先后顺序,
4、随机都能执行每个用例都能独立运行成功每个用例都能重复运行,不影响其它用例
这跟就我们平常多个人工测试一样,用例都是独立的,可以随机分配不同人员执行,互相不依赖,用例之间也不存在先后顺序
一、pytest-parallel
安装:pip install pytest-parallel
常用参数配置:
--workers=n:多进程运行需要加此参数, n是进程数。默认为1
--tests-per-worker=n:多线程需要添加此参数,n是线程数
如果两个参数都配置了,就是进程并行,每个进程最多n个线程,总线程数:进程数*线程数
注意:在windows上进程数永远为1。
需要使用 if name == “main”:,在dos中运行会报错
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @project : API_Service
# @File : test_1.py
# @Date : 2021/6/15 3:07 下午
# @Author : 李文良
# demo:
import pytest
def test_01():
print('测试用例1操作')
def test_02():
print('测试用例2操作')
def test_03():
print('测试用例3操作')
def test_04():
print('测试用例4操作')
def test_05():
print('测试用例5操作')
def test_06():
print('测试用例6操作')
def test_07():
print('测试用例7操作')
def test_08():
print('测试用例8操作')
if __name__ == "__main__":
pytest.main(["-s", "test_1.py",'--workers=2', '--tests-per-worker=4'])
二、pytest-xdist
安装:pip install pytest-xdist
不支持多线程
常用参数配置:
-n=*:*代表进程数
多cpu并行执行用例,直接加个-n参数即可,后面num参数就是并行数量,比如num设置为3
-n auto 自动侦测系统里的CPU数目
-n num 指定运行测试的处理器进程数
三、对比说明
pytest-parallel比pytst-xdist相对好用,功能支持多。
pytst-xdist不支持多线程,而pytest-parallel支持python3.6及以上版本,如果想做多进程并发在linux或者mac上做,在Windows上不起作用(Workers=1),如果做多线程linux/mac/windows平台都支持,进程数为workers的值。
pytest-parallel常用配置命令如下
–workers (optional) *:多进程运行需要加此参数, *是进程数。默认为1。
–tests-per-worker (optional) *:多线程运行, *是每个worker运行的最大并发线程数。默认为1
pytest test.py --workers 3:3个进程运行
pytest test.py --tests-per-worker 4:4个线程运行
pytest test.py --workers 2 --tests-per-worker 4:2个进程并行,且每个进程最多4个线程运行,即总共最多8个线程运行。
四、特别注意
1、pytest-parallel的workers参数在windows系统下永远是1,在linux和mac下可以取不同值。
2、pytest-parallel加了多线程处理后,最后执行时间是运行时间最长的线程的时间。
3、在windows下想用多进程的选pytst-xdist; 想用多线程的选pytest-parallel
来源:https://blog.csdn.net/weixin_44275820/article/details/112169328


猜你喜欢
- 其实有一个疑惑一直在小编心中,每一个代码段编写里,总会出现好多个函数,也许有人和小编有一样的认同感,后来,小编明白,每一个函数本身都是都有各
- javascript中声明函数的方法有两种:函数声明式和函数表达式.区别如下:1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式
- OpenCV的作用及安装OpenCV简介OpenCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows、Android和M
- golang的单引号转义如题,golang中有时候需要将一个字符串中的单引号再转义一次,比如在两个单引号之间包含一个含有单引号的字符串的情形
- 这个符合设计标准的三 级向上弹出菜单,纯css代码控制,没有使用javascript脚本,绿色环保,呵呵。兼容性应该更好。截图:<!D
- 前言今天小编就带着大家来盘点一下数据抓取过程中这些主流的加密算法,它们有什么特征、加密的方式有哪些等等,知道了这些之后对于我们逆向破解这些加
- async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案。目前,async / await这个特性已经是sta
- 本文将和大家分享一些从互联网上爬取语料的经验。0x1 工具准备工欲善其事必先利其器,爬取语料的根基便是基于python。我们基于python
- 在浏览器 IE6 、IE7、Firefox2+、Firefpx3+、Opera9.6+、Safari3.1+中测试以下代码:<!DOC
- pprint – 美观打印作用:美观打印数据结构pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。格式化工具会生成数据结
- 在前一文中记述了Access启动不了,或者出现“正在准备安装……”的问题,今天则找到了Access对控件支持的问题。本来Access、Exc
- 排序,是许多编程语言中经常出现的问题。同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现)一、使用Python内置函数
- reduce 方法(升序)语法: array1.reduce(callbackfn[, initialValue])参
- 图片的宽度和高度是未知的,没有一个固定的尺寸,在这个前提下要使图片在一个固定了宽度和高度的容器中垂直居中,想想感觉还是挺麻烦的,由于最近的项
- 如何用表单的方式推送请求的信息?具体见下:<html><head><title>答复用户信息
- 快速高效用:SET SQL_SAFE_UPDATES = 0;下面的就不要看了!今日用MySQL Workbench进行数据库的管理更新时,
- 第一次做完主从库同步后正常,但工作过程中发现有一个库的数据库没有同步起来,在另外一个mysql(3307)中于是:1、在主库中创建一个临时库
- 1.参考Beautiful Soup and Unicode Problems详细解释unicodedata.normalize('
- 什么是Dynamic HTML 今天我们以问答的形式来讲述什麽是Dynamic Html。问:亲爱的网猴,我经常看到讲述有关“Dynamic
- 1. 如何停止任务?我们可以通过 asyncio.Task 对象上的 cancel() 方法取消任务。如果任务被取消,cancel() 方法