[跟着官方文档学pytest][一][学习笔记]
pytest框架使编写小型、可读的测试变得容易,并且可以拓展以支持应用程序和库的复杂功能测试。
pytest要求Python版本3.7+。
PyPI包名:pytest。
安装pytest
- 在命令提示符中输入pip指令安装pytest
pip install -U pytest
- 检查版本
>pytest --version
pytest 7.1.2
写第一个pytest
本例中采用的Python IDE为PyCharm 2022.1 (Community Edition)
创建一个名为test_sample.py
的文件输入以下代码
# content of test_sample.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
输出结果为:
[100%]是指运行所有测试用例的总体进度。完成后,pytest会显示一个失败报告,因为 func(3)不返回 5。
运行多个pytest
pytest将在当前目录及其子目录中运行test_.py或_test.py格式的所有文件。更一般地说,它遵循标准的测试发现规则。
断言引发某个异常
使用raises帮助程序断言某些代码会引发异常:
# content of test_sysexit.py
import pytest
def f():
raise SystemExit(1)
def test_mytest():
with pytest.raises(SystemExit):
f()
输出结果:
对一个类中的多个测试进行分组
开发多个测试后,可能希望将它们分组到一个类中。pytest使创建包含多个测试的类变得容易:
# content of test_class.py
class TestClass:
def test_one(self):
x = "this"
assert "h" in x
def test_two(self):
x = "hello"
assert hasattr(x, "h")
pytest按照其Python测试发现约定发现所有测试,因此它同时找到test_前缀函数。无需对任何内容进行子类化,但请确保在类前面加上Test前缀,否则将跳过该类。我们可以通过传递模块的文件名来运行该模块:
第一个测试通过,第二个测试失败。可以轻松查看断言中的中间值,以帮助您了解失败的原因。
由于以下原因,将类中的测试分组可能有以下好处:
- 组织测试
- 在特定类中为测试共享工具
- 在类级别应用标记并让它们隐式应用于所有测试
在类内对测试进行分组时需要注意的是,每个测试都有一个唯一的类实例。让每个测试共享同一个类实例将非常不利于测试隔离,并且会促进不良的测试实践。概述如下:
# content of test_class_demo.py
class TestClassDemoInstance:
value = 0
def test_one(self):
self.value = 1
assert self.value == 1
def test_two(self):
assert self.value == 1
pytest -k TestClassDemoInstance -q
请求用于功能测试的唯一临时目录
pytest提供了内置的固定设置/函数参数来请求任意资源,例如唯一的临时目录:
# content of test_tmp_path.py
def test_needsfiles(tmp_path):
print(tmp_path)
assert 0
在测试函数签名中列出名称tmp_path,pytest将在执行测试函数调用之前查找并调用fixture工厂以创建资源。在测试运行之前,pytest会创建一个唯一的每个测试调用的临时目录:
- 点赞
- 收藏
- 关注作者
评论(0)