当前位置: 首页 > news >正文

3.1 增加多进程执行playwright

增加了多进程的方式执行测试代码,对代码改动比较大

1、case

case目录依然是自动生成

 2、config

dir_collection.py新增了配置

mkdir_collections = ['case','log','img',
]
del_collections = ['results','report'
]
del_regex = 'temp'

3、data/img/log/resource/video

data/img/log/resource目录没做修改,删除了video目录

4、results/report及以temp开头的目录是自动生成,且会每次运行前都会自动删除

5、utils目录

删除了delete.py

修改了dir_check.py

import os
from config.dir_collection import mkdir_collections, del_collections, del_regex
import shutildef check_dir():mk_dir()del_files()def mk_dir():li = os.listdir()for i in mkdir_collections:if i not in li:os.mkdir(i)def del_files():li = os.listdir()for i in li:if i.startswith('temp'):shutil.rmtree(i)elif i in del_collections:shutil.rmtree(i)

 修改了video.py

import os
import timedef generate_video(source_path: str):p = f"{source_path}/{int(time.time())}.webm"while True:if os.listdir(source_path):for i in os.listdir(source_path):os.renames(f'{source_path}/{i}', p)breakreturn p

 新增了process.py

import os
import timeimport pytest
import multiprocessingdef pytest_run(a):f = ['-s', '--alluredir=results']for i in a:f.append(i)print(f)pytest.main(f)def split_list(lst, n):"""将列表 lst 按 n 等份分割"""if n > len(lst):raise Exception('The number of processes cannot be greater than the number of test files')k, m = divmod(len(lst), n)return [lst[i * k + min(i, m):(i + 1) * k + min(i + 1, m)] for i in range(n)]def process(size: int, d: str):file_list = os.listdir(d)temp = []for i in file_list:file_path = d + '/' + iif os.path.isfile(file_path) and i.startswith('test'):temp.append(file_path)li = split_list(temp, size)pro = [multiprocessing.Process(target=pytest_run, args=(li[i],)) for i in range(size)]for p in pro:p.start()for p in pro:p.join()

6、conftest.py

修改了conftest.py

import timeimport pytest
from playwright.sync_api import sync_playwright
from config.setting import config
from playwright.sync_api import Page
from utils.operate import operate
from utils.baseurl import get_baseUrl
import os
import allure
from utils.video import generate_videodef getName():pid = os.getpid()temp_file_name = f'temp{pid}'return temp_file_name@pytest.fixture(scope='session')
def browser():browser = sync_playwright().start().chromium.launch(headless=False, slow_mo=500)return browser@pytest.fixture(scope='session')
def page(browser):page = browser.new_page(ignore_https_errors=True, record_video_dir=getName())page.goto(get_baseUrl(config))operate(config['username'], page)operate(config['password'], page)operate(config['submit'], page)return pagedef log(request):with open('log/http.txt', 'a', encoding='utf-8') as w:w.write(f'{request}.url' + '\n')@pytest.fixture(scope='function', autouse=True)
def after(page: Page):yieldpage.on("request", lambda request: log(request))@pytest.fixture(scope='session', autouse=True)
def clear(page: Page, browser):yieldpage.close()browser.close()p = generate_video(getName())allure.attach.file(p, f'{os.path.basename(p)}', attachment_type=allure.attachment_type.WEBM, extension='WEBM')

7、修改了main.py 

import os
import shutil
import timefrom playwright.sync_api import sync_playwright
from config.setting import config
from utils.template import Template
from utils.md5 import Md5
import pytest
from utils.dir_check import check_dir
from utils.baseurl import get_baseUrl
from utils.process import processdef run():data = os.listdir('data')m = Md5('case', 'log', 'case_md5.json')n = Md5('utils', 'log', 'template_md5.json')filter_list = m.filter()utils_list = n.filter()if 'template.py' not in utils_list:filter_list = []n.write_md5()for i in data:file_path = 'data' + '/' + iif os.path.isfile(file_path):temp = 'test_' + iif temp not in filter_list:Template.create_test_file(file_path, 'case')m.write_md5()if __name__ == "__main__":check_dir()get_baseUrl(config)run()process(2, 'case')os.system('allure generate  results -o ./report')for file_name in os.listdir('resource'):src_file = os.path.join('resource', file_name)dst_file = os.path.join('report', file_name)if os.path.exists(dst_file):os.remove(dst_file)shutil.copy(src_file, 'report')os.system('allure open report')

