自动化测试框架Pytest(二)——前后置处理

有一些初始化配置和测试之后的收尾,只需要处理一次,这个时候我们就要用到夹具。


一、pytest的前后置(固件、夹具)处理

1、setup/teardown,setup_class/teardown_class

setup/teardown:在每个用例的前后都会执行

setup_class/teardown_class:在每个类的前后都会执行

  • import pytest class TestLogin: def setup_class(self): print('------------------setup_class-----------------') def setup(self): print('------------------setup-----------------') def test_01(self): print('测试百里守约') def test_02(self): print('测试娜可露露') def test_03(self): print('测试蔡文姬') def teardown(self): print('--------------------teardown_----------------') def teardown_class(self): print('--------------------teardown_class----------------')

二、使用fixture装饰器来实现部分用例的前后置

@pytest.fixture(scope="",params="",autouse="",ids="",name="")
scope:标记的作用域。function(默认)、class、module、packageparams:参数化autouse:True自动执行,默认是Falseids:当使用params参数化时,给每一个值设置一个变量名,意义不大name:给标记的方法取一个别名

1、scope,默认是function

import pytest
@pytest.fixture(scope="function")def my_fixture():    print('\n前置方法,可以实现部分及全部用例的前置')    yield    print('\n后置方法,可以实现部分及全部用例的后置')
class Test03:    def test_01(self):        print('测试百里守约')
    def test_02(self, my_fixture):        print('测试娜可露露')
    def test_03(self):        print('测试蔡文姬')

生成前后置:

2、autouse自动使用

import pytest
@pytest.fixture(scope="function", autouse=True)def my_fixture():    print('\n前置方法,可以实现部分及全部用例的前置')    yield    print('\n后置方法,可以实现部分及全部用例的后置')
class Test03:    def test_01(self):        print('测试百里守约')
    def test_02(self):        print('测试娜可露露')
    def test_03(self):        print('测试蔡文姬')

所有方法都加上前后置:

如果改成class

@pytest.fixture(scope="class", autouse=True)

3、params,用例可以使用提前准备的参数

import pytest
@pytest.fixture(params=['成龙','甄子丹'] )def my_fixture(request):    print('\n前置')    yield request.param    print('\n后置')
class Test03:    def test_01(self, my_fixture):        print('测试百里守约 '+my_fixture)
    def test_02(self):        print('测试娜可露露')
    def test_03(self):        print('测试蔡文姬')

4、name,取个别名

import pytest
@pytest.fixture(params=['成龙','甄子丹'], name="wufantest")def my_fixture(request):    print('\n前置')    yield request.param    print('\n后置')
class Test03:    def test_01(self, wufantest):        print('测试百里守约 '+wufantest)
    def test_02(self):        print('测试娜可露露')
    def test_03(self):        print('测试蔡文姬')

三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用

  1. conftest.py文件是单独存放的一个夹具配置文件,名称不能更改。

  2. 用处可以在不同的py文件中使用同一个fixture函数。

  3. 原则上conftest.py需要和运行的用例放到统一层。并且不需要做任何的imprt导入的操作。

conftest.py:

import pytest
def read_data():    return ['sql111','sql222']
@pytest.fixture(params=read_data(), name="wufantest")def execute_sql(request):    print('\n执行sql')    yield request.param    print('\n关闭数据库连接')

用例类:​​​​​​​

import pytest
class Test04:    def test_01(self,wufantest):        print('测试百里守约'+wufantest)
    def test_02(self):        print('测试娜可露露')
    def test_03(self):        print('测试蔡文姬')

四、总结


setup/teardown,setup_class/teardown_class 它是作用于所有用例或者所有的类
@pytest.fixtrue() 它的作用是既可以部分也可以全部前后置。
conftest.py和@pytest.fixtrue()结合使用,作用于全局的前后置。


学习资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我的qq群大家一起讨论交流,里面也有各种软件测试资料和技术交流。

### Pytest 使用指南 #### 安装 Pytest 为了使用 Pytest 进行自动化测试,首先需要安装该工具。可以通过 pip 工具来完成安装: ```bash pip install pytest ``` 这将下载并安装最新版本的 Pytest 及其依赖项[^1]。 #### 编写第一个测试案例 编写测试脚本非常直观。创建一个名为 `test_sample.py` 的文件,在其中定义函数和对应的断言语句来进行验证: ```python def inc(x): return x + 1 def test_answer(): assert inc(3) == 4 # 此处应为等于4而非5, 更正了原示例中的错误[^2] ``` 上述代码片段展示了最基础的形式——通过简单的数学运算检验预期结果是否正确。 #### 配 Pytest 行为 对于大型项目来说,默认配可能无法满足需求。此时可以利用配文件来自定义行为模式。例如修改哪些类型的 Python 文件会被视为测试模块、以及它们内部应该遵循什么样的命名约定等: ```ini [pytest] ; 执行check_开头的所有文件 python_files = check_* test_* ; 执行所有的以Test和Check开头的类 python_classes = Test* Check* ; 执行所有以test_和check_开头的方法 python_functions = check_* test_* ``` 注意:Windows 系统下的 `pytest.ini` 文件不允许含有中文字符或注释[^3]。 #### 支持多种场景测试 除了基本的功能外,Pytest 还能很好地集成其他技术栈用于更复杂的测试环境搭建工作,如 Web 应用程序 (借助 Selenium),移动应用(Appium), API 接口(requests库)[^4]。 --- ### 最佳实践建议 - **保持简洁明了**: 尽量让每个测试只专注于单一职责;如果某个特定逻辑变得过于复杂,则考虑将其拆分为多个独立的小型测试。 - **合理组织结构**: 对于较大的工程而言,良好的目录布局有助于提高可维护性和协作效率。通常会按照功能特性划分不同的子包,并在此基础上进一步细分至具体业务领域内。 - **善用 fixture 功能**: Fixture 是一种特殊机制允许共享资源设过程而无需重复编码。这对于数据库连接池初始化、模拟外部服务调用等情况特别有用。 - **持续集成(CI)**: 结合 CI 平台定期自动触发整个项目的全面回归测试流程,及时发现潜在缺陷所在位以便快速修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值