Python测试工具-Pytest使用介绍

王 茂南 2025年12月10日07:04:28
评论
2543字阅读8分28秒

简介

 

参考资料

 

Pytest的一些说明

Pytest的一个简单的例子

Pytest使用Python的assert函数进行判断. 最简单的测试函数如下所示:

  1. # test1.py
  2. def test_passing():
  3.     assert (1, 2, 3) == (1, 2, 3)

我们使用pytest命令测试函数. 得到如下的测试结果(可以放大了查看图片).

Python测试工具-Pytest使用介绍

注意:

  • pytest使用.来表示成功(PASSED), 这里会显示绿色的.
  • pytest使用F来表示失败(FAILED), 这里会显示红色的.

 

Pytest的使用

编写pytest测试样例非常简单,只需要按照下面的规则:

  • 测试文件以test_开头 (以_test结尾也可以), 注意这里是有下划线的,  test_*.py 或 *_test.py
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头, 注意这里是有下划线的.
  • 断言使用基本的assert即可.

通常情况下, 我们可以直接运行pytest, 这样会对该目录下所有的测试文件进行测试. 同时我们也可以加上不同的参数.

  • -v 用于显示每个测试函数的执行结果
  • -q 只显示整体测试结果
  • -s 用于显示测试函数中print()函数输出
  • -x, --exitfirst, exit instantly on first error or failed test
  • -h 帮助
 

fixture的介绍

 

fixture的scope参数有四种, 分别是'function','module','class','session',其中默认为function.
  • function:每个test都运行,默认是function的scope;
  • class:每个class的所有test只运行一次;
  • module:每个module的所有test只运行一次;
  • session:每个session只运行一次;
 

pytest.mark.parametrize 装饰器

当我们的测试函数有需要输入的参数的时候, 可以使用pytest的装饰器pytest.mark.parametrize来帮助测试函数参数化. 下面是组合传参的方法, 指定x是1,2; y是3,4. 这样x和y有4种组合.

  1. import pytest
  2. from .addFunction import add_number
  3. @pytest.mark.parametrize('x',[1,2])
  4. @pytest.mark.parametrize('y',[3,4])
  5. def test_add(x, y):
  6.     an = add_number(x, y)
  7.     print(an.add_n())

在当前文件夹下, 运行pytest -v -s可以显示具体的测试结果.

Python测试工具-Pytest使用介绍

当然我们也可以直接指定x和y的值, 如下所示:

  1. @pytest.mark.parametrize('x,y',[(1,2)])
  2. def test_add(x, y):
  3.     an = add_number(x, y)
  4.     print(an.add_n())

最终的测试结果如下所示, 这个时候就只测试了x=1, y=2的情况.

Python测试工具-Pytest使用介绍

上面的写法也很容易扩展到多个例子,只需要使用中括号包住就可以了。

  1. import pytest
  2. class add_number(object):
  3.     def __init__(self, a, b):
  4.         self.a = a
  5.         self.b = b
  6.     def add_n(self):
  7.         return self.a + self.b
  8. @pytest.mark.parametrize('x,y',[(1,2), (2,3), (5,19)])
  9. def test_add(x, y):
  10.     an = add_number(x, y)
  11.     print(an.add_n())
Python测试工具-Pytest使用介绍

 

测试用例分类-pytest.mark.

有的时候, 我们不需要测试所有的测试用例, 只需要测试部分的测试用例. 这个时候可以装饰器 code>@pytest.mark.finished, 这里finished是可以自定义的. 使用的时候加上命令'-m=finished',pytest就会挑选带有装饰器的类或函数运行.

例如下面的测试函数:

  1. def test_1():
  2.     assert 1 == 1
  3. def test_2():
  4.     assert 2 == 2

默认情况下直接执行pytest这两个函数都会进行测试.

Python测试工具-Pytest使用介绍

这个时候如果我们加上code>@pytest.mark.finished, 就可以控制测试的函数. 我们首先需要新建一个pytest.ini的文件, 需要保存markers的名称.

  1. [pytest]
  2. markers =
  3.     finished
  4.     unfinished

之后我们分别给需要测试的函数指定不同的装饰器.

  1. @pytest.mark.finished
  2. def test_1():
  3.     assert 1 == 1
  4. @pytest.mark.unfinished
  5. def test_2():
  6.     assert 2 == 2

之后进行测试的时候, 可以指定需要测试的类型, 这里我们只测试marker是finished的, 所以只测试了test_1这个函数.

Python测试工具-Pytest使用介绍

 

VS Code与Pytest结合使用

这一部分参考自, Python testing in Visual Studio Code. 这里有一份中文的说明也可以参考, 用 VS Code 进行 Python 单元测试.

在使用vscode的时候, 当安装了Python的插件之后, 我们就可以进行单元测试了. 首先打开setting.json文件, 在里面添加下面的设置 (需要确保pytest是安装的)

  1. "python.testing.pytestEnabled": true,

之后返回主界面, vscode会自动检测出所有文件名有test_的文件, 包括里面的测试函数. 我们可以每一个单独进行测试, 测试通过之后会有绿色的小勾.

Python测试工具-Pytest使用介绍

同时测试函数的上面也有快捷按钮, 可以点击进行测试.

Python测试工具-Pytest使用介绍

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2025年12月10日07:04:28
  • 转载请务必保留本文链接:https://mathpretty.com/12931.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: