Files
AppAutoTest/test_cases/test_keyword_sample.py
CNWei 684bb2c0cd feat: 新增DDT模式的支持
- 新增 data_loader 数据驱动加载器。
- 新增 test_keyword_sample 测试执行代码
2026-01-23 17:55:20 +08:00

83 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# coding=utf-8
"""
@author: CNWei,ChenWei
@Software: PyCharm
@contact: t6g888@163.com
@file: test_keyword_sample
@date: 2026/1/23 17:48
@desc:
"""
import pytest
import logging
from core.driver import CoreDriver
from utils.data_loader import DataLoader
from core.settings import BASE_DIR
logger = logging.getLogger(__name__)
# 假设数据文件路径
DATA_FILE = BASE_DIR / "test_cases" / "data" / "login_flow.xlsx"
# 或者 "login_flow.yaml" —— 代码不需要改动,只需要改文件名
class TestKeywordDriven:
def run_step(self, driver: CoreDriver, step: dict):
"""
核心执行引擎:反射调用 CoreDriver 的方法
"""
action_name = step.get("action")
if not action_name:
return # 跳过无效行
# 1. 获取 CoreDriver 中对应的方法
if not hasattr(driver, action_name):
raise ValueError(f"CoreDriver 中未定义方法: {action_name}")
func = getattr(driver, action_name)
# 2. 准备参数
# 你的 CoreDriver 方法签名通常是 (by, value, [args], timeout)
# 我们从 step 字典中提取这些参数
kwargs = {}
if "by" in step and step["by"]: kwargs["by"] = step["by"]
if "value" in step and step["value"]: kwargs["value"] = step["value"]
# 处理特殊参数,比如 input 方法需要的 text或者 assert_text 需要的 expected_text
# 这里做一个简单的映射,或者在 Excel 表头直接写对应参数名
if "args" in step and step["args"]:
# 假设 input 的第三个参数是 text这里简单处理实际可根据 func.__code__.co_varnames 动态匹配
if action_name == "input":
kwargs["text"] = str(step["args"]) # 确保 Excel 数字转字符串
elif action_name == "assert_text":
kwargs["expected_text"] = str(step["args"])
elif action_name == "explicit_wait":
# 支持你封装的 resolve_wait_method
# 此时 method 参数就是 args 列的内容,例如 "toast_visible:成功"
kwargs["method"] = step["args"]
logger.info(f"执行步骤 [{step.get('desc', '无描述')}]: {action_name} {kwargs}")
# 3. 执行调用
func(**kwargs)
def test_execute_from_file(self, driver):
"""
主测试入口
"""
# 1. 加载数据 (自动识别 Excel/YAML)
# 注意:实际使用时建议把 load 放在 pytest.mark.parametrize 里
# 这里为了演示逻辑写在函数内
if not DATA_FILE.exists():
pytest.skip("数据文件不存在")
steps = DataLoader.load(DATA_FILE)
# 2. 遍历执行
for step in steps:
self.run_step(driver, step)