测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Pytest----如何并发执行自动化脚本
收藏本文
作者:redrose2100 类别: 日期:2022-09-27 08:54:47 阅读:1083 次 消耗积分:0 分
[TOC] ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/7cd47362-951c-11ee-986a-0242ac110004.png) 当自动化脚本数量非常多的时候,全量脚本的执行耗时很长,此时就希望自动化脚本能够并发执行,第三方插件pytest-xdist 能很好的支持此功能,pytest-xdist是从进程层面进行的并行执行,能够真正做到并行执行 首先需要安装pytest-xdist插件,执行如下命令 ```bash pip install pytest-xdist ``` 下面编写如下脚本,有8个测试用例,每个用例中通过time.sleep 等待模拟用例耗时,具体代码如下,通过粗略估计,如果直接使用pytest顺序执行,至少需要36秒的时间。 ```python import time def test_01(): time.sleep(1) print("in test01...") assert 1==1 def test_02(): time.sleep(2) print("in test02...") assert 1==1 def test_03(): time.sleep(3) print("in test03...") assert 1==1 def test_04(): time.sleep(4) print("in test04...") assert 1==1 def test_05(): time.sleep(5) print("in test05...") assert 1==1 def test_06(): time.sleep(6) print("in test06...") assert 1==1 def test_07(): time.sleep(7) print("in test07...") assert 1==1 def test_08(): time.sleep(8) print("in test08...") assert 1==1 ``` 首先使用pytest命令顺序执行,执行结果如下,可以发现总耗时38秒。 ```bash (demo--ip5ZZo0) D:\demo>pytest -s =================== test session starts =================== platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0 rootdir: D:\demo plugins: repeat-0.9.1 collected 8 items test_demo.py in test01... .in test02... .in test03... .in test04... .in test05... .in test06... .in test07... .in test08... . =================== 8 passed in 38.36s ==================== (demo--ip5ZZo0) D:\demo> ``` 下面在安装pytest-xdist插件后,通过 -n auto 参数即可实现并行执行,-n 后面可以指定并行执行的数量,比如 -n 3 表示同一时间有三个任务在执行,如果是 -n auto 则自动计算当前服务器的cpu的总核数,然后将所有的cpu全部用上,此时服务器将会出现比较卡的状况,下面为使用 -n auto的执行结果,可以发现这里仅需要9秒,因为在test_08中等待了8秒,即此时耗时依赖最大耗时的用例。 ```bash (demo--ip5ZZo0) D:\demo>pytest -s -n auto =================== test session starts =================== platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0 rootdir: D:\demo plugins: forked-1.4.0, repeat-0.9.1, xdist-2.5.0 gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 gw0 C / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 gw0 C / gw1 C / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 gw0 C / gw1 C / gw2 C / gw3 I / gw4 I / gw5 I / gw6 I / gw7 gw0 C / gw1 C / gw2 C / gw3 C / gw4 I / gw5 I / gw6 I / gw7 gw0 C / gw1 C / gw2 C / gw3 C / gw4 C / gw5 I / gw6 I / gw7 gw0 C / gw1 C / gw2 C / gw3 C / gw4 C / gw5 C / gw6 I / gw7 gw0 C / gw1 C / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / gw7 gw0 C / gw1 C / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / gw7 gw0 ok / gw1 C / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / gw7gw0 [8] / gw1 C / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / gwgw0 [8] / gw1 ok / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / ggw0 [8] / gw1 [8] / gw2 C / gw3 C / gw4 C / gw5 C / gw6 C / gw0 [8] / gw1 [8] / gw2 ok / gw3 C / gw4 C / gw5 C / gw6 C /gw0 [8] / gw1 [8] / gw2 [8] / gw3 C / gw4 C / gw5 C / gw6 C gw0 [8] / gw1 [8] / gw2 [8] / gw3 ok / gw4 C / gw5 C / gw6 Cgw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 C / gw5 C / gw6 gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 ok / gw5 C / gw6gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 C / gwgw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 ok / ggw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 [8] / gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 [8] / gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 [8] / gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 [8] / gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] / gw4 [8] / gw5 [8] / gw6 [8] / gw7 [8] ........ ==================== 8 passed in 9.43s ==================== (demo--ip5ZZo0) D:\demo> ``` 如下结果为设置同时执行4个任务,即并行执行量设置为4,此时耗时12.87秒。 ```bash (demo--ip5ZZo0) D:\demo>pytest -s -n 4 =================== test session starts =================== platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0 rootdir: D:\demo plugins: forked-1.4.0, repeat-0.9.1, xdist-2.5.0 gw0 [8] / gw1 [8] / gw2 [8] / gw3 [8] ........ =================== 8 passed in 12.87s ==================== (demo--ip5ZZo0) D:\demo> ``` 可以发现通过pytest-xdist插件可以大幅提升脚本的执行效率。
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/399
上一篇:
Pytest----如何重复执行N次脚本
下一篇:
BootStrap简介与快速体验
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件