8、总结

最终修改后的效果,可以使用多进程的方式,开启多个浏览器实例,去对case目录下的测试文件分片执行,在测试文件特别多的情况下,是可以提高执行效率的。

其次,每个进程都有自己的视频及截图,进程之间互不干扰 

相关文章:

3.1 增加多进程执行playwright

增加了多进程的方式执行测试代码,对代码改动比较大 1、case case目录依然是自动生成 2、config dir_collection.py新增了配置 mkdir_collections [case,log,img, ] del_collections [results,report ] del_regex temp3、data/img/log/resource/video data/im…...

关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

绪论 本文主要讲解单片机的时钟系统的相关知识,并进行超频测试,同时介绍如何在STM32F0单片机上进行内外时钟的切换,在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答: 诚然&…...

centos6.10环境下安装php7.4(基于WLNMP包)

centos6系统已经被官网停止维护,要安装软件必须用第三方的RPM包,下面使用yum安装php7.4正式版,当前基于WLNMP提供的一键安装包来安装 1、添加epel源 yum install epel-release yum install epel-release 2、添加WLNMP一键安装包源 rpm -iv…...

Qt使用第三方库openssl进行RSA加密解密操作详解

一、openssl库的编译,可以参考文档: https://blog.csdn.net/liang19890820/article/details/51658574/ 因为我这里使用的是windows操作系统,可以直接下载exe格式的安装文件,直接安装即可,就包含了我们需要的头文件和库文件,省去了编译操作。exe安装文件下载地址: htt…...

激发数学思维:GPT-4实证研究探索挑战性数学问题

深度学习自然语言处理 原创作者:wkk 考虑到自然语言在许多科学和工程领域表达的数学问题的丰富性,使用大语言模型(LLM)来解决数学问题是一项有趣的研究工作。今天给大家介绍一篇微软研究院联合欧美高校关于如何使用GPT-4解决数学问题的研究论文。 之前的…...

如何配置IP地址

一.自动获取IP 1.dhclient 2.ifconfig 通过这个命令可以查看系统有几块网卡和网卡的IP。 如果您的Linux有多块网卡,那么在Linux中它会显示成eth1, eth2 依此类推 二.手动配置IP 如果您的虚拟机不能自动获取IP,那么只能手动配置,配置方法为&am…...

CentOS + Nginx 环境自动申请和部署Let‘s Encrypt免费SSL证书教程

文章目录 步骤 1:安装Certbot工具步骤 2:配置Nginx服务器步骤 3:生成SSL证书步骤 4:配置Nginx以使用SSL证书步骤 5:重新加载Nginx配置步骤 6:自动续期证书 本文介绍如何在 CentOS Nginx 环境下&#xff0c…...

浅谈对BI工具价值的看法

浅谈对BI工具价值的看法 BI的定义看法 百度百科的定义: 商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术…...

创建定时任务

import schedule import timedef task():print("Im working...")if __name__ __main__:schedule.every(10).seconds.do(task) # 每10秒一次schedule.every(10).minutes.do(task) # 10分钟一次schedule.every().hour.do(task) # 每小时schedule.every().day.at(&q…...

MyBatis的使用、Spring AOP、Spring事务

