Pytest测试框架

Pytest测试框架

测试用例发现规则

  1. 默认从当前或者指定文件夹下递归查找文件名以test_开头或者_test结尾的.py文件
  2. Test 开头且(不继承自 unittest.TestCase或者含有init方法的类)的类
  3. 函数名以 test_ 开头的测试用例方法

自定义测试用例发现规则

我们也可以在pytest.ini配置文件指定测试发现策略

# 设置递归查找的测试用例文件夹
testpaths = ./testcases
# 改变模块查找规则
python_files = test_*.py
# 改变类的查找规则
python_classes = Test*
# 改变函数的查找规则
python_function = test_*

测试用例执行规则

测试用例的默认执行方式有两种

  • 通过pytest.main()方法执行测试用例

    if __name__ == "__main__":
        pytest.main(["testcase/test_api.py::TestApi", "-vs"]) # 将命令以列表的形式传参
    
  • 通过命令行的方式执行测试用例

    • pytest ./testcase (直接调用pytest命令执行)
    • python -m pytest(调用python解释器,以pytest模块化的方式执行测试用例,推荐)

当然,我们可以针对性的使用参数来指定对应的测试用例的执行:

  • -k 匹配函数名执行用例

    pytest -k "test_login or test_register" # 选择测试用例名称为test_login or test_register的用例执行
    
  • -m 指定测试用例标签执行

    @pytest.mark.smoke # 将该用例添加到smoke标签内
    def test_01(self):
        pass
    
    pytest -m "smoke" # 执行smoke标签的用例
    

    我们也可以在pytest.ini声明标签的种类

    markers = 
        smoke: 冒烟测试用例
        user: 用户管理模块用例
    

pytest.ini配置文件

pytest.ini 文件是 pytest 的配置文件,用于设置全局选项、标记、自定义行为以及插件的配置。它允许你定义某些 pytest 参数的默认值,从而减少在命令行中重复输入参数的需要。pytest.ini 文件通常放在项目的根目录下,pytest 在命令行或是主函数时都会自动加载并应用其中的配置。

pytest.ini常见配置

[pytest]
# 执行命令默认添加参数
addopts = -vs -m "smoke"

# 指定测试目录
testpaths = /testcase

# 基础路径,测试用例可以直接传入使用
base_url: https://api.weixin.qq.com

# 自定义标记
markers =
    slow: 标记慢速测试
    smoke: 标记冒烟测试
    login: 标记与登录相关的测试

# 配置日志级别
log_cli = true
log_cli_level = INFO
log_file = pytest.log
log_file_level = DEBUG

# 配置最大失败数
maxfail = 2

# 添加 Python import 路径
pythonpath = src

pytest常见插件

pytest
pytest-html			pytest html测试报告
pytest-xdist  		多线程执行
pytest-ordering		控制用例的执行顺序
pytest-rerunfailures失败用例重跑
pytest-base-url		基础路径
allure-pytest		生成allure测试报告

安装pytest第三方插件,将以下内容写入requirements.txt文件,执行命令pip install -r .\requirements.txt一键下载

pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
pytest-base-url
allure-pytest

pytest常见参数

# pytest 常见参数示例

# 1. 控制输出详细程度
pytest -v                # 增加输出详细信息
pytest -q                # 减少输出详细信息
pytest -s			    # 禁用捕获标准输出和标准错误输出

# 2. 测试执行控制
pytest -x                # 在第一个测试失败后停止
pytest --maxfail=2       # 失败两次后停止
pytest --lf              # 只运行上次失败的测试
pytest --ff              # 优先运行上次失败的测试

# 3. 选择性测试
pytest -k "expression"   # 通过表达式筛选测试用例
pytest -m "marker"       # 通过标记筛选测试用例

# 6. 并行执行
pytest -n <num>          # 使用多进程并行执行测试

# 8. 日志输出
pytest --log-cli-level=INFO    # 设置命令行日志输出级别
pytest --log-file=log.txt      # 将日志输出到文件

# 10. 仅收集测试
pytest --collect-only         # 仅收集测试用例,不执行

pytest.fixture固件

pytest固件主要作用是在执行测试用例/类/模块/会话前后做一些操作。

在测试用例前后执行操作

def setup(self):
    print("测试用例前执行操作")

def teardown(self):
    print("测试用例后执行操作")

