#!/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]))