Pytest的一些实用技巧

pytest.fixture()的作用域选择

: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

测试有异常抛出

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里的一些配置

[tool:pytest]
python_paths = . ;好在根目录下运行py.test的时候扫描到需要测试的包
norecursedirs = .git .tox venv* requirements*; 不扫描的目录
python_files = test*.py ;测试代码
filterwarnings =
    ignore::DeprecationWarning ;在输出中过滤掉特定的警告信息

配合pytest-cov库进行代码覆盖率检查

安装pytest-cov库(依赖于coverage库)后可以很方便地进行代码覆盖率的配置。

py.test --cov=app --cov-report=xml --cov-report=html

网页版的代码覆盖率报告在htmlcov目录下。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券