在我的功能測試中,我需要創建一個對象(與虛擬服務器相關 - 不是模擬的),它將由一組測試共享。服務器是使用一些py.test所使用的設備(環境,主機等)來指定它應該在哪個環境下設置 - 測試運行在多個不同的環境中。我目前的做法是醜陋的,這樣抽象的例子:Pytest - 創建一個由多個測試共享的對象
# [host, env, dns are fixtures, defined in conftest.py and passed from
# commandline args - py.test recognizes them so they can be changed
# each time the test is invoked from CLI]
@pytest.mark.parametrize(parameters_from_parametrize)
def test_something(host, env, dns):
server = Server(host,env, dns, random_name, random_passwd)
server.create()
server.do_stuff(parameters_from_parametrize)
check_stuff()
server.delete()
但是,這會爲每個組parameters_from_parametrize的一個新的服務器。有沒有辦法用燈具創建一臺服務器,然後運行該服務器?
中,例如:
server = Server(host,env, dns, random_name, random_passwd)
server.create()
@pytest.mark.parametrize(parameters_from_parametrize)
def test_something(server):
server.do_stuff(parameters_from_parametrize)
check_stuff()
server.delete()
這樣服務器將只創建一次。上面的示例不起作用,因爲在測試功能之前不能使用燈具(並且測試功能外的代碼不會與它們共享範圍),所以在測試功能之外添加服務器失敗。我嘗試過安裝和拆卸,但是我無法使用它來使用燈具。
有沒有辦法做到這一點?我認爲我可以使用setup/teardown或者創建一個測試課來完成,但是我失敗了。
我希望這不是一個非常不討好的問題,但它可能是。
這裏有一個小的錯字 - 'score ='session'' - 應該是範圍,而不是分數。 –
@TomDalton修正了,謝謝! – bereal
是的!我只需要改變host,env和dns的作用域以匹配'session'作用域,並且它完美地工作。此外,它不會中斷其餘的測試,所以我可以開始以這種方式編寫新測試,並在此期間修改舊測試。 你是我今天的英雄,我能不能給你買啤酒? :) – Taku