def setup_class(self):
    print("测试类前执行操作")

def teardown_class(self):
    print("测试类后执行操作")

在pytest当中引入了一个强大的功能fixture,可以取代setup/teardown方法实现前后置操作,也可以实现传参功能

@pytest.fixture(
    scope="function", # 作用域:function/class/module/session
    autouse=False, # 是否自动执行:True/False
    params=["mysql", "redis"], # 传入参数(每次只传入一个值,有多少个参数执行多少遍case)
    ids=["m", "r"], # 传入参数别名(也可以为case取别名)
    name="cm", # 夹具别名,当声明之后只能用这个别名
)

fixture实现前后置操作

@pytest.fixture(
    scope="function", # 设置执行级别为function
    autouse=True, # 每个测试用例前后默认执行
)
def connect_mysql():
    logger.info("前置操作")
    yield # 测试用例执行
    logger.info("后置操作")

fixture实现参数传递

@pytest.fixture(
    scope="function",
    autouse=False,
    params=["mysql", "redis"], # 传入参数(每次只传入一个值,有多少个参数执行多少遍case)
    ids=["m", "r"], # 传入参数别名(也可以为case取别名)
    name="cm", # 夹具别名,当声明之后只能用这个别名
)
def connect_mysql(request):  # 传参需要传递request
    logger.info("前置操作")
    yield request.param  # 传参固定写法
    logger.info("后置操作")
    
def test_01(self,cm): # 传入fixture别名
    logger.info(cm)  # 接受并打印夹具传来的参数 # mysql、redis

test_01测试用例会根据传入参数的个数去执行,执行的结果如下:

image-20241014112136331

一般而言我们把fixture存放在当前文件夹内的conftest.py文件,表示当前fixture可适用于该文件夹内的全部测试用例。便于代码的管理维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV】图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

idea压缩js,css

这是需要的jar包(文章顶部也可以下载) 地址:https://download.csdn.net/download/yuzheh521/90109966?spm1001.2101.3001.9500 压缩js arguments: -jar E:\swj\jar_packages\css_js_compress\yuicompressor-2.4.8.jar --type js --charset utf-8 $FilePath$ -o $FileNameWith…

css基础记录

基础 选择器 复合选择器 后代选择器 div p {}; 类似如上,找到div中所有的后代,注意是所有的后代 子代选择器 > div > a 只选择div的儿子中有a的 并集选择器 用逗号,分隔 p,div,span,h1 { … } 一般一行写一个 CSS元素显示模式 分为块元素,行内元素 块元素 特点…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干&#xff1a; 给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 解法&#xff1a;优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…

【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!

在这个人工智能迅猛发展的时代&#xff0c;AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水&#xff1f;每款AI都有其独特的魅力与优势&#xff0c;那么&#xff0c;究竟哪一款AI聊天助手最适合你呢&#xff1f;本文将带…

Spring Boot 性能提升的核武器,速度提升 500%!

虚拟线程是 Java 21 引入的一个新特性&#xff0c;用于简化并发编程。它与传统的操作系统线程相比&#xff0c;具有显著的优势&#xff1a; 轻量级&#xff1a;虚拟线程由 JVM 管理&#xff0c;而非操作系统&#xff0c;因此它们的内存占用和创建成本远低于传统线程。理论上&am…

Ubuntu下的gpt-sovits学习记录1:安装与测试

GitCode - 全球开发者的开源社区,开源代码托管平台 国内镜像点。 下载压包&#xff1a; 解压到没有中文名的文件夹内。如我 1.创建虚拟环境 conda create -n GPTSoVits python3.9 2.新建工程 3.部分环境 pip install -r requirements.txt 4.模型下载。建议直接下载上边的…

二叉树节点相关算法题|双分支节点个数|所有左叶子之和|每一层节点平均值(C)

双分支节点个数 假设二叉树采用二叉链表存储结构存储&#xff0c;试设计一个算法&#xff0c;计算一棵给定二叉树的所有双分支节点个数 算法思想 计算一棵二叉树中所有双分支节点个数的递归模型 若树为空&#xff0c;结果为0 若当前节点为双分支节点&#xff0c;递归左右孩子…

MySQL:表的内置函数

