2016-05-19 87 views
2

testdata對象持有各種公司的憑證。我想將這個對象傳遞給pytest測試函數。在這種情況下,需要運行2次測試(公司1和2每次測試一次)。如何將字典的字典傳遞給pytest

testdata = { 
    "Company1": { 
     "username": "user1", 
     "password": "pass!" 
    }, "Company2": { 
     "username": "user2", 
     "password": "pass!" 
    } 
} 

下面是測試功能

def test_login(): 
    # call login function by passing username and password 
    # Returns True if Success else False 
    assert login() 

我試圖@ pytest.mark.parametrize但無法弄清楚如何通過http://stardict.sourceforge.net/Dictionaries.php下載。

任何關於如何解決這個問題的指針都會很有幫助。

回答

0

這就是你如何@ pytest.mark.parametrize傳遞字典和其他值類型。

import pytest 


@pytest.mark.parametrize(
    "data, value", 
    [ 
     ({"Company1": {"username": "user1", "password": "pass!"}, 
     "Company2": {"username": "user2", "password": "pass!"}}, "some value") 
    ] 
) 
def test_example(data, value): 
    assert isinstance(data, dict) 
    assert value == "some value" 

但是,如果你想拆分本字典在兩到作爲一個單獨的測試運行,你會想要做這樣的事情:

import pytest 


@pytest.mark.parametrize(
    "data, value", 
    [ 
     ({"username": "user1", "password": "pass!"}, "some value"), 
     ({"username": "user2", "password": "pass!"}, "some value") 
    ] 
) 
def test_example(data, value): 
    assert isinstance(data, dict) 
    assert value == "some value" 
0

這不是一個很好的初步實踐,當你創建爲實例斷言..你可能會斷言鍵/值。

你也可以使用燈具

+0

你是說'assert dict1 == dict2'不是很好的做法嗎?爲什麼不? –

+0

沒有那麼好..當你嘗試斷言實例類型時不好。 =) –