[跟着官方文档学pytest][一][学习笔记]

网友投稿 753 2022-05-29

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][一][学习笔记]

开发多个测试后,可能希望将它们分组到一个类中。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会创建一个唯一的每个测试调用的临时目录:

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:多功能管理文档!纸质文档管理让你智能办公!
下一篇:Web+Nginx-proxy+MySQL项目上云迁移实践
相关文章