pytest 是强大的测试框架
当函数使用test_
为开头的时候,就会在执行测试的时候进行测试。
执行命令为:
pytest -v -s test_file.py
conftest.py
conftest.py
的特点:
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
- 不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py
- conftest.py配置脚本名称是固定的,不能改名称
- conftest.py文件不能被其他文件导入
- 所有同目录测试文件运行前都会执行conftest.py文件
在conftest.py中将会用到@pytest.fixture
装饰器
fixture
在conftest.py
下,可以实现数据共享,不需要 import 就能自动找到一些配置
fixture函数如下:
fixture(scope='function',params=None,autouse=False,ids=None,name=None)
- scope参数可以控制fixture的作用范围,scope:有四个级别参数”function”(默认),”class”,”module”,”session
- params:一个可选的参数列表,每个参数执行一遍,相当于for循环
- autouse:如果True,则为所有测试激活fixture func可以看到它。 可以作为默认执行的测试使用
- ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
- name:fixture的名称。
scope作用范围: session>module>class>function
- function:每一个函数或方法都会调用
- class:每一个类调用一次,一个类中可以有多个方法
- module:每一个.py文件调用一次,该文件内又有多个function和class
- session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
使用方法是在测试用例里面直接写方法名就可以了
另外可以使用pytest --fixtures
查看所有固件
pytest.ini
todo
测试代码覆盖率
coverage
用于对测试的时候,哪些代码被执行了,可以反映出完成程度。
pip install pytest-cov
使用
pytest --cov --cov-report xml
这样就会生成一个xml
文件
命令行中使用coverage report
查看整体覆盖率
VsCode中推荐插件Coverage Gutters
配置:
注意:这样设置会导致vscode在测试时无法使用断点调试!!!
caplog 取log日志
def test_something(caplog)
caplog.set_level(logging.DEBUG)
assert caplog.messages[0] == 'This is a debug message'
caplog.clear()
或者 unittest.mock.path
来mock sys.stdout
from io import StringIO
from unittest.mock import patch
def test_print():
expected = 'this is a message'
with path('sys.stdout', new=StringIO()) as fake_out:
assert fake_out.getvalue().strip() == expected
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com