Pytest单元测试框架

第一章、pytest概述

Pytest is a framework that makes building simple and scalable tests easy. Tests are expressive and readable—no boilerplate code required. Get started in minutes with a small unit test or complex functional test for your application or library.

Pytest 是一个功能强大且易于使用的 Python 测试框架,用于编写和运行单元测试、集成测试和功能测试。以下是 Pytest 测试框架的一些主要特点和用法:

一、概述

  • pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手
  • pytest可以和selenium,requests,appium等第三方库结合实现web自动化,借口自动化,app自动化
  • pytest可以实现测试用例的跳过以及rerun失败用例重试
  • pytest可以和allure生成非常美观的测试报告
  • pytest可以和jenkins持续集成
  • pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作
    • pytest
    • pytest-html(生成html格式的自动化测试报告)
    • pytest-xdist(测试用例分布式执行,多CPU分支)
    • pytest-ordering(用于改变测试用例的执行顺序)
    • pytest-rerunfailures(用例失败后重跑)
    • allure-pytest(用于生成美观的测试报告)

1、简单易用

  • Pytest 的语法简单直观,容易上手。
  • 不需要大量的样板代码,测试用例可以以函数形式定义。

2、自动发现测试用例

  • Pytest 能够自动发现和收集项目中的测试用例,无需手动配置测试套件。

3、丰富的断言

  • Pytest 提供了丰富的断言(assert)机制,使得编写测试用例更加灵活和清晰。

4、参数化测试

  • 使用 @pytest.mark.parametrize 装饰器,可以轻松实现参数化测试,运行多组输入进行测试。

5、Fixture 支持

  • Pytest 支持 Fixture,用于提供测试用例所需的资源和环境。
  • Fixture 可以在测试用例运行前进行 setup 操作,在测试用例运行后进行 teardown 操作。

6、插件系统

  • Pytest 具有丰富的插件系统,可以通过插件扩展其功能,满足各种不同需求。

7、并行测试

  • Pytest 支持并行执行测试,提高测试效率。

二、安装pytest

1、安装

pip install pytest

2、验证安装

pytest --version

3、pytest文档

https://docs.pytest.org/en/latest/contents.html

三、默认命名规则

在执行pytest命令时,会自动从当前目录及子目录中寻找符合下述约束的测试函数来执行。

1、测试文件以test_ 开头(以 _test结尾也可以)

所有的单测文件名都需要满足test_*.py格式或*_test.py格式。

2、测试类以Test开头,并且不能带有init方法

在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)

3、测试函数以test开头

在单测类中,可以包含一个或多个test_开头的函数。

四、pytest.ini 配置文件

Pytest 的配置文件名为 pytest.ini,它用于配置 pytest 的行为,可以在项目的根目录下创建该文件。以下是一些常用的 pytest 配置选项及其详解:

  1. [pytest] 部分

    • addopts:用于指定额外的命令行选项和标记。例如,addopts = -v -s 表示在运行 pytest 时使用 -v(增加详细输出)和 -s(输出标准输出流)选项。
    • markers:用于定义自定义的标记(marker),以便在测试函数或测试模块中使用。例如,markers = slow: mark tests as slow 可以定义一个名为 slow 的标记,并提供其说明。
  2. [pytest-marks] 部分

    • 在此部分中,您可以定义标记(marker)的别名和说明。例如,slow: mark tests as slow 定义了 slow 标记的别名和说明。
  3. [pytest-rerunfailures] 部分

    • reruns:指定在测试失败时重新运行测试的次数。
    • reruns_delay:指定在重新运行失败测试之间等待的时间(秒)。
  4. [pytest-cov] 部分

    • cov:指定要计算代码覆盖率的模块或路径。
    • cov-report:指定生成代码覆盖率报告的格式。
  5. [pytest-html] 部分

    • html_report_title:指定生成的 HTML 报告的标题。
  6. 其他配置选项

    • python_files:匹配测试文件的文件名模式。
    • python_classes:匹配测试类的名称模式。
    • python_functions:匹配测试函数的名称模式。
    • norecursedirs:排除指定的目录,不进行递归查找测试文件。

配置文件的使用可以让您在项目中统一管理 pytest 的配置选项,从而使测试运行更加方便和可控。您可以根据项目的需要,选择性地配置不同的选项,以满足不同的测试需求

第二章、pytest运行方式

一、主函数模式(相关语法同时适合于主函数模式和命令行模式)

可以在 Python 脚本中调用 Pytest 提供的 main() 函数来运行测试用例。例如:

import pytestpytest.main()
pytest.main(["test_file.py", "-vs"])

1、默认执行当前目录及其子目录中所有符合命名条件的模块的用例

这将会执行当前目录及其子目录中所有以 test_*.py*_test.py 命名的文件中的测试用例

2、不传参数 

