先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
import shutil
import requests
import pathlib
from win32com import client as win_client
工作目录(当前路径调试时需加上.parent)
BASE_DIR = str(pathlib.Path.cwd())
BASE_DIR = str(pathlib.Path.cwd().parent)
CHROME_DRIVER_BASE_URL = “https://chromedriver.storage.googleapis.com”
EDGE_DRIVER_BASE_URL = “https://msedgedriver.azureedge.net”
CHROME_DRIVER_ZIP = “chromedriver_win32.zip”
EDGE_DRIVER_ZIP = “edgedriver_win64.zip”
CHROME_DRIVER = “chromedriver.exe”
EDGE_DRIVER = “msedgedriver.exe”
BROWSER_DRIVER_DIR = str(pathlib.PurePath(BASE_DIR, “driver”))
DRIVER_MAPPING_FILE = os.path.join(BASE_DIR, “config”, “mapping.json”)
第一步,获取浏览器的版本
Chrome 浏览器有些小版本没有对应版本号的浏览器驱动,需要借助 Query API 查询对应大版本LATEST RELEASE版本,再根据查询对应的浏览器驱动
新版Edge 浏览器每个版本号官网都有对应的驱动下载
Latest Version API
https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{version}Download Chrome Driver
API
https://chromedriver.storage.googleapis.com/{version}/chromedriver_win32.zip
https://msedgedriver.azureedge.net/{version}/edgedriver_win64.zip
代码如下
def get_browser_version(file_path):
“”"
获取浏览器版本
:param file_path: 浏览器文件路径
:return: 浏览器大版本号
“”"
判断路径文件是否存在
if not os.path.isfile(file_path):
raise FileNotFoundError(f"{file_path} is not found.")
win_obj = win_client.Dispatch(‘Scripting.FileSystemObject’)
version = win_obj.GetFileVersion(file_path)
return version.strip()
def get_browser_major_version(file_path):
“”"
获取浏览器大版本号
:param file_path: 浏览器文件路径
:return: 浏览器大版本号
“”"
browser_ver = get_browser_version(file_path)
browser_major_ver = browser_ver.split(“.”)[0]
return browser_major_ver
def get_latest_browser_version(browser_major_ver):
“”"
获取匹配大版本的最新release版本
:param browser_major_ver: 浏览器大版本号
:return: 最新release版本号
“”"
latest_api = f"{CHROME_DRIVER_BASE_URL}/LATEST_RELEASE_{browser_major_ver}"
resp = requests.get(latest_api)
latest_driver_version = resp.text.strip()
return latest_driver_version
第二步,下载浏览器驱动
def download_browser_driver(latest_driver_version, browser_name):
“”"
下载浏览器驱动压缩包
:param browser_name: 浏览器名称
:param latest_driver_version: 浏览器的版本号
“”"
download_api = None
if browser_name == “Chrome”:
download_api = f"{CHROME_DRIVER_BASE_URL}/{latest_driver_version}/{CHROME_DRIVER_ZIP}"
elif browser_name == “Edge”:
download_api = f"{EDGE_DRIVER_BASE_URL}/{latest_driver_version}/{EDGE_DRIVER_ZIP}"
download_dir = os.path.join(str(BROWSER_DRIVER_DIR), os.path.basename(download_api))
下载,设置超时时间20s
resp = requests.get(download_api, stream=True, timeout=20)
if resp.status_code == 200:
with open(download_dir, ‘wb’) as fo:
fo.write(resp.content)
else:
raise Exception(“Download chrome driver failed”)
第三步,解驱动压缩包
解压后将原压缩包删除
def unzip_driver(browser_major_ver, browser_name):
“”"
解压驱动压缩包
:param browser_name: 浏览器名称
:param browser_major_ver: 浏览器大版本号
:return: 驱动文件路径
“”"
file_path = None
driver_path = None
if browser_name == “Chrome”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(CHROME_DRIVER_ZIP))
driver_path = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver, CHROME_DRIVER)
elif browser_name == “Edge”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(EDGE_DRIVER_ZIP))
driver_path = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver, EDGE_DRIVER)
browser_driver_dir = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver)
解压到指定目录
with zipfile.ZipFile(file_path, ‘r’) as zip_ref:
zip_ref.extractall(browser_driver_dir)
return driver_path
def remove_driver_zip(browser_name):
“”"
删除下载的驱动压缩包
:param browser_name: 浏览器名称
“”"
file_path = None
if browser_name == “Chrome”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(CHROME_DRIVER_ZIP))
elif browser_name == “Edge”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(EDGE_DRIVER_ZIP))
os.remove(file_path)
第四步,读写配置文件信息
def read_driver_mapping_json():
“”"
读取 mapping_json
:return: 字典格式
“”"
if os.path.exists(DRIVER_MAPPING_FILE):
with open(DRIVER_MAPPING_FILE) as fo:
try:
driver_mapping_dict = json.load(fo)
mapping.json内容为空时,返回空字典
except json.decoder.JSONDecodeError:
driver_mapping_dict = {}
else:
raise FileNotFoundError(f"{DRIVER_MAPPING_FILE} is not found")
return driver_mapping_dict
def write_driver_mapping_json(browser_major_ver, latest_driver_version, driver_path, browser_name):
“”"
写入 mapping_json
:param browser_major_ver: 浏览器大版本号
:param latest_driver_version: 浏览器驱动版本号
:param driver_path: 驱动存放路径
:param browser_name: 浏览器名称
“”"
mapping_dict = read_driver_mapping_json()
版本号在dict中(浏览器名不在dict中)
if browser_major_ver in mapping_dict:
mapping_dict[browser_major_ver][browser_name] = {
“driver_path”: driver_path,
“driver_version”: latest_driver_version
}
大版本号不在dict中,且字典不为空
elif browser_major_ver not in mapping_dict and mapping_dict:
mapping_dict[browser_major_ver] = {
browser_name:
{
“driver_path”: driver_path,
“driver_version”: latest_driver_version
}
}
字典为空
else:
mapping_dict = {
browser_major_ver:
{
browser_name:
{
“driver_path”: driver_path,
“driver_version”: latest_driver_version
}
}
}
mapping_dict.update(mapping_dict)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-pmEe6hXH-1713413646969)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!