1、本文介紹,如何利用 fixture 的 params、ids 參數,實現前置條件參數化
使用 @pytest.fixture(param=[list1, list2, list3]) 的方式,以 request.param 的方式作為返回值供測試函數調用,param 中有多少元素,則調用幾次,分別作用在每個用到的測試函數上。
# File : conftest.py # IDE : PyCharm import pytest from selenium import webdriver
# 將驅動實例化 @pytest.fixture(name='driver', params=[webdriver.Chrome(), webdriver.Ie()]) def switchBrowser(request): # request 作為內鍵參數必須傳入 print('\n實例化webdriver') yield request.param # 通過 request.param 接收參數化的數據 print('\n關閉webdriver') request.param.quit()
使用 fixture 實例化的驅動參數打開瀏覽器:
# File : test_demo_8.py # IDE : PyCharm from time import sleep class TestCase: def test_1(self, driver): print('\n{}打開百度...'.format(driver)) driver.get('https://www.baidu.com') print(driver.title) sleep(5)
執行結果:
test_demo_8.py::TestCase::test_1[driver0]
test_demo_8.py::TestCase::test_1[driver1]
============================= 2 passed in 16.59s ============================== Process finished with exit code 0 實例化webdriver PASSED [ 50%] <selenium.webdriver.chrome.webdriver.WebDriver (session="a6394765b9c3d6b2cafb6dabbe0f5701")>打開百度... 百度一下,你就知道 關閉webdriver 實例化webdriver PASSED [100%] <selenium.webdriver.ie.webdriver.WebDriver (session="07c2b43d-d743-4762-b04b-c6c35cc58c34")>打開百度... 百度一下,你就知道 關閉webdriver
2、ids 有啥用?
源碼解釋是字符串id列表,每個id對應一個參數,因此它們是測試id的一部分。如果沒有提供id,它們將自動按照 name[param_index] 的方式生成。
將上面的 conftest.py 文件加上 ids 參數
# File : conftest.py # IDE : PyCharm import pytest from selenium import webdriver @pytest.fixture(name='driver', params=[webdriver.Chrome(), webdriver.Ie()], ids=['Chrome', 'Ie']) def switchBrowser(request): print('\n實例化webdriver') yield request.param # 通過 request.param 接收參數化的數據 print('\n關閉webdriver') request.param.quit()
再次執行(注意標紅的部分):
test_demo_8.py::TestCase::test_1[Chrome] test_demo_8.py::TestCase::test_1[Ie] ============================= 2 passed in 16.96s ============================== Process finished with exit code 0 實例化webdriver PASSED [ 50%] <selenium.webdriver.chrome.webdriver.WebDriver (session="8fa18d315e3b3d1f46c251a097522a59")>打開百度... 百度一下,你就知道 關閉webdriver 實例化webdriver PASSED [100%] <selenium.webdriver.ie.webdriver.WebDriver (session="eb9fb969-cdf7-45e3-a761-01a3162d9c85")>打開百度... 百度一下,你就知道 關閉webdriver