Python 在Pytest中参数化静态webdriver夹具和生成器?

Python 在Pytest中参数化静态webdriver夹具和生成器?,python,selenium,pytest,generator,fixtures,Python,Selenium,Pytest,Generator,Fixtures,我正在构建一个自动化测试,用于在WP插件中查找任何可能的死链接。为此,我有两个助手函数 第一个是Selenium webdriver: @pytest.fixture(scope='session') def设置(): d=webdriver.Firefox() site=os.getenv('TestSite') d、 获取(站点) login=d.find_element_by_id('user_login')) d、 隐式等待(5) user,pw=os.getenv('TestUser'

我正在构建一个自动化测试,用于在WP插件中查找任何可能的死链接。为此,我有两个助手函数

第一个是Selenium webdriver:

@pytest.fixture(scope='session')
def设置():
d=webdriver.Firefox()
site=os.getenv('TestSite')
d、 获取(站点)
login=d.find_element_by_id('user_login'))
d、 隐式等待(5)
user,pw=os.getenv('TestUser'),os.getenv('TestPw'))
d、 查找元素(By.ID,“用户登录”)。发送密钥(用户)
d、 查找元素(By.ID,“用户通行证”)。发送密钥(pw)
d、 查找元素(By.ID,'wp submit')。单击()
产量d,地点
d、 退出
第二个函数读入JSON文件,挑出文件中的每个页面,然后将其交给第三个函数:

def page_generator()->迭代器[Dict[str,Any]]:
尝试:
json_path='../linkList.json'
doc=open(json_路径)
body=json.loads(doc.read())
文件关闭()
除FileNotFoundError外:
打印(f'在{json_path}'处未找到文件)
出口(1)
对于正文['pages']中的页面:
产量页
第三个功能是测试的主要部分,运行页面并查找每个链接。我的目标是参数化每个页面,我的函数标题目前看起来像

@pytest.mark.parametrize('spin_up,page',[(setup,p)在page_generator()中表示p)])
def测试链接(向上旋转,第页):
驱动程序,站点=向上旋转
#做所有的事情

不幸的是,运行此操作会导致
TypeError:无法解压缩不可编辑的函数对象
。是将
yield d d,site
粘贴在某种循环中的唯一选项,以将函数转换为可编程函数,还是有办法告诉
test\u links
以迭代方式拉动与其
spin\u值相同的设置函数?

有一种简单的方法可以实现您想要的功能,这就是将
设置
夹具直接指定为
测试链接
的参数。请注意,
pytest
足够聪明,可以看出
setup
参数指的是夹具,而
page
参数指的是参数化:

@pytest.mark.parametrize('page', page_generator())
def test_links(setup, page):
    driver, site = setup
你也可以看看。这是我编写的一个包,用于帮助从JSON/YAML/TOML文件加载测试用例。它与
page\u generator()
函数的作用基本相同,但更简洁(更一般)