Pytest单元测试框架

news2024/11/15 22:53:30

第一章、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 pytest

pytest.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.coloradmin.cn/o/1418627.html

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

相关文章

Onvif协议5: 预置位的操作

目录 1. 介绍 2. GetPreset 3. SetPreset 4.预置位的索引 5. GotoPreset 1. 介绍 球机的云台预置位控制主要包含的内容有:预置位的设置、预置位的调用、预置位的删除以及预置位的名称修改等 云台预置位的设置:调用Onvif协议中云台预置位设置接口&a…

CH395Q之CH395Q简介(一)

本节主要介绍以下内容: 1、TCP/IP协议栈是什么(了解) 2、CH395Q是什么(了解) 3、CH395Q工作命令(熟悉) 4、CH395Q & W5500 一、TCP/IP协议栈是什么 是一系列网络协议的总和&#xff0…

如何使用宝塔面板搭建MySQL 5.5数据库并实现公网远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

微信小程序|摇骰子

目录 简介设计与功能需求确定用户界面设计确定摇骰子动画效果确定随机数生成算法编码实现实现摇骰子动画测试与优化进行功能测试进行性能测试说明简介 制作一个摇骰子小程序是一个有趣且具有挑战性的项目。通过这个项目,你可以学习如何运用编程技术来模拟骰子的摇动和结果显示…

【全程录屏GPT3.5升级4.0】2024最新GPT4升级订阅详细指南

前言:为什么要升级GPT4.0,下图是来自GPT4.0的官方回答,可以看出,GPT4无愧于是一个大版本升级的。 一、视频教程 记录了普通用户使用WildCrad从GPT3.5升级到4.0的全部过程,感兴趣可以前往观看:https://www.…

qemu 抓取linux kernel vmcore

一、背景 在qemu调试linux kernel时 有时我们会遇到dump 情况,这时可以通过gdb 方式连接分析dump, 但实际中我们用得更多的是离线dump 分析,分析的文件通常是vmcore(linux kernel panic 生成的coredump文件)或者ramdu…

合并有序链表---链表OJ---归并思想

https://leetcode.cn/problems/merge-two-sorted-lists/?envTypestudy-plan-v2&envIdtop-100-liked 将两个有序的链表合并为一个新的有序链表,那不就是和归并排序中最后合并的思想一样吗?只不过那里合并的是数组,这里合并的是链表。 首先…

构建知识图谱:从技术到实战的完整指南

目录 一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图数据库选择Neo4jArangoDB 构建流程数据预处理实体关系识别图…

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

[嵌入式系统-5]:龙芯1B 开发学习套件 -2- LoongIDE 集成开发环境集成开发环境的安装步骤

目录 一、LoongIDE(龙芯开发工具集成环境)概述 1.1 概述 二、软件开发环境的安装过程 2.0 注意事项 2.1 步骤1:MingW运行环境 2.2 步骤2:安装LoongIDE 2.3 步骤3:安装MIPS工具链 2.4 配置工具链 2.5 重启电脑…

做什么副业比较靠谱,这五个正规项目,记得收藏

人这一生不易,每个阶段都会有压力和烦恼,尤其是成年人,上有老下有小的,生活的重担都在一个人身上,压得人喘不过气。生活的方方面面都需要钱,仅靠工资已经很难维持一家人的开支了。所以很多人打算利用业余时…

基于YOLOv7算法和FLIR数据集的高精度实时红外行人目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法和FLIR数据集的高精度实时红外行人目标检测系统可用于日常生活中检测与定位自行车、汽车、狗和行人目标,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本…

Alexa Fluo350 NHS 酯,AF350活性酯,可用于标记胺修饰的寡核苷酸

您好,欢迎来到新研之家 文章关键词:AF350 Succinimidyl Ester,AF350 NHS Ester,Alexa Fluo350 NHS 酯,AF350活性酯 一、基本信息 产品简介:AF 350 is a blue fluorescent dye. AF 350 dye is used for s…

NPDP证书:让你的职业生涯飞升!

🌟没错!NPDP证书正在成为产品经理们的“新宠”!越来越多的同行们纷纷选择考取NPDP证书,为什么这么火爆?一起来探究下吧! 🚀NPDP认证:产品经理的国际通行证 📍NPDP&#x…

雪深传感器的工作原理

TH-XL2雪深传感器的工作原理主要是利用超声波的发射和反射来测量雪的厚度。传感器发射超声波,超声波遇到雪表面后会反射回来,传感器再接收反射回来的超声波,通过计算超声波的传播时间和速度,就可以得出雪的厚度。 另外&#xff0c…

给信息安全专业想做网络安全方面的人一些忠告

别一直打CTF 打CTF是为了打基础,大概知道一些基础就出来吧,千万不要一直打下去出不来了。简历上实习经历,项目经历以及漏洞成果才能构成一个不错的背景,只有ctf比赛会很尴尬。要知道有些人是py打比赛,面试官知道情况&…

根据两个主键查询变更日志 抽屉时间线降序

时间戳例子&#xff1a; <div class"block"><el-timeline><el-timeline-item timestamp"2018/4/12" placement"top"><el-card><h4>更新 Github 模板</h4><p>王小虎 提交于 2018/4/12 20:46</p>…

SimpleDateFormat 格式化 Date 时间戳

前言 Date 是 Java 中经常用来表示时间的类型&#xff0c;但将 Date 类型的数据发送给前端时&#xff0c;通常会呈现出乱码的状态&#xff0c;用户不宜理解&#xff0c;所以要通过 SimpleDateFormat 把 Date 类型的数据格式化为用户容易理解的格式 如下是 Date 的格式&#xff…

GIS应用水平考试一级—2009 年度第二次

全国信息化工程师——GIS应用水平考试 2009 年度第二次全国统一考试一级 试卷说明: 1、本试卷共9页,6个大题,满分150 分,150 分钟完卷。 2、考试方式为闭卷考试。 3、将第一、二、三題的答案用铅笔涂写到(NCIE-GIS)答题卡上。 4、将第四、五、六题的答案填写到主观题答题卡上…

ARP 地址解析协议

目录 ARP&#xff08;Address Resolution Protocol&#xff09; 地址解析协议 ARP 的作用 ARP 高速缓存 (ARP cache) ARP 工作过程 ARP 查找 IP 地址对应的 MAC地址 ARP 高速缓存的作用 不在同一局域网的两个主机运行ARP协议 使用 ARP 的四种典型情况 为什么要使用两种…