2017-06-27 16 views
1
@pytest.fixture(scope="function", 
       params=load_json("path_to_json.json")) 
def valid_data(self, request): 
    return request.param 

これは私のテストクラスの1つに含まれています。彼らは私の期待されるテストデータを含んでいます。各テストの前に、私はそれらのJSONファイルを変更する必要があります。テスト前にPythonテスト、jsonファイルを修正してロードする

@pytest.fixture(scope="session", autouse=True) 
def prepare_file(): 
    // Doing the change and writing it to the json file 

しかし、テストを実行すると、ファイルが更新されていないようです。しかし、テストが終わったら。それらは更新されます。何が起こっている ?

+0

異なるケースに異なるテストファイルを用意したり、それらを嘲笑したりするのはなぜですか? – jonrsharpe

+0

私はあなたが何を意味するか分かりません。問題は、すべてのテストスイートを起動する前にDBを再作成することです。 DBから特定のIDを持つjsonファイルを編集する必要があります。 – Jbeat

答えて

0

いくつかのもの、あなたは理解する必要があります。

  1. あなたのフィクスチャスコープは間違いなくあなたが
  2. に沿ってそれらを渡す場合は、他の器具にアクセスすることができ、他の
  3. あなたの個々の器具の内部に1を使用したい場合は一致する必要があります

私はこれがあなたの質問を解決するかどうか全くわからない、しかし:

import json 

@pytest.fixture(scope="function"): 
def output_json_filepath(): 
    return 'path/to/file' 

@pytest.fixture(scope="function"): 
def json_data(request): 
    return request.param 

@pytest.fixture(scope="function"): 
def prepared_data(json_data): 
    # do something here? 
    return prepared_data 

# Not sure why you need this... 
@pytest.fixture(scope="function"): 
def dump_data(prepared_data, output_json_filepath): 
    with io.BytesIO(output_json_filepath, 'wb') as stream: 
     stream.write(prepared_data) 

... 

@pytest.mark.unit_test 
def some_test(prepared_data): 
    # use your prepared_data here in your test. 
+0

フィクスチャスコープを指摘していただきありがとうございます。私は混乱していました。最後に、ファイルをロードするためにフィクスチャを使用して問題を解決し、同じフィクスチャでDBから必要なIDを取得し、返す前にディクテーションを修正します。最後に、私はディスク上のjsonファイルを変更する必要はありません – Jbeat

関連する問題