pytest + yaml 框架 -53.yaml 用例规范与全部关键字总结

前言

v1.4.4 版本新增对yaml 用例格式校验,不合法的用例格式不会被执行,避免出现用例格式不合法导致的报错。

全部关键字总结

config 中可用关键字

关键字 可支持类型 功能说明
name 可选 str 没什么用,仅描述当前yaml 用例的名称
base_url 可选 str, 支持格式:http://、https://、ws://、wss:// 当前yaml用例公共环境地址
variables 可选 dict 声明当前yaml文件公共变量
fixtures 可选,str or list 支持格式: "xx", "xx,yy" , ["xxx", "yyy"] 当前yaml文件公共fixtures
<think>嗯,用户想搭建一个结合Selenium、pytestYaml和Allure的UI自动化测试框架。我需要先理清楚这些工具各自的作用和如何整合在一起。首先,Selenium用于浏览器自动化,pytest是测试框架Yaml用来管理测试数据,Allure生成报告。然后,按照常见的分层架构,比如Page Object模式,可能需要分层次结构。用户可能已经了解过一些相关资料,比如引用里的三层架构:基础封装层、PO层、测试用层。需要参考这些结构来设计框架。同,用户提到使用Yaml,所以数据驱动部分需要将测试数据存储在Yaml文件中,通过pytest读取。 接下来要考虑目录结构。通常会有config放配置文件,test_datas存放Yaml数据,page_object是页面对象,test_cases是测试用,utils放工具类,比如读取Yaml的方法。还有pytest的配置文件pytest.ini,以及Allure的报告生成配置。 然后,具体步骤可能需要分环境配置,比如用ini文件管理测试URL和用户信息。接着是基础层的封装,比如BasePage,处理Selenium的初始化和公共方法。页面对象层继承BasePage,每个页面一个类,封装元素定位和操作方法。测试数据用Yaml存储,比如登录的测试用,包括用户名、密码和预期结果。测试用层使用pytest的参数化来读取Yaml数据,驱动测试执行。还要用Allure添加测试步骤和描述,增强报告的可读性。 最后,执行测试并生成Allure报告,可能需要命令行参数,比如pytest运行测试并指定Allure结果目录,然后用Allure命令生成HTML报告。用户可能还需要持续集成,比如Jenkins,但当前问题可能先聚焦框架搭建。需要注意的点包括:数据驱动的实现方式,PageObject的设计是否正确,如何处理异常和截图,以及如何配置Headless模式。还要确保Yaml文件被正确读取,测试用的参数化是否正确应用。此外,Allure的注解使用是否恰当,比如@allure.step和@allure.title,这些都能提升报告质量。可能用户会遇到的问题包括环境配置错误,元素定位方式变化,或者Yaml数据读取失败。需要给出一些常见问题解决方法,比如检查文件路径,确保依赖库安装正确,以及使用合适的等待策略避免元素找不到的情况。总结下来,步骤应该是:项目结构搭建、环境配置、基础层封装、页面对象编写、Yaml测试数据设计、测试用编写并参数化、Allure集成和报告生成。同,提供示代码和配置文件,帮助用户具体实现。</think>### 构建基于 Selenium + pytest + YAML + Allure 的UI自动化测试框架 #### 一、框架分层设计(参考Page Object模式) 1. **基础封装层 (BasePage)** - 封装Selenium基础操作:元素定位、页面跳转、等待机制等 -代码: ```python # base/base_page.py from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.support.wait import WebDriverWait class BasePage: def __init__(self, driver: WebDriver): self.driver = driver self.wait = WebDriverWait(driver, 10) def find_element(self, locator): return self.wait.until(lambda d: d.find_element(*locator)) def get_screenshot(self, name): self.driver.save_screenshot(f"screenshots/{name}.png") ``` 2. **页面对象层 (Page Objects)** - 每个页面一个类,封装元素定位和操作方法 -代码: ```python # page_objects/login_page.py from base.base_page import BasePage from selenium.webdriver.common.by import By class LoginPage(BasePage): username_input = (By.ID, "username") password_input = (By.ID, "password") submit_btn = (By.XPATH, "//button[@type='submit']") def login(self, username, password): self.find_element(self.username_input).send_keys(username) self.find_element(self.password_input).send_keys(password) self.find_element(self.submit_btn).click() ``` 3. **测试用层 (Test Cases)** - 使用pytest编写测试用,结合YAML实现数据驱动 -代码: ```python # test_cases/test_login.py import pytest import allure from page_objects.login_page import LoginPage @allure.feature("登录模块") class TestLogin: @pytest.mark.parametrize("case", yaml.load("test_datas/login_cases.yaml")) @allure.story("用户登录测试") def test_user_login(self, setup_teardown, case): driver = setup_teardown login_page = LoginPage(driver) with allure.step("执行登录操作"): login_page.login(case["username"], case["password"]) with allure.step("验证登录结果"): assert "欢迎页" in driver.title ``` #### 二、YAML数据驱动实现 1. 创建测试数据文件: ```yaml # test_datas/login_cases.yaml - name: 正确登录 username: "admin" password: "123456" expected: "success" - name: 错误密码 username: "admin" password: "wrong" expected: "fail" ``` 2. 读取YAML工具类: ```python # utils/yaml_reader.py import yaml def load_yaml(file_path): with open(file_path, encoding='utf-8') as f: return yaml.safe_load(f) ``` #### 三、Allure报告集成 1. 安装Allure: ```bash pip install allure-pytest ``` 2. 添加Allure注解: ```python @allure.title("测试登录功能 - {case[name]}") @allure.severity(allure.severity_level.CRITICAL) ``` #### 四、框架目录结构 ``` project/ ├── config/ │ └── env.ini ├── test_datas/ │ └── login_cases.yaml ├── page_objects/ │ └── login_page.py ├── test_cases/ │ └── test_login.py ├── utils/ │ └── yaml_reader.py ├── conftest.py └── pytest.ini ``` #### 五、运行配置(pytest.ini) ```ini [pytest] addopts = --alluredir=./allure-results testpaths = test_cases python_files = test_*.py ``` #### 六、执行测试 ```bash # 运行测试 pytest # 生成报告 allure serve allure-results ``` ### 关键优化点 1. **并发执行**:在`pytest.ini`中添加`-n auto`参数使用pytest-xdist并行执行[^3] 2. **Headless模式**:在`env.ini`中配置浏览器无头模式[^3] 3. **失败重试**:通过`pytest-rerunfailures`插件实现失败用自动重试 4. **环境隔离**:使用`conftest.py`管理不同环境的配置切换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值