准备工作:

Python Package

pytest-parallel-0.0.10: windows版本只能是0.0.10

pytest-xdist

这两个包都是基于pytest基础上,实现多进程、多线程执行测试用例

pytest-xdist和pytest-parallel 区别

pytest-xdist: 多进程执行,不支持线程执行

pytest-parallel:多进程、多线程执行;windows操作系统只支持一个进程,可多个线程;max和linux可多进程

这两个都可以实现并发或并行执行用例,缩短测试时间

进程和线程的区别

进程:点击打开qq,就启动了qq的进程

线程:在qq进程下,会有q群或还有会话,启动了线程

一个线程只有一个主进程,一个进程有多个线程

参数介绍

使用pytest-xdist和pytest-parllel传入命令行执行,看到的效果,都是同时启动给定的参数

如:

pytest-xdist: 配置参数 ‘-n’,’2’ 同时启动两个进程,执行

Pytest-parllel:   '--workers=1', '--tests-per-worker=2',一个进程,启动2个线程执行

--workers 2 --tests-per-worker 4:2个进程并行,且每个进程最多4个线程运行,即总共最多8个线程运行

例子

pytest: 使用多线程执行用例,pytest收集用例数:4,设置线程数:4,每个test用例调用task(),默认等待10s,4个线程同时执行,预计时间:约10s

--- 多线程.py文件
import pytest
from concurrent.futures import ThreadPoolExecutor,as_completed
import threading def task():
logging.info(f"线程:{threading.currentThread().name}")
time.sleep(10) class TestTask():
def test_task1(self):
task()
return "task1" def test_task2(self):
task()
return "task2" def test_task3(self):
task()
return "task3" def test_task4(self):
task()
return "task4" if __name__ == '__main__':
pytest.main(['-v', '-s', '-q', '多线程.py', '--tests-per-worker=4'])

执行结果:

Pytest-parallel遇到的问题:

问题1.

启动报错,

AttributeError:Can'tpickle local object

'pytest_addoption.<locals>.label_type.<locals>.a_label_type'

解决方法:

Windows只支持版本0.0.10,卸载,重新安装

Pip install Pytest-parallel==.0.0.10

pytest-parallel启动报错

python-pytest使用(4)-多线程多进程运行_pytest-xdist、pytest-parallel区别及命令介绍

Pytest-xdist:只支持多进程执行

问题1.

输出到控制台的日志中的中文为乱码,这个暂时无法解决;输出到文件文件中的中文写入正常;

问题2.

执行完成后,结合pytestreport,一个进程完成后,就会触发生成一个报告;其他进程也完成后,也会触发生成报告,导致跑一个用例集,会生成多个分散的报告;

原因:

pytestreport: 重写了钩子函数pytest_session_finish,这个函数,在一个会话结束后,就会触发生成报告;使用多进程,打开两个浏览器,一个浏览器结束,代表进程结束,session完成,就会触发

解决方法:

使用allure生成测试报告,allure会将所有测试结果收集,最后再生成;或者是用pytest-parallel,不过其它使用的方法,可能出现问题

python-pytest:多进程、多线程执行用例的更多相关文章

  1. pytest多进程/多线程执行测试用例

    前言: 实际项目中的用例数量会非常多,几百上千:如果采用单进程串行执行的话会非常耗费时间.假设每条用例耗时2s,1000条就需要2000s $\approx$ 33min:还要加上用例加载.测试前/后 ...

  2. selenium+python自动化90-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

  3. Python-Unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

  4. python--selenium多线程执行用例实例/执行多个用例

    python--selenium多线程执行用例实例/执行多个用例 我们在做selenium测试的时候呢,经常会碰到一些需要执行多个用例的情况,也就是多线 程执行py程序,我们前面讲过单个的py用例怎么 ...

  5. python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!

    首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...

  6. Pytest 多进程并发执行

    在用例执行的过程中,想要用多进程并发执行测试用例,如何实现呢,其实很简单,pytest有对应的模块,安装方式. 安装 pip install pytest-xdist 使用 pytest test_d ...

  7. selenium+python-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时...那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线程 ...

  8. python自动化-unittest批量执行用例(discover)

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...

  9. 也说性能测试,顺便说python的多进程+多线程、协程

    最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...

  10. unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

随机推荐

  1. [FAQ] Win10 键盘输入的数字英文字体变宽, 胖英文, 如何处理

    输入法 点击右键,找到设置,点击进入. 开启 "全/半角切换" 快捷键为 "Shift + 空格",随后可以使用这个快捷键进行切换正常. Link:https: ...

  2. [Gin] 运行模式检测和设置 (mode.go)

    // 设置方式 gin.SetMode(gin.ReleaseMode) // 检测方式 if gin.Mode() == gin.DebugMode { } 更多相关信息,建议直接去看源代码. Re ...

  3. 2018-2-13-win10-uwp-右击选择-GridViewItem-

    title author date CreateTime categories win10 uwp 右击选择 GridViewItem lindexi 2018-2-13 17:23:3 +0800 ...

  4. C语言程序设计-笔记04-函数

    C语言程序设计-笔记04-函数 例5-1  计算圆柱体的体积.输入圆柱的高和半径,求圆柱体积volume=πxr^2xh.要求定义和调用函数cylinder(r,h)计算圆柱体的体积. #includ ...

  5. B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能

    B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能 @ 目录 B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa ...

  6. code::blocks更改编译器配置

  7. ansible(5)--ansible的script模块

    1. script模块 作用:在远程主机运行本地的脚本: 调用格式: -m script -a "/PATH/TO/SCRIPT_FILE": 参数: creates:如果其后跟的 ...

  8. ubuntu配置nginx+php开发环境(virtualbox)

    A.安装环境 1.安装php7.0 sudo apt install php7.0 2.安装php7.0-fpm,这是php和nginx之间的连接器. sudo apt install php7.0- ...

  9. jeecg-boot中分页接口用自定义sql和list实现

    1.controller中 @ApiOperation(value="分析仪工作状态和报警-3列-分页", notes="分析仪工作状态和报警状态-分页") @ ...

  10. 在uGUI正交相机中实现旋转透视效果

    正常uGUI使用正交相机的话,旋转是没有透视效果的,但如果能实现较简单的透视, 对一些效果表现来说还是不错的:见下图(左为透视效果): 正常思路感觉各种麻烦. 因为uGUI使用unity的x和y方向表 ...