2017-06-24 8 views
3

ここでは、このフィクスチャを使ってiprangeでネットワークobjを生成します。場合によっては、同じテストで2つの異なるネットワークを生成する必要があります。 pytestでテストケースでフィクスチャを2回実行するには?

@pytest.fixture(scope="function") 
def fixture_user_create_network_with_iprange(get_user_token, 
              fixture_user_create_network, 
              fixture_user_create_iprange, 
              request): 
    token = get_user_token 
    network_uuid = fixture_user_create_network 
    iprange_uuid = fixture_user_create_iprange 
    add_ipranges_to_networks(token,network_uuid,iprange_uuid) 

    return network_uuid 

しかし、同じテストでフィクスチャは、一度だけ実行することができます。 fixture_user_create_ 2nd _network_with_iprangeという名前の別の灯具を作成しますが、それはオリジナルのフィクスチャのコピーですが、別の名前です。

fixture_user_create_network,fixture_user_create_iprangeこれらの2つのフィクスチャの番号は、テストで一度だけ実行されます。私はネットワークobjを1つだけ持っています。

私はオンデマンドでのテストケースにはいつでもフィクスチャを呼び出すことができるかどう器具は、テスト内で2回実行、または

  • 作ることができるのであれば、私は、知りたい

  • 答えて

    0

    単一のフィクスチャを2回実行することはできません。これは備品の概念に反する。

    しかし、network_uuidの準備を関数(関数だけ)に抽出し、それを呼び出す2つ以上の什器を宣言することができます。

    また、動的に備品を呼び出すことができます。

    @pytest.fixture 
    def fixt1(request): 
        return 'hello' 
    
    @pytest.fixture 
    def fixt2(request): 
        return request.getfuncargvalue('fixt1') 
    
    def test_me(fixt2): 
        assert fixt2 == 'hello' 
    

    しかし、それでもまだ、一度だけテストあたりを。

    あなたが同様の器具の動的な量をしたい場合は、あなたがそれらを生成することができます。

    import pytest 
    
    # Just for proper var closures: 
    def _make_fixt_fn(i): 
        @pytest.fixture 
        def fixt_fn(....): 
         return 'fixt{}'.format(i) 
        return fixt_fn 
    
    # The fixtures must reside in the module's namespace. The decorator is just a mark. 
    for i in range(1, 4): 
        name = 'dyn_fixt_{}'.format(i) 
        global()[name] = _make_fixt_fn(i) 
    
    def test_dyn(dyn_fixt_1, dyn_fixt_2, dyn_fixt_3): 
        pass 
    

    が確認できます:

    $ pytest test_dyn.py --fixtures 
    ... 
    ------- fixtures defined from test_dyn ---------- 
    dyn_fixt_1 
        test_dyn.py:6: no docstring available 
    dyn_fixt_2 
        test_dyn.py:6: no docstring available 
    dyn_fixt_3 
        test_dyn.py:6: no docstring available 
    
    関連する問題