使用pytest测试YAML配置解析器

时间:2017-06-25 18:07:18

标签: python parsing yaml pytest

我正在编写一个在多个上下文中使用YAML配置解析器的包。

我需要使用py.test测试解析器,并且我正在为应用解析器子包的每个上下文编写一个类。

所以我需要为每个类加载一个YAML文件,并让它可用于该类中的每个测试。

下面我的例子是一个好的方法还是我应该做的其他事情?

import pytest
import yaml
import my_package

class context_one:
    @pytest.fixture
    def parse_context(self):
        return my_package.parse.context # module within parser for certain context

    @pytest.fixture
    def test_yaml_context(self):
        with open('test_yaml.yml') as yaml_file:
            return yaml.load(yaml_file)

    def test_validation_function1(self,parse_context,test_yaml_context):

        test_yaml = test_yaml_context['validation_function1']

        # test that missing key raises error
        with pytest.raises(KeyError):
            parse_context.validation_function1(test_yaml['missing_key_case'])


        # test that invalid value raises error
        with pytest.raises(ValueError):
            parse_context.validation_function1(test_yaml['invalid_value_case'])

有效。我以为我会问,因为我在py.test文档中找不到太多内容,尽管我觉得这些内容中的某些东西会是一种常见的用例。

具体做法是: 不确定为什么我需要拥有灯具

  • 如果我在测试模块级别加载YAML,测试找不到它 - 这就是py.test的工作方式吗?
  • 我应该只在测试模块级别导入my_package.parse_context吗?

1 个答案:

答案 0 :(得分:1)

  1. 你不需要它们。我将setup_module()定义为读取并解析test_yaml.yml一次以进行所有测试。

  2. 没有。奇怪的问题。如果我要调试它,我会记录当前目录。或者只需打开与测试文件相关的文件:open(os.path.join(os.path.dirname(__file__), 'test_yaml.yml'))

  3. 是的,为什么不呢?