当前位置: 首页 > article >正文

pytest自动化测试 - 构造“预置条件”的几种方式

<< 返回目录

1 pytest自动化测试 - 构造“预置条件”的几种方式

1.1 使用夹具构造预置条件

  在夹具章节中,我们介绍了夹具的作用,其中一项就是构造预置条件。@pytest.fixture装饰器中如果测试数据使用yield返回,则yield前的语句为预置条件语句。

import pytest

@pytest.fixture
def setup_resource():
    # 准备资源
    resource = "This is a test resource"
    print("\n" + "="*65)
    print("BEGIN: 用例预置条件.")
    yield resource
    # 清理资源
    print("END: 用例后置条件.")

def test_with_fixture(setup_resource):
    print("第一个用例开始".center(70))
    assert "test resource" in setup_resource
    print("第一个用例结束".center(70))

def test_another_with_fixture(setup_resource):
    print("第二个用例开始".center(70))
    assert len(setup_resource) > 10
    print("第二个用例结束".center(70))

  夹具默认情况下是用例范围生效,即夹具中的预置条件在每个用例都会执行。

1.2 在测试类中使用setup方法构造预置条件

  类中的setup函数用于构造预置条件,它在类的每个测试用例执行前都会执行一次。

import pytest

class TestExample:
    def setup_method(self):
        print("\n" + "=" * 65)
        print("预置条件")
        self.data = [4, 5, 6]

    def test_sum_in_class_001(self):
        print("第1个测试用例开始")
        assert sum(self.data) == 15
        print("第1个测试用例结束")

    def test_sum_in_class_002(self):
        print("第2个测试用例开始")
        assert 6 in self.data
        print("第2个测试用例结束")

输出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 items

test_ft_setup_001.py 
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束
.
=================================================================
预置条件
第2个测试用例开始
第2个测试用例结束
.

============================== 2 passed in 0.02s ==============================

1.3 在模块中使用setup方法构造预置条件

  前一节介绍了如果在类中使用setup方法构造预置条件,现在介绍模块中的setup方法,与类中的setup方法不同的是模块中的setup函数名有讲究,如下所示:

  • 每个用例都执行的预置条件:函数名固定使用def setup_function()
import pytest

data = [4, 5, 6]

def setup_function():
    print("\n" + "=" * 65)
    print("预置条件")

def test_sum_in_module_001():
    print("第1个测试用例开始")
    assert sum(data) == 15
    print("第1个测试用例结束")

def test_sum_in_module_002():
    print("第2个测试用例开始")
    assert 6 in data
    print("第2个测试用例结束")

输出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 items

test_ft_setup_002.py 
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束
.
=================================================================
预置条件
第2个测试用例开始
第2个测试用例结束
.

============================== 2 passed in 0.01s ==============================

  从报文可以看到,每个用例执行前都执行了预置条件。

  • 模块级的预置条件:即,本模块中的第一个测试用例执行前执行一次,函数名固定使用``
import pytest

data = [4, 5, 6]

def setup_module():
    print("\n" + "=" * 65)
    print("预置条件")

def test_sum_in_module_001():
    print("第1个测试用例开始")
    assert sum(data) == 15
    print("第1个测试用例结束\n")

def test_sum_in_module_002():
    print("第2个测试用例开始")
    assert 6 in data
    print("第2个测试用例结束")

输出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 items

test_ft_setup_002.py 
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束

.第2个测试用例开始
第2个测试用例结束
.

============================== 2 passed in 0.01s ==============================

  从报文中可以看到,预置条件只执行了一次,第2个用例执行时便没有执行。

🕮忠告
  虽然pytest提供了函数范围、类范围、模块范围等的预置条件构造方法,但从作者多年的测试工作经验来看,每个测试用例单独构造预置条件和后置条件是一种更合理的安排方式!否则极易出现用例执行依赖,极大增加测试用例的排错工作量!

作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来源自豆包AI,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.

<< 返回目录


http://www.kler.cn/a/518612.html

相关文章:

  • 非根目录部署 nextjs 项目,资源文件 请求404 的问题
  • 【开源免费】基于Vue和SpringBoot的医院资源管理系统(附论文)
  • 微信小程序-点餐(美食屋)02开发实践
  • 12Express简易实战项目(编写api)
  • 数组
  • PSD是什么图像格式?如何把PSD转为JPG格式?
  • RAG如何让生成AI更智能?最新方法与优劣深度解析
  • 【linux】linux c判断IP地址类型及是否合法
  • Spring MVC中HandlerInterceptor的作用及应用场景
  • CVE-2025-0411 7-zip 漏洞复现
  • 防抖与节流:优化高频事件的两种利器
  • 「pandas」python pandas 初步、数据结构Series、DataFrame、MultiIndex
  • 【最小堆】【动态规划】力扣264. 丑数 II
  • 【Elasticsearch】eland是啥?
  • F#语言的图形用户界面
  • MarsCode青训营打卡Day11(2025年1月24日)|稀土掘金-373.字母出现次数的统计
  • 【OpenGL】OpenGL游戏案例(一)
  • Leetcode-两数之和
  • 【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)
  • flutter跨端UI框架简介
  • 简识JVM中的STW
  • 【二叉树】4. 判断一颗二叉树是否是平衡二叉树。5. 对称二叉树。6. 二叉树的构建及遍历 7. 二叉树的分层遍历 。
  • 使用 .NET Core 6.0 Web API 上传单个和多个文件
  • 12、MySQL锁相关知识
  • 分布式系统架构怎么搭建?
  • Flutter_学习记录_导航和其他