python+selenium(4)---pytest测试用例参数话之conftest.py和yield简单的使用

本文介绍了conftest.py在pytest中的作用,包括其特点、配置注意事项以及与fixture的结合使用。conftest.py用于存放参数化函数,可应用于同一package内的所有测试用例,实现数据共享。fixture的scope参数控制作用范围,如session、module、class和function。此外,通过yield可以实现类似set up和tear down的效果。

conftest.py特点

conftest.py 文件中存放参数化函数,可作用于模块内的所有测试用例

conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置,pytest默认读取里面的配置

conftest.py配置需要注意以下点:

  • conftest.py配置脚本名称是固定的,不能改名称
  • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  • 不需要import导入 conftest.py,pytest用例会自动查找

conftest.py用法

conftest文件实际应用需要结合fixture来使用

1、fixture源码详解

fixture(scope='function',params=None,autouse=False,ids=None,name=None):
fixture里面有个scope参数可以控制fixture的作用范围,scope:有四个级别参数"function"(默认),"class","module","session

params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture
ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg

<think>嗯,用户想了解如何使用PythonSeleniumPytestPOM模式构建自动化测试框架并进行封装。首先,我需要回忆一下这些工具设计模式的基本概念。Python是编程语言,Selenium用于浏览器自动化,Pytest是测试框架,而POM(Page Object Model)是一种设计模式,用于提高测试代码的可维护性复用性。 接下来,用户可能需要一个结构化的步骤说明,所以应该分步骤讲解,比如环境搭建、POM模式实现、测试用例编写、Pytest集成、封装优化等。每个部分需要详细说明,并且给出代码示例,这样用户更容易理解。 用户提供的引用内容中提到了Pytest的官网测试示例,以及页面对象的好处,比如降低修改影响、复用代码等。需要确保在回答中引用这些内容,比如在讲解POM时引用[^2]提到的抽象出对象的好处。 另外,用户可能对框架的目录结构不太清楚,需要给出一个典型的项目结构示例,比如将页面对象、测试用例、配置文件等分开存放。同时,代码示例要符合POM模式,比如BasePage类封装通用方法,具体的页面类继承它,并在测试用例使用这些页面类。 还需要考虑如何集成Pytest的特性,比如fixture,用于管理浏览器实例,这样每个测试用例可以复用同一个浏览器会,提高效率。在示例代码中展示conftest.py使用,这样用户能明白如何全局管理资源。 封装部分可能需要讲解如何将常用功能如元素定位、断言、报告生成等进行封装,引用[^4]提到的拓展功能可能需要对应到配置文件或命令行参数的封装,但用户的问题中可能更关注框架本身的封装,所以重点放在页面对象测试用例的分离。 最后,生成的相关问题需要与用户当前的问题相关,比如框架优化方法、Pytest的高级功能、元素定位策略持续集成等,这样用户如果有进一步的需求,可以继续深入探索。</think>### Python+Selenium+Pytest+POM自动化测试框架构建指南 根据《Selenium自动化测试——基于Python语言》的实践建议[^2],以下是分步构建方案: #### 一、环境搭建 ```bash # 安装核心库 pip install selenium pytest pytest-html ``` #### 二、项目目录结构 ``` project/ ├── pages/ # 页面对象 ├── testcases/ # 测试用例 ├── conftest.py # Pytest配置 └── config/ # 配置文件 ``` #### 三、POM模式实现 1. **基础页面类**(base_page.py) ```python from selenium.webdriver.support.wait import WebDriverWait class BasePage: def __init__(self, driver): self.driver = driver self.wait = WebDriverWait(driver, 10) def find_element(self, locator): return self.wait.until(EC.presence_of_element_located(locator)) ``` 2. **登录页面对象**(login_page.py) ```python class LoginPage(BasePage): username_loc = (By.ID, "username") password_loc = (By.NAME, "password") def input_username(self, text): self.find_element(self.username_loc).send_keys(text) def input_password(self, text): self.find_element(self.password_loc).send_keys(text) ``` #### 四、测试用例实现 ```python # test_login.py import pytest class TestLogin: @pytest.fixture(autouse=True) def setup(self, browser): self.driver = browser self.login_page = LoginPage(self.driver) def test_valid_login(self): self.login_page.input_username("admin") self.login_page.input_password("123456") # 添加断言逻辑... ``` #### 五、Pytest集成封装 1. **浏览器管理**(conftest.py) ```python import pytest from selenium import webdriver @pytest.fixture(scope="session") def browser(): driver = webdriver.Chrome() driver.implicitly_wait(10) yield driver driver.quit() ``` 2. **执行命令生成报告** ```bash pytest --html=report.html --self-contained-html ``` #### 六、框架优化方向 1. 配置分离:使用YAML/JSON管理测试数据 2. 异常处理:封装智能等待机制 3. 日志系统:集成logging模块 4. 持续集成:对接Jenkins/GitHub Actions
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值