软件测试/测试开发全日制|Pytest测试框架Fixture作用域详解

简介: 软件测试/测试开发全日制|Pytest测试框架Fixture作用域详解

前言

Pytest的fixtrue是存在作用域的,比如作用域为函数级别,那么没执行一条用例,就会重新执行一次fixtrue,如果是类级别,那么多个类执行时会在去执行fixture。fixture的作用域有5个,分别是: function,class,module,package,session。有了这些作用域我们可以不用重复的去执行fixture,从而节省时间。下面我们通过代码示例分别对这五种作用域来实验。

function作用域

function: 默认范围,fixture在测试结束时被销毁,示例代码如下:

import pytest


@pytest.fixture(scope="function")
def login():
    print("正在登录")


class TestDemo:
    def test_demo1(self, login):
        print("测试用例1")

    def test_demo2(self, login):
        print("测试用例2")

------------
运行结果如下:
============================= test session starts =============================
collecting ... collected 2 items

test_a.py::TestDemo::test_demo1 正在登录
PASSED                                   [ 50%]测试用例1

test_a.py::TestDemo::test_demo2 正在登录
PASSED                                   [100%]测试用例2


============================== 2 passed in 0.03s ==============================

我们可以看到正在登录执行了两次,也就是说我们的函数级别的fixture在每个用例执行前都会执行内部代码。

class作用域

class: fixture在类中的最后一个测试执行结束后销毁,示例代码如下:

import pytest


@pytest.fixture(scope="class")
def login():
    print("正在登录")


class TestDemo:
    def test_demo1(self, login):
        print("测试用例1")

    def test_demo2(self, login):
        print("测试用例2")

-------------------
运行结果如下:
============================= test session starts =============================
collecting ... collected 2 items

test_a.py::TestDemo::test_demo1 正在登陆
PASSED                                   [ 50%]测试用例1

test_a.py::TestDemo::test_demo2 PASSED                                   [100%]测试用例2


============================== 2 passed in 0.03s ==============================

我们可以看到与上面的方法级别相比,类级别只执行了一次正在登录

module作用域

module: fixture在模块中的最后一个测试执行结束后销毁,示例代码如下:

import pytest


@pytest.fixture(scope="module")
def login():
    print("正在登录")


class TestDemo:
    def test_demo1(self, login):
        print("测试用例1")

    def test_demo2(self, login):
        print("测试用例2")

def test_demo3(login):
    print("测试用例3")


def test_demo4(login):
    print("测试用例4")


--------------------
============================= test session starts =============================
collecting ... collected 4 items

test_a.py::TestDemo::test_demo1 正在登录
PASSED                                   [ 25%]测试用例1

test_a.py::TestDemo::test_demo2 PASSED                                   [ 50%]测试用例2

test_a.py::test_demo3 PASSED                                             [ 75%]测试用例3

test_a.py::test_demo4 PASSED                                             [100%]测试用例4


============================== 4 passed in 0.05s ==============================

我们可以看到正在登录执行了一次,我们在这个模块中有4条用例,有类也有函数,但就只执行了一次,说明我们定义的模块作用域生效了。

package作用域

package: fixture在包中的最后一个测试执行结束后销毁,整体的目录结构如下图:

在这里插入图片描述

  • 根目录:mytest
    • 二级目录: scripts
      • 三级目录:test_demo01.py
      • 三级目录: test_demo02.py
    • 二级目录: tests
      • 三级目录:test_demo01.py
      • 三级目录: test_demo02.py
    • 二级目录:conftest.py
    • 二级目录:test_demo.py

test_demo01.py内容如下:

def test_demo01(login):
    print("scripts包内的第一个测试用例")

其他的测试文件内容依次类推。

conftest.py内容如下:

import pytest

@pytest.fixture(scope="package")
# @pytest.fixture(scope="module")
def login():
    print("正在登陆")
    return "login"

执行结果如下:

======================================================================= test session starts =======================================================================
platform win32 -- Python 3.7.7, pytest-7.4.4, pluggy-1.2.0 -- C:\Users\89703\PycharmProjects\mytest\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\89703\PycharmProjects
mytest/mytest/scripts/test_demo02.py::test_demo02 scripts包内的第二个测试用例
PASSED
mytest/tests/test_demo01.py::test_demo01 tests包内的第一个测试用例
PASSED
mytest/tests/test_demo02.py::test_demo02 tests包内的第二个测试用例
PASSED

======================================================================== 5 passed in 0.04s ========================================================================

session作用域

session: fixture在整个测试周期执行结束后销毁,我们只需要修改conftest.py的内容,示例如下:

conftest.py内容:

import pytest

@pytest.fixture(scope="session")
# @pytest.fixture(scope="module")
def login():
    print("正在登陆")
    return "login"

执行结果如下:

======================================================================= test session starts =======================================================================
platform win32 -- Python 3.7.7, pytest-7.4.4, pluggy-1.2.0 -- C:\Users\89703\PycharmProjects\mytest\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\89703\PycharmProjects
collected 5 items                                                                                                                                                  

mytest/test_demo.py::test_demo 正在登陆
包外的测试用例
PASSED
mytest/mytest/scripts/test_demo01.py::test_demo01 scripts包内的第一个测试用例
PASSED
mytest/mytest/scripts/test_demo02.py::test_demo02 scripts包内的第二个测试用例
PASSED
mytest/tests/test_demo01.py::test_demo01 tests包内的第一个测试用例
PASSED
mytest/tests/test_demo02.py::test_demo02 tests包内的第二个测试用例
PASSED

======================================================================== 5 passed in 0.03s ========================================================================

总结

fixtrue作用范围:

  • function: 默认范围,fixture在测试结束时被销毁
  • class: fixture在类中的最后一个测试执行结束后销毁
  • module: fixture在模块中的最后一个测试执行结束后销毁
  • package: fixture在包中的最后一个测试执行结束后销毁
  • session: fixture在整个测试周期执行结束后销毁

希望本文能够帮到大家!

相关文章
|
21天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
43 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
9天前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
19 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
|
3月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
754 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
128 15
|
3月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
99 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
23天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
94 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
21天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
54 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
13天前
|
小程序 测试技术 数据安全/隐私保护
微信公众号接口测试实战指南
微信公众号接口测试是确保系统稳定性和功能完整性的重要环节。本文详细介绍了测试全流程,包括准备、工具选择(如Postman、JMeter)、用例设计与执行,以及常见问题的解决方法。通过全面测试,可以提前发现潜在问题,优化用户体验,确保公众号上线后稳定运行。内容涵盖基础接口、高级接口、微信支付和数据统计接口的测试,强调了功能验证、性能优化、安全保护及用户体验的重要性。未来,随着微信生态的发展,接口测试将面临更多挑战和机遇,如小程序融合、AI应用和国际化拓展。
|
2月前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。

热门文章

最新文章

  • 1
    小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
  • 2
    3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密
  • 3
    Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 5
    基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
  • 6
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 7
    「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
  • 8
    用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
  • 9
    阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
  • 10
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