pytest之多进程和多线程

摘要:
如果用例以分布式方式执行,用例设计必须遵循以下原则:1.用例是独立的(不存在依赖关系);2、案件执行无指令要求;1、 Pytest xdist多进程Pytest xdist只支持多个进程,不支持多个线程。安装:pipingsstallpytest xdist常见参数分析:-n:进程数,即CPU数。您可以指定数字。最大值是当前计算机的CPU数。您还可以将其设置为自动,以自动识别CPU的数量。例如,执行cmd命令行

若分布式执行用例,用例设计必须遵循以下原则:

1.用例之间都是独立的(不存在依赖关系);
2.用例执行无先后顺序要求;

一、 pytest-xdist多进程

pytest-xdist仅支持多进程,不支持多线程。

安装:pip install pytest-xdist

常用参数解析:

 -n:进程数,也就是cpu个数。可以指定个数,最大值为当前机器cpu个数,也可以设置为auto,自动识别cpu个数。

如cmd命令行下执行:

pytest -s test_multiProcess.py -n=2  # 使用2个进程运行该py文件

pytest -s test_multiProcess.py -n=auto  # 自动使用cpu个数运行该py文件

在PyCharm下执行:

# get_multithread.py

import pytest
from time import sleep

def test_01():
    sleep(2)       # 通过延时,直观比较运行耗时
    print("testcase_01.")

def test_02():
    sleep(3)
    print("testcase_02.")

def test_03():
    sleep(4)
    print("testcase_03.")

if __name__ == "__main__":
    # pytest.main(['-s',  __file__])              # 默认使用单进程执行;耗时9.01s
    # pytest.main(['-s', '-n=auto', __file__])  # 自动使用所有进程执行,耗时4.59s
    pytest.main(['-s', '-n=3', __file__])       # 使用3个进程执行,耗时4.44s
二、pytest-parallel

  pytest-parallel使用多线程后,则最后执行时间是运行时间最长的线程的时间。

(注意:pytest-parallel目前暂不能和allure报告使用

安装:

pip install pytest-parallel

常用参数解析:

–workers (optional)  n:多进程运行,  n是进程数。默认为1。

(注意:若为window平台,则该workers永远=1,在linux和mac下可以取不同值。)

–tests-per-worker (optional)  n:多线程运行, n是每个worker运行的最大并发线程数。默认为1(该参数不受运行平台限制)。

(如果两个参数都配置了,就是进程并行,每个进程最多n个线程,总线程数:进程数 * 线程数)

在window下的cmd命令行执行:

pytest -s get_multithread.py --workers=2 --tests-per-worker=4

输出:
pytest-parallel: 1 worker (process), 3 tests per worker (threads)
testcase_01.
.testcase_02.
.testcase_03
.
================================================== 3 passed in 4.02s ==================================================

在PyCharm下执行:

if __name__ == "__main__":
    pytest.main(['-s', '--workers=2', '--tests-per-worker=3', __file__])    # 设定2个进程,每个进程3个线程,耗时4.02s
遇到的问题:

pytest-parallel在windows下执行失败及解决办法AttributeError: Can‘t pickle local object ‘pytest_addoption.<locals?

解决方法:

pytest-parallel版本回退到0.0.10,参考:https://blog.csdn.net/qq_39214101/article/details/107914869

cmd命令行下卸载package包:
pip uninstall packageName

cmd命令行下安装特定版本的package包:
pip install packageName==version(如0.0.10)
附:
1、报错:E: Unable to locate package XXX ?
(1)首先update再upgrade:   sudo apt-get update   sudo apt-get upgrade 然后再试试:sudo apt-get install xxxxx (2)若以上都不行则尝试:sudo apt-get install aptitude   且成功以后使用:sudo aptitude install xxxxx

2、手动安装package包:python setup.py install

3、手动安装.whl包:pip3 install xxx.whl

4、pip install默认的安装包路径:xxxLibsite-packages

免责声明:文章转载自《pytest之多进程和多线程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 2008 R2占用内存越来越大解决方法win10开机就占用了50%内存,win10越用越卡下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】 .NET中STAThread和MTAThread

ref:http://blog.csdn.net/dyllove98/article/details/9735955 1 COM中的公寓 本文讨论进程内COM组件。以一个示例直观演示STAThread和MTAThread的作用和区别。 1.1 基本规则 公寓是COM组件的运行环境,日常生活中公寓是用来住人的,COM中的公寓是用来住COM组件的对象的,每个...

C#多线程(一)

一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程...

C#编程总结(二)多线程基础

C#编程总结(二)多线程基础 无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作。要使应用程序能够快速响应用户操作,同时在用户事件之间或者甚至在用户事件期间利用处理器,最强大的方式之一是使用多线程技术。 多线程:线程是程序中一个单一的顺序控制流程.在单个程序中同时...

【转】Python中的GIL、多进程和多线程

转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global Interpretor Lock,全局解释器锁) 2. threading 2.1. 创建线程 2.2. 使用线程队列 3. dummy_threadi...

python中多线程,多进程,多协程概念及编程上的应用

1, 多线程  线程是进程的一个实体,是CPU进行调度的最小单位,他是比进程更小能独立运行的基本单位。  线程基本不拥有系统资源,只占用一点运行中的资源(如程序计数器,一组寄存器和栈),但是它可以与同属于一个进程的其他线程共享全部的资源。  提高程序的运行速率,上下文切换快,开销比较少,但是不够稳定,容易丢失数据,形成死锁。 直接上代码: impor...

笔试题多线程

1. 描述线程与进程的区别? 一个应用程序实例是一个进程,一个进程内包含一个或多个线程,线程是进程的一部分; 进程之间是相互独立的,他们有各自的私有内存空间和资源,进程内的线程可以共享其所属进程的所有资源; 2. 为什么GUI不支持跨线程访问控件?一般如何解决这个问题? 因为GUI应用程序引入了一个特殊的线程处理模型,为了保证UI控件的线程安全,这个线...