私は、複数のコンテキストでYAML設定パーサを使用するパッケージを作成しています。pytestでYAML configパーサをテストする
パーサーを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ですテストは動作しますか?
- 私はテストモジュールレベルでmy_package.parse_contextをインポートするだけですか?
なぜあなたのテストがどのように動作しているか心配しているのですが、テストだけです。 ** PyYAMLの使用、特に 'yaml.load()'の使用について心配する必要があります。これは、PyYAMLのマニュアルで説明されているように、安全でない(ディスクを消去するか、制御されない入力で悪化する)ことがあります。実際にそれを使用することは絶対に必要ではないので、なぜそのリスクを最初に実行するのですか? 'safe_load()'を使い、必要なコンストラクタで拡張してください。 – Anthon
YAMLのセキュリティ問題について教えていただきありがとうございます。ただし、この場合、YAMLは、パッケージが使用する設定ファイルとしてユーザ自身によって書き込まれます。だから、彼らが(おそらくそうではない)自分自身をハックしようとしているのでなければ、それはこのケースでは心配してはいけません。私が設定ファイルによって何を意味するのか明確でない場合は申し訳ありません – NickleDave