1 pytest入门

pytest入门

  • 示例
    • 成功
    • 失败
  • 1.1 资源获取
    • 官方文档
    • 安装
  • 1.2 运行 Pytest
    • 测试搜索
      • 命名规则
  • 1.3 运行单个测试用例
  • 1.4 使用命令行选项
    • -h(--help)
    • --collect-only
    • -k
    • -m
    • -x
    • --maxfail=num
    • -s 与 --capture=method
      • -s 等价于 --capture=no
      • --capture=sys
      • --capture=fd
    • -l(--showlocals)
    • --lf(--last-failed)
    • --ff(--failed-first)
    • -v(--verbose)
    • -q(--quiet)
    • --tb=style
      • --tb=no
      • --tb=line
      • --tb=short
      • -tb=long
      • --tb=auto
      • --tb=native
    • durations=N
      • durations=0
    • --version

示例

成功

1 pytest入门_第1张图片

失败

1 pytest入门_第2张图片

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

1 pytest入门_第3张图片

1 pytest入门_第4张图片

测试搜索

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

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

命名规则

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

1.3 运行单个测试用例

指定文件后加 ::test_name
1 pytest入门_第5张图片

1.4 使用命令行选项

-h(–help)

查看全部选项

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

1 pytest入门_第6张图片
1 pytest入门_第7张图片

–collect-only

展示哪些测试用例会被运行
1 pytest入门_第8张图片

-k

使用表达式指定希望运行的测试用例
1 pytest入门_第9张图片

-m

标记测试并分组并分组

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

1 pytest入门_第10张图片

-x

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

  • 不用该选项的默认情况:断言失败或外部异常时,将该用例标记为失败并继续运行下一个
    1 pytest入门_第11张图片

–maxfail=num

失败几次后再停止
1 pytest入门_第12张图片

-s 与 --capture=method

-s 等价于 --capture=no

允许终端在测试运行时将输出流信息与运行结果一起输出,而关闭默认的输出捕获
1 pytest入门_第13张图片
1 pytest入门_第14张图片
1 pytest入门_第15张图片

–capture=sys

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

–capture=fd

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

-l(–showlocals)

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

  • 以便规避不必要的 print 语句
    1 pytest入门_第16张图片

–lf(–last-failed)

重新运行最后一个失败的测试用例
1 pytest入门_第17张图片

–ff(–failed-first)

作用与--last-failed基本相同,区别是--ff会运行完剩余的测试用例
1 pytest入门_第18张图片

-v(–verbose)

输出信息更详细

  • 每个测试用例都占一行(原本是每个文件占一行)
  • 测试的名字和结果都会显示出来,而不仅仅是一个点或字符
    1 pytest入门_第19张图片

-q(–quiet)

简化输出信息,只保留核心内容(与-v/--verbose相反)
1 pytest入门_第20张图片

–tb=style

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

–tb=no

屏蔽全部回溯信息

–tb=line

仅打印异常的代码位置

–tb=short

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

-tb=long

输出最为详尽的回朔信息

–tb=auto

默认值

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

–tb=native

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

durations=N

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

  • 统计时包括每个测试用例的 call、setup、teardown 过程
    1 pytest入门_第21张图片

durations=0

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

–version

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

你可能感兴趣的:(#,《pytest测试实战》笔记,pytest,chrome,前端)