2015-11-05 53 views
3

我有一個燈具需要測試功能的變量。在函數級別上使用自省和聲明變量應該可以工作,如果它對模塊級別有效,但是每次運行代碼時我最終都會得到None而不是字符串「Fancy Table」。Pytest - 燈具功能水平

在上述固定夾具我的範圍設定爲「功能」,並且然後經由GETATTR和request.function內省:

#conftest.py 
@pytest.fixture(scope='function') 
def table(request): 
    from data_setup import create_table 
    table_name = getattr(request.function, "table_name", None) 
    create_table(request, table_name) 

我聲明在測試功能的變量表名:

#test_file.py 
class TestTable(): 

    @pytest.mark.tags("table") 
    def test_create_table(self, test_db): 
     table_name = "Fancy Table" 
     current_page = TablePage(self.test_driver, test_db) 
     current_page.go_to_kitchen("Eva", "Evas Kitchen") 
     current_page.create_first_table(expected_table_name) 
     Validation.assert_equal(expected_table_name, current_page.get_name(), "Table had the wrong name!") 

否則這在模塊級別上工作,因爲有類,但只要我試圖在功能級別上這樣做夾具吐出無再次。我是否在功能級別上使用夾具自檢錯誤?如果不是這樣,它是如何使用的?

回答

2

函數變量是本地的,在函數返回後被銷燬,它們不以任何方式綁定到函數對象......這就是Python的工作方式,並且與py.test沒有關係。

如果明確綁定table_name局部變量的測試功能,有效地讓它活得比其平時的生活中時你的示例將工作:

@pytest.mark.tags("table") 
def test_create_table(self, test_db): 
    test_create_table.table_name = "Fancy Table" 

在另一方面,也不會簡單到只是明確地通過table_nameTablePage?這將更簡單,直接,明確。 :)

0

將本地變量顯式綁定到測試函數導致我的IDE抱怨Unresolved引用。我們還需要知道什麼才能做到這一點?

在給出的示例中,當我編寫test_create_table.table_name = "Fancy Table"時,test_create_table部分是我的IDE抱怨有未解決的參考的部分。因此,鑑於我收到未解決的參考錯誤,我如何成功顯式綁定本地變量?