zoukankan      html  css  js  c++  java
  • pytest之多进程和多线程

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

    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
  • 相关阅读:
    自定义MyBatis
    SpringMVC基本
    Struts2访问Servlet
    Struts2的配置
    Rust开发环境搭建
    android webview和 javascript 进行交互
    C#开发step步骤条控件
    如何用cmd命令递归文件夹中的所有特定文件,拷贝到另一个文件夹中
    C#用DesignSurface实现一个简单的窗体设计器
    Roslyn如何实现简单的代码提示
  • 原文地址:https://www.cnblogs.com/Maruying/p/13683305.html
Copyright © 2011-2022 走看看