实际上,pytest.main() 方法默认情况下不需要传递任何参数,它会自动识别项目中的测试文件并执行测试。通常情况下,您可以简单地调用 pytest.main() 而不传递任何参数来运行测试。

这将会执行当前目录及其子目录中所有以 test_*.py*_test.py 命名的文件中的测试用例

如果需要传递参数,可以像在命令行中一样将参数作为字符串列表传递给 pytest.main() 方法。但通常情况下,不需要手动传递参数,除非您需要在代码中动态设置一些特定的参数。

3、传入参数(传入的参数同时适合于主函数模式和命令行模式)

pytest.main() 方法可以接受一个包含命令行参数的列表作为参数,这些参数将会被传递给 Pytest 运行测试用例的过程。常见的参数包括:

这些选项可以通过命令行传递给 Pytest,以控制测试的执行行为和输出结果。

1、测试文件或目录(默认为当前目录及其子目录下所有符合条件的文件)

指定要运行的测试文件或目录。例如:pytest.main(["test_file.py"])pytest.main(["test_directory/"])

2、命令行选项

指定要在运行测试时使用的命令行选项。例如:pytest.main(["-v", "-s"]) 表示运行测试时增加详细输出和输出标准输出流。

-v, --verbose

  • 运行测试时增加详细输出。通常情况下,Pytest 只输出测试结果的摘要信息,使用 -v 选项可以使 Pytest 输出更加详细的信息,包括每个测试用例的执行结果、测试函数的名称等。
  • 显示更详细的信息
  • -vs可以一起使用

-s, --capture=no

  • 输出标准输出流。Pytest 默认会捕获测试过程中的标准输出流,使用 -s 选项可以禁止捕获标准输出流,从而在测试过程中实时看到打印到标准输出的信息。
  • 表示输出调试信息,包括print打印的信息

-k EXPRESSION

  • 通过表达式来选择要运行的测试用例。例如:-k test_login 表示运行名称中包含 "test_login" 的测试用例。
3、标记

使用 -m 参数可以指定要运行的测试用例的标记(marker)。例如:pytest.main(["-m", "slow"]) 表示运行标记为 slow 的测试用例。

-m MARKEXPR

  • 通过标记(marker)来选择要运行的测试用例。例如:-m slow 表示运行标记为 "slow" 的测试用例。
4、其他参数

您还可以传递其他的命令行参数,如 --cov--cov-report 等,用于指定代码覆盖率、生成报告等功能。

--cov

  • 计算代码覆盖率。使用 --cov 选项可以指定要计算代码覆盖率的模块或路径。

--cov-report

  • 指定生成代码覆盖率报告的格式。常见的报告格式包括 term(终端输出)、html(HTML 格式报告)、xml(JUnit XML 格式报告)等。

总之,pytest.main() 方法可以接受任意数量和类型的参数,用于配置 Pytest 的运行行为,这些参数可以通过列表的形式传递给该方法。

二、命令行模式

可以在命令行中使用 pytest 命令来运行测试用例。例如:

pytest test_file.py  # 运行指定文件中的测试用例
pytest test_directory/  # 运行指定目录下所有文件中的测试用例
pytest  #运行当前工作目录下符合条件文件中的测试用例

三、通过读取pytest.ini配置文件运行



 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解与防范C语言中的栈溢出问题

一、引言 栈溢出是计算机安全领域中一个常见的漏洞,特别是在C语言编程中。由于C语言的灵活性和对内存管理的直接操作性,如果程序员在编写代码时不注意,就可能导致栈溢出的发生。本文将全面解析栈溢出的概念、原因、影响以及防范措施。 二、…

springboot+vue3支付宝接口案例-第二节-准备后端数据接口

springbootvue3支付宝接口案例-第二节-准备后端数据接口!今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下,期间发生遇到了一些弯路。 首先,我们本次后端接口使用的持久层框架是JPA。这…

3d合并模型是重名材质---模大狮模型网

当合并3d模型时,如果存在重名的材质,可能会导致加载问题。这是因为3D软件在处理重名材质时可能会出现冲突。你可以尝试以下方法解决这个问题: 重命名材质:检查合并的模型中的材质,确保它们具有唯一的命名。修改重名的材…

Pyroch中transforms 图像增强发方法的应用

1 应用场景 在我们训练模型的时候,有的时候数据不够,就需要通过水平翻转、垂直翻转、镜像、旋转、改变亮度、标准化等方式增加图像的多样性,此时可以调用Pytorch 中的Transforms完成这些操作 2 导入相应的库 from torchvision import tran…

多场景建模:美团HiNet

HiNet: Novel Multi-Scenario & Multi-Task Learning with Hierarchical Information Extraction 背景: 美团的多场景多任务(ctr、ctcvr) 解决方案 通过分层来分别学习多场景多任务 方案详情 点评:在底层Embedding时用…

