第 1 章 pytest 入门
首先来看两个非常简单的测试用例来感受一下 pytest 的优点。
首先是一个成功的测试用例:
# F:\pytest\tesy_one.py
def test_passing():
assert (1,2,3)==(1,2,3)
在保存这个测试用例的文件夹下打开命令行,分别执行以下两条命令运行测试用例:
pytest test_one.py
pytest -v test_one.py(-v可以查看细节)
那么,再看一个失败的测试用例:
# F:\pytest\test_two.py
def test_passing():
assert (1,2,3)==(3,2,1)
测试结果:
红色字体给出了出错的信息,At index 0 diff:1!=3,下面用 -v 查看完整信息:
在使用 -v 命令后,可以看到,pytest 添加了脱字符(^),来指出 assert 语句前后的区别。
接下来进入正文。
1.1 安装 pytest
打开命令行,使用 pip install pytest 命令。
1.2 运行 pytest
查看帮助文档:
pytest --help
如果不输入任何参数,只输入:
pytest
pytest 将在当前目录以及子目录下寻找测试文件,然后运行搜索到的测试代码:
如果提供一个或多个文件名、目录名,pytest 会逐个查找并运行所有测试。为了搜索到所有的测试代码,pytest 会递归遍历每个目录及其子目录。
首先在pytest目录下新建一个目录tasks,并创建两个测试用例test_three.py和test_four.py这两个测试文件。
# F:\pytest\tasks\test_three.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_defaults():
"Using no parameters should invoke defaults."
t1 = Task()
t2 = Task(None, None, False, None)
assert t1 == t2
# 这个测试用例演示了如何利用属性名(而不是索引)来访问对象成员
def test_member_access():
"""Check .filed functionality of namedtuple."""
t = Task('buy milk', 'brian')
assert t.summary == 'buy milk'
assert t.owner == 'brian'
assert (t.done, t.id) == (False, None)
# F:\pytest\tasks\test_four.py
"""Test the Task data type"""
from collections import namedtuple
Task = namedtuple('Task', ['summary', 'owner', '