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