如何实现Win系统ssh连接Ubuntu使用vscode远程敲代码

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接…

opencv#35 连通域分析

连通域分割原理 像素领域介绍: 4邻域是指中心的像素与它邻近的上下左右一共有4个像素,那么称这4个像素为中心像素的4邻域。 8邻域是以中心像素周围的8个像素分别是上下左右和对角线上的4个像素。 连通域的定义(分割)分为两种:以4邻域为相邻判定条件的连通域分割和…

让AI帮你说话--GPT-SoVITS教程

有时候我们在录制视频的时候,由于周边环境嘈杂或者录音设备问题需要后期配音,这样就比较麻烦。一个比较直观的想法就是能不能将写好的视频脚本直接转换成我们的声音,让AI帮我们完成配音呢?在语音合成领域已经有很多这类工作了&…

1.Mybatis入门

目录 前言 1入门 1.1 入门程序实现 1.2 数据准备 ​编辑 1.3 配置Mybatis 1.4 编写SQL语句 1.5 单元测试 1.6 解决SQL警告与提示 2. JDBC介绍(了解) 2.1 介绍 2.2 代码 2.3 问题分析 2.4 技术对比 3. 数据库连接池 3.1 介绍 3.2 产品 4. lombok 4.1 介绍 4.…

AOP+Redisson 延时队列,实现缓存延时双删策略

一、缓存延时双删 关于缓存和数据库中的数据保持一致有很多种方案,但不管是单独在修改数据库之前,还是之后去删除缓存都会有一定的风险导致数据不一致。而延迟双删是一种相对简单并且收益比较高的实现最终一致性的方式,即在删除缓存之后&…

哪些 3D 建模软件值得推荐?

云端地球是一款免费的在线实景三维建模软件,不需要复杂的技巧,只要需要手机,多拍几张照片,就可以得到完整的三维模型! 无论是大场景倾斜摄影测量还是小场景、小物体建模,都可以通过云端地球将二维数据向三…

【JLU】校园网linux客户端运行方法

终于给这输入法整好了,就像上面图里那样执行命令就行 写一个开机自启的脚本会更方便,每次都运行也挺烦的 补充了一键运行脚本,文件路径需要自己修改 #!/bin/bashrun_per_prog"sudo /home/d0/ubuntu-drclient-64/DrClient/privillege.s…

为什么3d合并的模型不能移动---模大狮模型网

当你在3D软件中合并模型后,如果无法移动合并后的模型,可能有以下几个可能的原因: 模型被锁定或冻结:在3D软件中,你可能会将模型锁定或冻结以防止意外的移动或编辑。请确保解锁或解冻模型,这样你就可以自由地…

学籍管理系统(c++文件实现)

要求: 实现增删查改,两种方式查询,登录功能 设计: 学生端:可以查询个人成绩 管理员端:对学籍信息增删查改,查看所有信息,单人信息,学籍排序,统计绩点 三个…

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法(项目模板)

【Python】采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法(项目模板) gitee项目模板: 网络图像推流项目模板(采用OpenCV和Flask来进行网络图像推流的低延迟高刷FPS方法) 前文: 【最简改进】基于…

伊恩·斯图尔特《改变世界的17个方程》相对论笔记

它告诉我们什么? 物质包含的能量等于其质量乘以光速的平方。 为什么重要? 光的速度很快,它的平方绝对是一个巨大的数。1千克的物质释放出的能量相当于史上最大的核武器爆炸所释放能量的约40%。一系列相关的方程改变了我们对空间、时间、物质和…

Prompt Learning 的几个重点paper

Prefix Tuning: Prefix-Tuning: Optimizing Continuous Prompts for Generation 在输入token之前构造一段任务相关的virtual tokens作为Prefix,然后训练的时候只更新Prefix部分的参数,PLM中的其他参数固定。针对自回归架构模型:在句子前面添…

vue 使用echarts-gl实现3d旋转地图

之前也有使用过echarts开发项目中涉及到的地图功能,当时使用geo来实现地图轮廓,看上去有种3d的感觉。最近闲来无事看了一份可视化大屏的UI设计图,感觉3d旋转地图挺好玩的,今天就来尝试实现下。 首先安装下echarts和echarts-gl依赖…

MyBatis框架-配置解析

文章目录 Mybatis配置解析核心配置文件environments 环境配置transactionManager 事务管理器dataSource 数据源mappers 映射器Mapper文件Properties优化类型别名(typeAliases)setting类型处理器(typeHandlers)对象工厂&#xff08…

shell脚本——条件语句

目录 一、条件语句 1、test命令测试条件表达式 2、整数数值比较 3、字符串比较 4、逻辑测试(短路运算) 5、双中括号 二、if语句 1、 分支结构 1.1 单分支结果 1.2 双分支 1.3 多分支 2、case 一、条件语句 条件测试:判断某需求是…