文章目录(Table of Contents)
简介
参考资料
- 这个是Pytest的中文文档, Pytest 使用手册
- 一个别人整理的Pytest的使用文档, Pytest - 使用介绍
- 这里有详细介绍fixture的使用, 还是介绍的很不错的. pytest 教學
Pytest的一些说明
Pytest的一个简单的例子
Pytest使用Python的assert函数进行判断. 最简单的测试函数如下所示:
- # test1.py
- def test_passing():
- assert (1, 2, 3) == (1, 2, 3)
我们使用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的介绍
- 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种组合.
- import pytest
- from .addFunction import add_number
- @pytest.mark.parametrize('x',[1,2])
- @pytest.mark.parametrize('y',[3,4])
- def test_add(x, y):
- an = add_number(x, y)
- print(an.add_n())
在当前文件夹下, 运行pytest -v -s可以显示具体的测试结果.
当然我们也可以直接指定x和y的值, 如下所示:
- @pytest.mark.parametrize('x,y',[(1,2)])
- def test_add(x, y):
- an = add_number(x, y)
- print(an.add_n())
最终的测试结果如下所示, 这个时候就只测试了x=1, y=2的情况.
上面的写法也很容易扩展到多个例子,只需要使用中括号包住就可以了。
- import pytest
- class add_number(object):
- def __init__(self, a, b):
- self.a = a
- self.b = b
- def add_n(self):
- return self.a + self.b
- @pytest.mark.parametrize('x,y',[(1,2), (2,3), (5,19)])
- def test_add(x, y):
- an = add_number(x, y)
- print(an.add_n())
测试用例分类-pytest.mark.
有的时候, 我们不需要测试所有的测试用例, 只需要测试部分的测试用例. 这个时候可以装饰器 code>@pytest.mark.finished, 这里finished是可以自定义的. 使用的时候加上命令'-m=finished',pytest就会挑选带有装饰器的类或函数运行.
例如下面的测试函数:
- def test_1():
- assert 1 == 1
- def test_2():
- assert 2 == 2
默认情况下直接执行pytest这两个函数都会进行测试.
这个时候如果我们加上code>@pytest.mark.finished, 就可以控制测试的函数. 我们首先需要新建一个pytest.ini的文件, 需要保存markers的名称.
- [pytest]
- markers =
- finished
- unfinished
之后我们分别给需要测试的函数指定不同的装饰器.
- @pytest.mark.finished
- def test_1():
- assert 1 == 1
- @pytest.mark.unfinished
- def test_2():
- assert 2 == 2
之后进行测试的时候, 可以指定需要测试的类型, 这里我们只测试marker是finished的, 所以只测试了test_1这个函数.
VS Code与Pytest结合使用
这一部分参考自, Python testing in Visual Studio Code. 这里有一份中文的说明也可以参考, 用 VS Code 进行 Python 单元测试.
在使用vscode的时候, 当安装了Python的插件之后, 我们就可以进行单元测试了. 首先打开setting.json文件, 在里面添加下面的设置 (需要确保pytest是安装的)
- "python.testing.pytestEnabled": true,
之后返回主界面, vscode会自动检测出所有文件名有test_的文件, 包括里面的测试函数. 我们可以每一个单独进行测试, 测试通过之后会有绿色的小勾.
同时测试函数的上面也有快捷按钮, 可以点击进行测试.
- 微信公众号
- 关注微信公众号
-
- QQ群
- 我们的QQ群号
-












评论