如何通过pytest正确测试python函数

如何通过pytest正确测试python函数,python,pytest,Python,Pytest,这是我的代码,我想在这里测试validate\u yaml函数(我删除了函数体,因为它们不需要): 这是我的测试文件: import pytest import jsonschema from yaml_to_env import load_yaml, validate_yaml @pytest.mark.parametrize( "invalid_yaml", [ (load_yaml("tests/yaml_files/inv

这是我的代码,我想在这里测试
validate\u yaml
函数(我删除了函数体,因为它们不需要):

这是我的测试文件:

import pytest
import jsonschema
from yaml_to_env import load_yaml, validate_yaml


@pytest.mark.parametrize(
    "invalid_yaml",
    [
        (load_yaml("tests/yaml_files/invalid_workload_type.yaml")),
    ],
)
def test_yaml_env(invalid_yaml):
    with pytest.raises(jsonschema.ValidationError):
        validate_yaml(invalid_yaml)
我的问题是,当我运行
pytest
时,最后三行也会执行:

env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
它为什么这样做?我只想测试
validate_yaml
函数,在
pytest
期间不调用这三行

提前谢谢

[第1版]

这是迄今为止我发现的最好的解决方案:

if __name__ == "__main__":
    env_list = load_yaml(f"{yaml_file_name}")
    validate_yaml(env_list)
    yaml_to_env(env_list)

你的编辑正是你需要在这里做的。 在上一次尝试中,代码是在测试文件中生产代码的导入过程中执行的。 这不是pytest的问题,而是python的基本模块结构。 有关详细信息,请参阅此链接: 简短回答中的第一点似乎是你所做的。:)

if __name__ == "__main__":
    env_list = load_yaml(f"{yaml_file_name}")
    validate_yaml(env_list)
    yaml_to_env(env_list)