目录 一. 日期函数 二. 字符串函数 三. 数学函数​编辑 四. 其他函数 此篇博客讲解MySQL中关于表的内置函数。内置函数广泛用于数据库查询语句中。 一. 日期函数 例子一&#xff1a;创建一个样例表&#xff1a; 类似于隐式转换&#xff0c;虽然这样可以但是不建议。 …

Vue框架入门

Author&#xff1a;Dawn_T17?? 目录 什么是框架 一.Vue 的使用方向 二.Vue 框架的使用场景 &#xff08;TIP&#xff09;MVVM思想 三.Vue入门案例 TIP&#xff1a;插值表达式 四.Vue-指令? &#xff08;1&#xff09;v-bind 和 v-model? ? &#xff08;2&#x…

【OpenCV】图像转换

理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像&#xff0c;使用 2D离散傅里叶变换&#xff08;DFT&#xff09; 查找频域。快速算法称为 快速傅立叶变换&#xff08;FFT&#xff09; 用于计算DFT。 Numpy中的傅立叶变换 首先&#xff0c;我们将看到如何使用Numpy查…

Nanolog起步笔记-10-log解压过程(4)寻找meta续2

Nanolog起步笔记-10-log解压过程4寻找meta续2 写在前面重新开始trace 写在前面 前面的工作&#xff0c;已做打下令人有信心的基础。 重新开始trace 之前我们起步就看到了 metadata &#xff0c;显然这前就已加载了。 所以&#xff0c;只需要重走一遍代码&#xff0c;就能得到…

Vue3+Node中使用webrtc推流至mediamtx

前言 项目的 Web 端是 Vue3 框架&#xff0c;后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端&#xff0c;而我自己从未有媒体流相关经验&#xff0c;最初 leader 让我尝试通过 RTSP 协议推拉流&#xff0c;我的思路就局限在了 RTSP 方向。 最初使用的服务端…

小程序IOS安全区域优化:safe-area-inset-bottom

ios下边有一个小黑线&#xff0c;位于底部的元素会被黑线阻挡 safe-area-inset-bottom 一 用法及作用&#xff1a; IOS全面屏底部有小黑线&#xff0c;位于底部的元素会被黑线阻挡&#xff0c;可以使用以下样式&#xff1a; .model{padding-bottom: constant(safe-area-ins…

NVR小程序接入平台EasyNVR国标协议接入无告警是什么原因?

在现代视频监控系统中&#xff0c;国标接入已成为一种重要的技术标准&#xff0c;尤其是在GB28181协议的推动下&#xff0c;这一标准被广泛应用于安防设备的统一接入和管理。国标接入不仅提高了设备间的互联互通能力&#xff0c;还为用户提供了更高效、更智能的视频监控解决方案…

在CSDN设置“关注博主即可阅读全文”

我们在平时CSDN上搜索文章&#xff0c;打开文章&#xff0c;需要关注博主方可继续阅读的&#xff0c;相必有人会很困惑&#xff0c;也有人会觉得很烦。一般选择先关注&#xff0c;看完取消关注&#xff0c;不管怎么说&#xff0c;今天我来教大家如何设置“关注博主即可阅读全文…

《AI行政管理:开启高效治理新时代》

一、引言 AI 行政管理能力的定义和重要性 AI 行政管理能力是指人工智能在行政管理领域的应用能力。它涵盖了多个方面&#xff0c;包括政府决策支持、公共服务优化、行政流程自动化、社会治理与公共安全以及政府内部管理等。在当今时代&#xff0c;AI 行政管理能力具有至关重要…

`yarn list --pattern element-ui` 是一个 Yarn 命令,用于列出项目中符合指定模式(`element-ui`)的依赖包信息

文章目录 命令解析&#xff1a;功能说明&#xff1a;示例输出&#xff1a;使用场景&#xff1a; yarn list --pattern element-ui 是一个 Yarn 命令&#xff0c;用于列出项目中符合指定模式&#xff08; element-ui&#xff09;的依赖包信息。 命令解析&#xff1a; yarn list…

Vue前端实现预览并打印PDF文档

一. 需求 1. 点击文档列表中的【打印】按钮&#xff0c;获取后台生成的PDF的url&#xff0c;弹窗进行预览&#xff1a; 2. 点击【打印】按钮&#xff0c;进行打印预览和打印&#xff1a; 二. 需求实现 首先后台给的是word文档&#xff0c;研究了一圈后发现暂时无法实现&…