2017-07-06 7 views
0

pytestフィクスチャをtest_ *関数でもフィクスチャでもない単純な関数から参照する(そして呼び出す)方法はありますか?簡単な(テストではない)関数からpytestフィクスチャを直接参照する方法はありますか?

1)私はこれを行うことができるようにしたい

def test_mytest(some_cool_pytest_fixture_name, the, rest of, my, args): 
    blah 
    blah 
    some_cool_pytest_fixture_name(args) 
    blah 

2) 
@pytest.fixture() 
def my_new_fixture(some_cool_pytest_fixture_name, the, rest of, my, args): 
    blah 
    blah 
    some_cool_pytest_fixture_name(args) 
    blah 

: 3)

def my_simple_function(the, rest of, my, args): 
    blah 
    blah 
    outright.reference.this.pytest.fixture.some_cool_pytest_fixture_name(args) 
    blah 

注:

を器具を使用することができます

知られている例

from pytest import record_xml_property as property_handler 
** E ImportError: cannot import name record_xml_property** 

^^^ record_xml_propertyを持っている。この中にシステム

私の欲求は、このような何かできるようにすることです:上記の成功できる場合

try: 
    from pytest import record_xml_property as property_handler 
except: 
    @pytest.fixture() 
    def property_handler(mykey, myval): 
     print('{0}={1}'.format(mykey,myval) 

を^^^、私はいつもproperty_handlerに依存することができます。

+0

テストコードは、アプリケーションコードをインポートする必要があります。アプリケーションからテストコードをインポートする必要はありません。 Pytestテストランナーは、[アサーションの書き換え](https://docs.pytest.org/en/latest/assert.html#advanced-assertion-introspection)やサルのパッチ適用などの一連の魔法を実行します。 Pytestフィクスチャはpytestの外で動作するようには設計されていません。 –

+0

いくつかの共有機能が必要な場合は、テストにインポートしてpytest.fixtureにラップしてください。 property_handler' としてpytest輸入record_xml_property ** EはImportErrorから –

答えて

1

pytestの組み込み処理を使用すると、可用性とメモリをどのように管理するか心配する必要はありません。

pytestを使用していないときは、通常の関数としてインポートすることができます。

from path.to.cool.pytest.fixture import some_cool_pytest_fixture_name 

def my_simple_function(the, rest of, my, args): 
    some_cool_pytest_fixture_name(args) 


編集

ケンのノートに対応して、私はpytestで定義された利用できる備品のリストにアクセスしようとしているいくつかの時間を費やしました。私はリストにアクセスする2つの方法を考え出しましたが、それをコンソール出力だけのpythonリスト形式で取得するのに十分遠くにプッシュしていません。

コマンドラインからpytest --fixturesを実行すると、使用可能なすべてのフィクスチャを一覧表示できます。 Pythonスクリプトから同じことを行うには、あなたがこのコード

import pytest 
from _pytest import python 
from _pytest import config 
configs = config._prepareconfig() 
python.showfixtures(configs) 

を実行することができ、私はあなたがpytest Sessionオブジェクトに掘るとその_fixturemanager属性を調べる場合は、リストにアクセスすることができると思うが、私は分かりませんでした上記の関数showfixturesのようにこれらを作成する方法はありません。

+0

':名前record_xml_propertyをインポートすることはできません** ^^^これで私の願望は、このような何かを行うことができるようにすることですrecord_xml_property を持っていないシステムに。 '試みる:除くproperty_handler としてpytestインポートrecord_xml_propertyから :pytest.fixture @ を() DEF property_handler(mykeyを、myval)。 プリント( '{0} = {1}' 形式(mykeyを、myval) ' ^^^上記が成功すれば、私はいつも** property_handler **に依存することができます。 – KenB

+0

@sauln、私のオリジナルの質問への私の追加の注釈を参照してください。 – KenB

+0

@KenBああ大丈夫です。 –

関連する問題