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

2、pytest核心功能(进阶用法)

目录

1、标记(Markers):

自定义插件

内置标记

2、夹具(Fixtures):

夹具得用法

夹具作用域

3、钩子(hook):


这篇是最重要的 测试文件中需要用到的 总的来说 有以下几个点 mark、fixture、hook、参数化、各种插件

1、标记(Markers):

  • 自定义插件

自定义标记得用途是筛选用例,只执行部分用例,共分为三个步骤

  1. 在pytest.init注册标记
     
    [pytest]
    
    addopts = -vs   # addopts 用于指定默认的命令行选项
    
    markers =
       login: 登录相关
       db: 数据库相关
       upload: 上传相关
  2. 在用例中通过装饰器添加标记
     
    @pytest.mark.db
    def test_example():
        print('使用数据库')
  3. 在命令行参数中加-m使用标记
     
    [pytest]
    
    addopts = -vs -m 'db or login'
    
    # -v(verbose 模式)用于显示详细的测试执行信息(包括每个测试用例的名称和状态)
    # -s(关闭输出捕获)允许测试中的 print 或日志输出直接显示在控制台(默认情况下 pytest 会捕获这些输出)。
    # -m(标记筛选)只运行被标记为 @pytest.mark.db 或 @pytest.mark.login 的测试用例。
  • 内置标记

内置标记由pytest注册的,目的不是为了筛选用例,而是对用例进行特殊处理,这种方法不需要注册可以直接使用

  • @pytest.mark.skip     > 无条件跳过用例
  • @pytest.mark.skipif   > 有条件跳过用例
  • @pytest.mark.xfail     > 预期失败
     
    @pytest.mark.skip(reason="Not implemented yet")
    def test_skip():
        assert 1 + 1 == 2

2、夹具(Fixtures):

  • 夹具得用法

    @pytest.fixture
    def numbers():
        print('我是前置代码 用例运行之前执行')
        yield
        print('我是后置代码 用例运行之前执行')
    其实这个东西你就理解成unittest框架中的setup teardown就是测试用例执行之前 执行之后自动运行的代码
     
  • 夹具作用域

        pytest中夹具的作用域 主要有五种: 

  1. function(默认作用域,每个测试函数都会调用一次夹具。
  2. class(每个测试类调用一次夹具
  3. module(每个测试模块也就是当前的测试文件调用一次夹具。
  4. package(每个目录调用一次夹具。
  5. session(整个测试会话也就是所有的测试用例只调用一次夹具
import pytest

# function scoped fixture
@pytest.fixture(scope="function")
def func_scope_fixture():
    print("Setup for each test function")
    yield
    print("Teardown for each test function")

附:

这个实际运用中,例如在接口自动化测试中, 可以通过fixture提供全局的session
实现TCP复用,参数共享,cookies关联,日志记录,BaseURL

3、钩子(hook):

钩子:被pytest自动调用的函数,在 pytest 中,钩子(hook)是特殊的插件机制,可以让你在测试运行的不同阶段插入自定义行为。

通过使用钩子,你可以扩展或修改 pytest 的默认行为。例如,你可以在每个测试开始或结束时执行特定的操作,或在测试收集阶段修改发现的测试项。
为了让 pytest 使用这些钩子,你需要将这些代码放在项目中的 conftest.py 文件中。pytest 会自动发现并应用 conftest.py 中定义的钩子。

  • 写在confest文件中
  • 符合hook规范定义import _pytest.hookspec
# conftest.py
def pytest_configure(config):
    print("Configuring the test session.")

def pytest_sessionstart(session):
    print("Test session starting.")


参数化和插件下篇说 写不动了hh
3、pytest实现参数化-CSDN博客

4、pytest常用插件-CSDN博客

相关文章:

  • CS实现票据样式效果
  • IIS漏洞再现
  • 七、GPIO中断控制器(2)—— pcf8575
  • 阅读li2019-DOT源码--逐步调试
  • 【机器学习】什么是逻辑回归?
  • 分页查询互动问题(管理端)
  • 测试工程 常用Python库
  • FPGA_DDS_IP核
  • 【RHCE】LVS-NAT模式负载均衡实验
  • 那些正常的动态规划
  • Tekton系列之实践篇-从触发到完成的完整执行过程
  • 流影---开源网络流量分析平台(一)(小白超详细)
  • SAP-ABAP:SAP报错全链路排查指南:从界面告警到代码级诊断
  • 于纷扰中寻静谧:正念观照的智慧之旅
  • XSS复现漏洞简单前八关靶场
  • G口服务器和普通服务器之间的区别
  • LeetCode热题100JS(/100)第十三天|34
  • C语言:扫雷
  • 为什么不同的损失函数可以提升模型性能?
  • 使用QRencode生成二维码
  • 图忆|上海车展40年:中国人的梦中情车有哪些变化(下)
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物
  • 美国证实加拿大及墨西哥汽车零部件免关税
  • 魔都眼|石库门里看车展,五一来张园体验城市“漫时光”
  • 案件发回重审,李在明参选韩总统之路再添波折
  • 据报特斯拉寻找新CEO,马斯克财报会议上表态:把更多时间投入特斯拉