2017-07-06 34 views
0

有沒有一種方法可以從一個簡單的函數中引用(並調用)一個pytest夾具,該函數本身不是test_ *函數,也不是一個夾具?有沒有辦法從一個簡單的(非測試)函數直接引用pytest fixture?

著名的例子,可以使用夾具:

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測試運行者執行了一系列魔術,如[assertion rewriting](https://docs.pytest.org/en/latest/assert.html#advanced-assertion-introspection)和猴子修補。 Pytest夾具不能在pytest之外工作。 –

+0

如果您需要一些共享功能,只需將它導入到您的測試中,並將其包裝在那裏的「pytest.fixture」中。 –

回答

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定義可用的電腦燈列表。我提出了兩種訪問列表的方式,但還沒有把它推到足以讓列表以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

'從pytest進口record_xml_property作爲property_handler' **è導入錯誤:無法導入名稱record_xml_property ** ^^^這其中確實有record_xml_property 我的願望是能夠做到像這樣的系統上。 '嘗試: 從pytest進口record_xml_property,除了property_handler : @ pytest.fixture() DEF property_handler(的myKey,設爲myVal): 打印( '{0} = {1}' 格式(的myKey,設爲myVal) ' ^^^如果上述可以成功,那麼我總是可以依賴** property_handler **作爲夾具在那裏。 – KenB

+0

@sauln,請參閱我的已添加NOTE對我原來的問題 – KenB

+0

@KenB ahh好吧。我沒有意識到你想要預定義,給我一秒鐘,我會盡力解決你的問題 –

相關問題