一、MyBatis 的使用 1、环境配置 1.1、建库建表 -- 创建数据库 drop database if exists mycnblog; create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据 use mycnblog;-- 创建表[⽤户表] drop table if exists userinfo; create table userinfo(id in…...

Apache Doris 冷热分层技术如何实现存储成本降低 70%?

在数据分析的实际场景中,冷热数据往往面临着不同的查询频次及响应速度要求。例如在电商订单场景中,用户经常访问近 6 个月的订单,时间较久远的订单访问次数非常少;在行为分析场景中,需支持近期流量数据的高频查询且时效…...

MySQL 两个备机同时挂掉故障分析

来源: 接报线上出现两个5.7.38的备库同时crash,crash堆栈相同,内容如下: stack_bottom 7fd7700b0d30 thread_stack 0x40000 /home/service/app/mysql33066/bin/mysqld(my_print_stacktrace0x2c)[0xf1062c] /home/service/app/m…...

序列化与反序列化深入理解

序列化与反序列化深入理解 1 介绍1.1 概述1.2 序列化实现的需求 2 常用序列化实现函数序列化语言内置开源序列化实现 3 各序列化实现比较4 各序列化实现概述XMLJSONProtobufJava 内置TLVVLE(Variable Length Encoding) 5 flex & bison5.1 介绍应用解…...

hudi系列-小文件优化

hudi使用mvcc来实现数据的读写一致性和并发控制,基于timeline实现对事务和表服务的管理,会产生大量比较小的数据文件和元数据文件。大量小文件会对存储和查询性能产生不利影响,包括增加文件系统的开销、文件管理的复杂性以及查询性能的下降。对于namenode而言,当整个集群中…...

mysql 是否包含 返回索引 截取字符串

是否包含返回索引 原文链接:https://www.cnblogs.com/shoshana-kong/p/16474175.html 方法1:使用通配符%。 通配符也就是模糊匹配,可以分为前导模糊查询、后导模糊查询和全导匹配查询,适用于查询某个字符串中是否包含另一个模糊…...

【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵(中等) 方法一:二分查找 思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是升序的 因此我们可以使用两次二分来定位到目标位置。 第一次二分: 从第 0 列中的「所有行」开始找&#x…...

Nginx rewrite

一.location 大致可以分为三类: 精准匹配:location / {…}一般匹配:location / {…}正则匹配:location ~ / {…} 1.location 常用的匹配规则: :进行普通字符精确匹配,也就是完全匹配。^~ &am…...

【数据分享】1929-2022年全球站点的逐日降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 有关气象指标的监测站点数据,之前我们分享过1929-2022年全…...

【论文阅读】(2013)Exact algorithms for the bin packing problem with fragile objects

文章目录 一、摘要二、介绍三、之前在这个问题上的工作四、易碎物品背包问题的求解4.1 ILP模型4.2 基于KP01的方法4.3 动态规划 五、二元分支方案5.1 分支方案1(基于决策变量的分支)5.2 分支方案2(基于yj和xji的分支)5.3 将L2嵌入…...

K8S YAML 部署XXLJOB 集群

apiVersion: apps/v1 kind: Deployment metadata: labels: app: xxl-job-admin name: xxl-job-admin namespace: ccetest #根据情况修改namespace spec: replicas: 3 #根据情况修改副本数 selector: matchLabels: app: xxl-job-admin strat…...

Linux防火墙学习笔记3

iptables链的概念: 当客户端访问服务器端的Web服务的时候,客户端发送请求报文到网卡,而TCP/IP协议栈是属于内核的一部分。客户端的请求报文会通过内核的TCP协议传输到用户空间的Web服务,而客户端报文的目的地址为Web服务器所监听的…...

数仓用户行为数据分析

分层优点:复杂的东西可以简单化、解耦(屏蔽层作用)、提高复用、方便管理 SA 贴源 数据组织结构与源系统保持一致 shm 历史层 针对不同特征的数据做不同算法,目的都是为了得到一份完整的数据 PDM 明细层 做最细粒度的数据明细…...

RK3288 Android5.1添加WiFiBT模块AP6212

CPU:RK3288 系统:Android 5.1 注:RK3288系统,目前 Android 5.0 Kernel 3.10 SDK 支持 Braodcom,Realtek 等 WiFi BT 模块 各个 WiFi BT 模块已经做到动态兼容,Android 上层不再需要像以前一样进 行特定宏的配置 此…...

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展,API变的至关重要。根据统计,目前市面上有上千万的开发者,互联网项目超过10亿,保守统计涉及的 API 数量大约有 100 亿。这么大基数的API,只要解决某些共有的痛点,将会是非常有意义的事情。…...

chatgpt生成【2023高考作文】北京卷二 - 亮相

舞台上,戏曲演员有登场亮相的瞬间。生活中也有许多亮相时刻:国旗下的讲话,研学成果的汇报,新产品的发布……每一次亮相,都受到众人关注;每一次亮相,也会有一段故事。 请以“亮相”为题目&#x…...

实验四、shell编程

一、实验目的 1.了解shell的特点和主要种类。 2.掌握 shel1 脚本的建立和执行方式。 3.掌握bash的基本语法。 4.学会编写shell 脚本。 二、实验内容 shell 脚本的建立和执行。历史命令和别名定义。shell变量和位置参数、环境变量。bash的特殊字符。一般控制结构。算术运算及…...

【代码随想录】刷题Day51

1.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 1.dp数组的含义:dp[i][0]为第i天卖出股票的最大价值;dp[i][1]为第i天持有股票的最大价值 2.dp数组的条件:由于有冷冻期,所以dp数组的条件就变了。第i天卖出股票的最大…...

centos7下svnserve方式部署subversion/SVN服务端(实操)

一般来说,subversion服务器可以用两种方式架设: 一种是基于svnserve,svnserve作为服务端; 一种是基于Apache,用apache作为服务端。 这里采用第一种方式部署。 执行如下命令,安装SVN。 yum install sub…...

一款红队批量脆弱点搜集工具

功能 指纹识别:调用“三米前有香蕉皮“前辈工具,他的工具比finger好用 寻找资产中404,403,以及网页中存在的其他薄弱点,以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 使用 第一次使用脚本请运行p…...

Docker 基本管理

一、Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵守了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自…...

高职图书馆网站建设大赛/天津seo实战培训

SMOTE算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。 如图所示: 算法流程: 1、对于少数类中每一个样本a&…...

泉州网站的建设/产品推广文案

对于大多数Web设计师和开发人员而言,测试是工作的重要组成部分。 他们将投入大量时间,以确保其网站在各种浏览器中看起来相似甚至相同。 但是,站点测试的一个关键部分似乎经常被遗忘:字体堆栈测试。 问题 大多数网站设计师在很大程…...

游戏网站怎么做seo/网站seo

2019独角兽企业重金招聘Python工程师标准>>> nginx限速,带宽,IP; http://www.6san.com/1149/ 限制向客户端传送响应数据的速度,可以用来限制客户端的下载速度。参数rate的单位是字节/秒,0为关闭限速。 ngin…...

手机网站如何做/点击器

西安军需工业学校都开设了哪些专业?西安军需工业学校是一所全日制公办院校,这样的办学性质,受到了更多学生和家长的认可,并且学校所开设的相关专业也让更多学生找到了未来的发展方向,那么西安军需工业学校都开设了哪些…...

淘宝联盟返利网站怎么做/天津抖音seo

如何在visio中插入公式? 最方便的方法是安装mathtype公式编辑器,在里面输入完公式之后复制,在visio空白处点击右键,选择“选择性粘贴”,然后会出现mathtype 6.0 Equation,单击确定就把mathtype中的公式顺利…...

沈阳网站建设优秀公司/单页关键词优化费用

一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像不带SSH服务的。 基于commit命令创建 准备工作 首先,使用ubuntu镜像来创建一个容器: $ sudo docker run -it ubuntu /bin/bash root3c6ed6207883:/# 这…...