python-pytest:多进程、多线程执行用例
准备工作:
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
python-pytest使用(4)-多线程多进程运行_pytest-xdist、pytest-parallel区别及命令介绍
Pytest-xdist:只支持多进程执行
问题1.
输出到控制台的日志中的中文为乱码,这个暂时无法解决;输出到文件文件中的中文写入正常;

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

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

解决方法:
使用allure生成测试报告,allure会将所有测试结果收集,最后再生成;或者是用pytest-parallel,不过其它使用的方法,可能出现问题
python-pytest:多进程、多线程执行用例的更多相关文章
- pytest多进程/多线程执行测试用例
前言: 实际项目中的用例数量会非常多,几百上千:如果采用单进程串行执行的话会非常耗费时间.假设每条用例耗时2s,1000条就需要2000s $\approx$ 33min:还要加上用例加载.测试前/后 ...
- selenium+python自动化90-unittest多线程执行用例
前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...
- Python-Unittest多线程执行用例
前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...
- python--selenium多线程执行用例实例/执行多个用例
python--selenium多线程执行用例实例/执行多个用例 我们在做selenium测试的时候呢,经常会碰到一些需要执行多个用例的情况,也就是多线 程执行py程序,我们前面讲过单个的py用例怎么 ...
- python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!
首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...
- Pytest 多进程并发执行
在用例执行的过程中,想要用多进程并发执行测试用例,如何实现呢,其实很简单,pytest有对应的模块,安装方式. 安装 pip install pytest-xdist 使用 pytest test_d ...
- selenium+python-unittest多线程执行用例
前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时...那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线程 ...
- python自动化-unittest批量执行用例(discover)
前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...
- 也说性能测试,顺便说python的多进程+多线程、协程
最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...
- unittest多线程执行用例
前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...
随机推荐
- 浏览器扩展开发-Firefox临时载入附加组件(图)
科普:[FE] Quasar BEX 热加载区别: Chrome vs Firefox 1. 2. 3. Thats all. Refer:Firefox扩展开发 Link:https://www. ...
- 在 UOS 统信运行 dotnet 程序提示没有通过系统安全验证无法运行
本文记录 dotnet 应用程序在 UOS 统信系统上运行时,提示 没有通过系统安全验证,无法运行 的问题 这个问题是因为没有开启 UOS 统信的开发者模式,直接将自己构建完成的包放上去跑导致的问题 ...
- WPF 字体 FontStyle 的 Italic 和 Oblique 的区别
本文介绍在 WPF 里面的字体属性 FontStyle 的 Italic 和 Oblique 的斜体差别 本文的图片和知识来自: #265 – Specifying Values for FontSt ...
- MAUI 自定义绘图入门
在2022的5月份,某软正式发布了 MAUI 跨平台 UI 框架.我本来想着趁六一儿童节放假来写几篇关于 MAUI 入门的博客,可惜发现我不擅长写很入门的博客.再加上 MAUI 似乎是为了赶发布日期而 ...
- ADV7123驱动VGA显示色条
VGA显示色条-基于ADV7123 用ADV7123代替权电阻网络,执行数模转换,差别在于rgb都变成8位,显示的色彩更多.控制端口多了3个:像素时钟,复合同步信号(不用就置0),消隐信号. 相对权电 ...
- python性能分析line_profiler
在编程世界中,效率是王道.对于Python开发者来说,line_profiler 是一把锐利的剑,能够深入代码的每一行,找出性能瓶颈.今天,就让我们一起深入探索 line_profiler,学习如何用 ...
- kali使用apt-get update 出现数字签名失效
kali使用apt-get update 出现数字签名失效 下载签名:wget archive.kali.org/archive-key.asc 安装签名:apt-key add archive-ke ...
- 01、Java 安全-反序列化基础
Java 反序列化基础 1.ObjectOutputStream 与 ObjectInputStream类 1.1.ObjectOutputStream类 java.io.ObjectOutputSt ...
- Linux — 物理内存管理
物理内存的组织方式 物理内存是由连续的一页一页的块组成,每个物理页都有页号 每个页由struct page表示,放进数组里--平坦内存模型 SMP和NUMA SMP中,总线会称为瓶颈,因为数据都要经过 ...
- WEB服务与NGINX(19)- nginx 防盗链功能
目录 1 nginx防盗链功能 1.1 盗链功能概述 1.2 实现盗链 1.3 实现防盗链 1 nginx防盗链功能 1.1 盗链功能概述 防盗链基于客户端携带的referer实现,referer是记 ...