pip install 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 搜索测试文件和用例的过程
指定文件后加 ::test_name
查看全部选项
展示哪些测试用例会被运行
使用表达式指定希望运行的测试用例
标记测试并分组并分组
@pytest.mark.标记名称
做标记-m "mark1 and mark2"
:同时带有这两个标记-m "mark1 and not mark2"
:带有 mark1 且不带 mark2-m "mark1 or mark2"
:带有 mark1 或 mark 2遇到失败时立即停止整个会话
失败几次后再停止
允许终端在测试运行时将输出流信息与运行结果一起输出,而关闭默认的输出捕获
sys.stdout/stderr 将被输出至内存
若文件描述符为1或2,则会被输出至临时文件中
测试失败时打印出局部变量名和值
重新运行最后一个失败的测试用例
作用与--last-failed
基本相同,区别是--ff
会运行完剩余的测试用例
输出信息更详细
简化输出信息,只保留核心内容(与-v/--verbose
相反)
决定捕获到失败时输出信息(信息回溯)的显示方式
屏蔽全部回溯信息
仅打印异常的代码位置
仅输出 assert 的一行以及系统判定内容(不显示上下文)
输出最为详尽的回朔信息
默认值
long
模式的一致只输出 Python 标准库的回溯信息,不显示额外信息
显示最慢的 N 个阶段,耗时越长越靠前
将所有阶段按耗时从长到短排序后显示
显示当前 pytest 的版本及安装目录