2017-01-12 13 views
0

すべてのフィクスチャにスコープがmoduleであるpytestがあります。私はテストの重複部分を共通の場所に移動し、そこからアクセスしたいと思います。pytest:共通のフィクスチャセットアップを1つの場所に移動

具体的には、以下のサンプルコードでは、test/test_blah.pyには、テスト方法のそれぞれのシリアル番号である変数dsnがあります。私はこの共通コードをどのように抽出するのか分かりませんでした。 TestBasedutにアクセスしようとしましたが、動作させることができませんでした。

# my_pytest/__init__.py 

import pytest 

@pytest.fixture(scope="module") 
def device_fixture(request): 
    config = getattr(request.module, 'config', {}) 
    device = get_device(config.get('dsn')) 
    assert device is not None 
    return device 

...some other code... 

# test/base.py 

class TestBase: 
    def common_method_1(self): 
     pass 

    def common_method_2(self): 
     pass 

# test/test_blah.py 

from base import TestBase 
import my_pytest 
from my_pytest import device_fixture as dut #'dut' stands for 'device under test' 

class TestBlah(TestBase): 
    def test_001(self, dut): 
     dsn = dut.get_serialno() 
     ... 
     # how to extract the dsn = dut.get_serialno() into 
     # something common so I can keep these tests more DRY? 


    def test_002(self, dut): 
     dsn = dut.get_serialno() 
     ... 

    def test_003(self, dut): 
     dsn = dut.get_serialno() 
     ... 
+0

「あなたはそれがうまくいかない」と言います。特にどんな問題が発生しましたか? – jwd

+0

参照:http://stackoverflow.com/questions/33508060/create-and-import-helper-functions-in-tests-without-creating-packages-in-test-di – jwd

答えて

1

私が正しくあなたの質問を理解していれば:conftest.pyであなたの備品を入れて、彼らはあなたのテスト機能の引数として使用するために利用されます。何もインポートする必要はありません。定義するだけです

@pytest.fixture(scope='module') 
def dut(): 
    return 'something' 
関連する問題