pytest.fixture()
的作用域选择
代码语言:txt复制:arg scope: the scope for which this fixture is shared, one of "function" (default), "class", "module","package" or "session".
import pytest
@pytest.fixture()
def new_one():
yield dict(a=1, b=2)
@pytest.fixture(scope='module')
def always_one():
yield dict(a=1, b=2)
def test1(new_one:dict, always_one:dict):
assert new_one'a' == 1
assert always_one'a' == 1
new_one'a' = -1
always_one'a' = -1
def test2(new_one:dict, always_one:dict):
assert new_one'a' == 1
assert always_one'a' == 1
测试有异常抛出
代码语言:txt复制import pytest
def test():
with pytest.raise(KeyError) as error:
data = dict(a=1, b=2)
data.pop('c')
assert 'c' in str(error)
要注意as
出的error
并不是实际上抛出的异常,不能使用自定义异常的方法和属性,一般只检查str(error)
setup.cfg里的一些配置
代码语言:txt复制[tool:pytest]
python_paths = . ;好在根目录下运行py.test的时候扫描到需要测试的包
norecursedirs = .git .tox venv* requirements*; 不扫描的目录
python_files = test*.py ;测试代码
filterwarnings =
ignore::DeprecationWarning ;在输出中过滤掉特定的警告信息
配合pytest-cov库进行代码覆盖率检查
安装pytest-cov库(依赖于coverage库)后可以很方便地进行代码覆盖率的配置。
代码语言:txt复制py.test --cov=app --cov-report=xml --cov-report=html
网页版的代码覆盖率报告在htmlcov
目录下。