1 pytest入门

发布时间:2024年01月13日

示例

成功

在这里插入图片描述

失败

在这里插入图片描述

1.1 资源获取

官方文档

安装

pip install pytest

1.2 运行 Pytest

$ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]
...
  • 若不提供任何参数,将在当前及其子目录下寻找测试文件,然后运行搜索到的测试代码
  • 若提供一个或多个文件名、目录名,将逐个查找并运行所有测试
    • 重复写将重复运行

ch1/tasks/test_three.py

"""Test the task data type."""
from collections import namedtuple
Task = namedtuple('Task', ['summary', 'owner', 'done', 'id'])
# 创建默认的 Task 对象,不必指定所有属性
Task.__new__.__defaults__ = (None, None, False, None)

def test_defaults():
    """Using no parameters should invoke defaults."""
    t1 = Task()
    t2 = Task(None, None, False, None)
    assert t1 == t2

def test_member_access():
    """Check .field functionality of nametuple."""
    t = Task('buy milk', 'brian')
    assert t.summary == 'buy milk'
    assert t.owner == 'brian'
    assert (t.done, t.id) == (False, None)

ch1/tasks/test_four.py

"""Test the task data type"""

from collections import namedtuple

Task = namedtuple('Task', ['summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__ = (None, None, False, None)

def test_asdict():
    """_asdict() should return a dictionary."""
    t_task = Task('do something', 'okken', True, 21)
    t_dict = t_task._asdict()
    expected = {'summary': 'do something',
                'owner': 'okken',
                'done': True,
                'id':21}
    assert t_dict == expected

def test_replace():
    """_replace() should change passed in fields."""
    t_before = Task('finish book', 'brian', False)
    t_after = t_before._replace(id=10, done=True)
    t_expected = Task('finish book', 'brian', True, 10)
    assert t_after == t_expected

在这里插入图片描述

在这里插入图片描述

测试搜索

定义:pytest 搜索测试文件和用例的过程

  • 只要遵守 pytest 的命名规则,pytest 就能自动搜索所有待执行的测试用例

命名规则

  • 测试文件:test_something.py(Better) 或 something_test.py
  • 测试函数/测试类方法:test_something
  • 测试类:TestSomething

1.3 运行单个测试用例

指定文件后加 ::test_name
在这里插入图片描述

1.4 使用命令行选项

-h(–help)

查看全部选项

  • 输出末尾声明:显示结果取决于所指定的文件或目录,未指定则默认使用当前目录和文件

在这里插入图片描述
在这里插入图片描述

–collect-only

展示哪些测试用例会被运行
在这里插入图片描述

-k

使用表达式指定希望运行的测试用例
在这里插入图片描述

-m

标记测试并分组并分组

  • 可跨文件
  • 标记名自定义
  • 测试方法上方使用 @pytest.mark.标记名称 做标记
  • 可用表达式指定多个标记名以选中测试用例
    • -m "mark1 and mark2":同时带有这两个标记
    • -m "mark1 and not mark2":带有 mark1 且不带 mark2
    • -m "mark1 or mark2":带有 mark1 或 mark 2

在这里插入图片描述

-x

遇到失败时立即停止整个会话

  • 不用该选项的默认情况:断言失败或外部异常时,将该用例标记为失败并继续运行下一个
    在这里插入图片描述

–maxfail=num

失败几次后再停止
在这里插入图片描述

-s 与 --capture=method

-s 等价于 --capture=no

允许终端在测试运行时将输出流信息与运行结果一起输出,而关闭默认的输出捕获
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

–capture=sys

sys.stdout/stderr 将被输出至内存

–capture=fd

若文件描述符为1或2,则会被输出至临时文件中

-l(–showlocals)

测试失败时打印出局部变量名和值

  • 以便规避不必要的 print 语句
    在这里插入图片描述

–lf(–last-failed)

重新运行最后一个失败的测试用例
在这里插入图片描述

–ff(–failed-first)

作用与--last-failed基本相同,区别是--ff会运行完剩余的测试用例
在这里插入图片描述

-v(–verbose)

输出信息更详细

  • 每个测试用例都占一行(原本是每个文件占一行)
  • 测试的名字和结果都会显示出来,而不仅仅是一个点或字符
    在这里插入图片描述

-q(–quiet)

简化输出信息,只保留核心内容(与-v/--verbose相反)
在这里插入图片描述

–tb=style

决定捕获到失败时输出信息(信息回溯)的显示方式

–tb=no

屏蔽全部回溯信息

–tb=line

仅打印异常的代码位置

–tb=short

仅输出 assert 的一行以及系统判定内容(不显示上下文)

-tb=long

输出最为详尽的回朔信息

–tb=auto

默认值

  • 若有多个测试用例失败,仅打印首末两个用例的回溯信息
  • 格式与long模式的一致

–tb=native

只输出 Python 标准库的回溯信息,不显示额外信息

durations=N

显示最慢的 N 个阶段,耗时越长越靠前

  • 统计时包括每个测试用例的 call、setup、teardown 过程
    在这里插入图片描述

durations=0

所有阶段按耗时从长到短排序后显示

–version

显示当前 pytest 的版本及安装目录

文章来源:https://blog.csdn.net/Sally_xy/article/details/135374694
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。