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

一篇文章了解Pytest单元测试框架

文章目录

  • 1.Pytest是什么
  • 2.Pytest的安装
  • 3.Pytest快速入门
  • 4.Pytest文件规范
  • 5.常用的断言类型

1.Pytest是什么

pytest 是一个功能强大且灵活的 Python 测试框架,主要优点包括简洁易用、自动测试发现、丰富的插件生态系统、参数化测试、详细的断言错误信息、以及强大的 fixtures 机制。

2.Pytest的安装

对于所有的第三方库都可以使用pip install xxx进行安装.

对于pytest的安装,可以直接在pycharm中打开终端,输入

pip install pytest

即可开始安装.如果下载比较慢可以使用国内镜像源进行下载

3.Pytest快速入门

创建一个pytest_learn的包,在包下面创建test_demo1.py:

输入以下内容:

def test_one():
    assert 1 == 1

然后在命令行中输入pytest

运行结果:

image-20240910215322995

可以看到找到了一条测试用例以及文件路径,一条测试用例通过加上执行的时间

将文件内容改成:

def test_one():
    assert 1 == 2

再次执行:

image-20240910215613857

可以看到这里就报错了,有很明显的红色,红线中的内容就是错误的原因

除了上述运行pytest用例的方式,还可以旁边的小三角执行用例

image-20240910215927817

不过这种方式只适合单个测试用例的执行

如果没有小三角,可以在设置中进行配置

image-20240910220022688

4.Pytest文件规范

⭐文件命名规范:

  1. .py测试文件必须以“test_”开头或者以“_test”结尾
  2. 测试方法必须以“test_”开头
  3. 测试类必须以Test开头,并且不能有init方法

如果命名不规范就会造成找不到测试用例的情况

我这个包下面有两个文件,一个符合规范,一个不符合规范.

image-20240910220419906

两个文件中都写好了对应的用例

image-20240910220545441

在命令行中输入pytest 加上路径

image-20240910220525262

可以看到只执行了一条测试用例.

但是如果直接执行具体的文件下面,即使文件命名不规范但是方法命名规范也是可以执行的,如图所示:

image-20240910220744007

如果文件是以test_开头,默认就是以pytest去运行的

image-20240910221214293

如果不想用pytest去运行,有两种解决方案:

  1. 修改文件名称

  2. 在设置中修改测试框架为Unittests

    image-20240910221556007

测试类必须以Test开头,并且不能有init方法

例如:

class TestCase:
    def __init__(self):
        pass

    def test_1(self):
        assert 1==1

    def test_2(self):
        assert "a" == "abc"

运行结果:

image-20240910221921625

执行测试类中的测试用例的方法除了在命令行中输入pytest "想要运行文件的测试路径"和点击测试类的小三角之外,还可以创建main方法

if __name__ == '__main__':
    pytest.main()

运行main方法即可

5.常用的断言类型

  1. 基本等价性检查:
    • assert x == y: 检查变量x是否等于y。
    • assert x != y: 检查变量x是否不等于y。
    • assert x is y: 检查变量x和y是否引用相同的对象。
    • assert x is y: 检查变量x和y是否引用不相同的对象。
  2. 集合操作:
    • assert x in y: 检查x是否是y的成员。
    • assert x not in y: 检查x是否不是y的成员。
  3. 比较操作:
    • assert x < y: 检查x是否小于y。
    • assert x > y: 检查x是否大于y。
    • assert x <= y: 检查x是否小于或等于y。
    • assert x >= y: 检查x是否大于或等于y。

示例:

    def test_3(self):
        assert 1 == 1
        assert 1 != 2
        assert  1 < 2
        assert  2 > 1
        assert  3 >= 3
        assert 3 <= 3
        assert  "a" in "abc"
        assert "a" not in "xxx"
        e = [1, 2, 3]
        f = e
        g = [2, 3, 4]
        assert e is f
        assert g is not f

http://www.kler.cn/news/304104.html

相关文章:

  • openai最新模型o1全面解读
  • HarmonyOS Next鸿蒙NDK使用示例
  • Rust 数据类型
  • 【开发工具】java开发中让你版本管理不在复杂的插件:GitToolBox
  • 【60天备战软考高级系统架构设计师——第十八天:运维与服务管理——DevOps实践】
  • 使用HTML
  • Python知识点:如何使用Vagrant进行开发环境搭建
  • 1.1 计算机网络基本概述
  • 代理IP的全面解析
  • OpenHarmony(鸿蒙南向开发)——轻量系统STM32F407芯片移植案例
  • CLUSTERDOWN Hash slot not served问题复现
  • react 事件处理
  • 前端——标签二(超链接)
  • Linux中的简单命令2
  • 场外期权合法吗?
  • 如何在vim中批量注释和取消注释
  • 【秋招笔试】9.09阿里国际秋招(已改编)-三语言题解
  • Go语言 管道1
  • 基于单片机的仔猪喂饲系统设计
  • vue原理分析(八)研究new Vue()中的initProxy
  • 集群聊天服务器项目【C++】(二)Json的简单使用
  • C++笔记---list
  • [QT] QT事件与事件重写
  • Spring扩展点系列-SmartInstantiationAwareBeanPostProcessor
  • 通过策略模式实现对象创建工厂
  • QMainWindow,调用exec()实现QDialog阻塞效果
  • HTTPS和HTTP区别是什么?
  • 【Python机器学习】循环神经网络(RNN)——利用Keras实现循环神经网络
  • 【XR】AR HUD
  • 交换机vlan配置实现