- 创建了基本的项目结构 - 添加了 .gitignore 文件 - 配置了基本的开发环境 - 添加清华镜像源 - 设置了基础的文件夹和文件(如 commons, utils, POM, pytest.ini) 项目说明: - [项目名称]:Web自动化测试 - [项目描述]:基于pytest,selenium的自动化测试工具 - [开发环境]:Python
100 lines
2.4 KiB
Python
100 lines
2.4 KiB
Python
#!/usr/bin/env python
|
|
# coding=utf-8
|
|
|
|
"""
|
|
@author: CNWei
|
|
@Software: PyCharm
|
|
@contact: t6i888@163.com
|
|
@file: conftest
|
|
@date: 2025/4/2 21:57
|
|
@desc:
|
|
"""
|
|
import json
|
|
import logging
|
|
from itertools import chain
|
|
import inspect
|
|
|
|
import allure
|
|
from pytest_xlsx.file import XlsxItem
|
|
import pytest
|
|
from selenium.webdriver import Chrome
|
|
|
|
from POM.login_page import LoginPage
|
|
from commons.driver import KeyWordDriver
|
|
from utils.file_processors.file_handle import FileHandle
|
|
from commons.templates import Template
|
|
from commons.settings import configs
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
# @pytest.fixture()
|
|
def login_ok():
|
|
username = configs.username
|
|
password = configs.password
|
|
login = LoginPage()
|
|
logger.debug("fixture-login_ok 我被执行了!!!")
|
|
login.login(username, password)
|
|
yield login.driver
|
|
login.driver.quit()
|
|
|
|
|
|
file = FileHandle(configs.variable)
|
|
|
|
|
|
def use_cases_converter(xlsx_item: dict) -> list:
|
|
# 变量替换
|
|
logger.info(f"变量替换前: {xlsx_item}")
|
|
step_str = FileHandle.to_string(xlsx_item)
|
|
xlsx_item = FileHandle.to_dict(Template(step_str).render(file))
|
|
logger.info(f"变量替换: {xlsx_item}")
|
|
|
|
new_values = []
|
|
value = list(xlsx_item.values())
|
|
for item in value:
|
|
if not isinstance(item, list):
|
|
new_values.append(item)
|
|
else:
|
|
new_values.extend(item)
|
|
|
|
logger.info(f"转换后的测试用例: <===={new_values}")
|
|
return new_values
|
|
|
|
|
|
kwd = KeyWordDriver()
|
|
|
|
|
|
# hook(钩子)
|
|
def pytest_xlsx_run_step(item: XlsxItem):
|
|
step = item.current_step
|
|
logger.info(f"转换前的测试用例: ====>{step}")
|
|
step = use_cases_converter(step)
|
|
# print(step)
|
|
|
|
content = slice(1, 2)
|
|
key = slice(2, 3)
|
|
values = slice(3, None)
|
|
|
|
remark = step[content].pop()
|
|
keyword = step[key].pop()
|
|
_arges = [item for item in step[values] if item is not None]
|
|
|
|
logger.info(f"标记: {keyword} -- 参数: {_arges}")
|
|
try:
|
|
func = getattr(kwd, keyword)
|
|
logger.info(f"当前执行的操作:{func.__name__}")
|
|
func(*_arges)
|
|
except AttributeError as e:
|
|
logger.error(f'标记 {keyword} 错误: {e}')
|
|
raise e
|
|
|
|
if remark:
|
|
# 截图
|
|
png = kwd.driver.get_screenshot_as_png() # 保留为二进制格式
|
|
# 将截图报错附加到allure
|
|
allure.attach(png, remark, allure.attachment_type.PNG)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print(bool([1, 2, 3]))
|