前言
项目开发中有很多的功能,通常开发人员需要对自己编写的代码进行自测,除了借助postman
等工具进行测试外,还需要编写单元测试对开发的代码进行测试,通过单元测试来判断代码是否能够实现需求,本文介绍的pytest
模块是一个非常好用的框架,不仅支持简单的测试也支持应用中复杂的功能测试。
pytest简介
这里引用pytest
官方文档中的内容:pytest is a mature full-featured Python testing tool that helps you write better programs.
Getting start
pytest安装
pytest
的运行环境是:python3.6 3.7 3.8 3.9 pypy3
.在命令行中运行下述命令安装pytest
:
pip install pytest
安装完成之后运行下述命令检查是否安装成功:
pytest --version
pytest 6.2.4
第一个测试
可以通过四行代码为一个函数创建简单的测试。
# test.py
def func(x):
return x+1
def test_answer():
assert func(5) == 7
下面就可以执行pytest
命令来测试功能。
100%
是指运行所有测试用例的整体进度,完成之后,pytest
会显示一个失败报告,指出具体错误原因。pytest
可以指定文件进行测试,更多的时候pytest
会运行当前目录和子目录中的所有test_*.py
或者*_test.py
形式的文件。
在类中进行多个测试
如果编写了多个测试用例,可以将多个测试用例放在同一个类中,但是需要确保类型的前缀是Test
,否则将会被pytest
跳过。
class TestDemo:
def test_one(self):
x = 'this'
assert 'h' in x
def test_two(self):
x = 'hello'
assert hasattr(x, 'check')
下面是使用pytest
执行测试的结果,在类中编写测试需要注意两点:第一,类名必须有Test
前缀,第二,在使用类进行测试时不需要实例化对象,pytest
会自动找到test_
前缀的方法执行。
Usage and Invocations
Exit codes
不晓得有没有细心的小伙伴发现没有,在使用pycharm运行完成一段程序后,会显示Process finished with exit code 0
,表示程序正常运行完毕了,在运行pytest
时也会出现exit code
,并且可能会出现大概6种不同的exit code
:
exit code 0:所有的测试都已经收集并且成功通过
exit code 1:收集并运行了测试,但是有些测试失败了
exit code 2:测试执行过程中被打断
exit code 3:执行测试时发生内部错误
exit code 4:pytest命令使用错误
exit code 5:没有收集测试
终止测试
在pytest
运行时可以通过命令控制在出现一个或者N个失败信息时停止继续测试。
pytest -x # stop after first failure
pytest --maxfail=2 # stop after two failures
指定/选择测试用例
pytest
支持多种多方运行和选择测试用例。
测试指定py文件:pytest test_mod.py
测试指定目录:pytest /usr/local/testing/
通过节点id指定测试:每个被收集的测试都会被分配一个唯一的nodeid,,由模块名、类名、函数名等,每个部分使用::
分隔。
运行模块中的指定的测试用例:pytest test_mod.py::test_func
运行类中的某个测试方法:pytest test_mod.py::TestClass::test_method
pytest选项
-r
选项可以用于在测试会话结束时显示更加剪短的测试摘要信息,在大型的测试用例中可以非常清晰的获取所有失败、跳过等信息。-r
参数可以和下面其他选项结合使用,输出不同的结果信息。
f:失败的
E:错误的
s:跳过的
x:失败的
p:通过的
如仅查看失败和跳过的测试,可以执行:pytest -rfs
。