【问题标题】:Parametrizing a static webdriver fixture and a generator in Pytest?在 Pytest 中参数化静态 webdriver 夹具和生成器?
【发布时间】:2021-01-04 19:48:52
【问题描述】:

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

第一个启动 Selenium 网络驱动程序:

@pytest.fixture(scope='session')
def setup():
    d = webdriver.Firefox()
    site = os.getenv('TestSite')
    d.get(site)
    login = d.find_element_by_id('user_login')
    d.implicitly_wait(5)
    user, pw = os.getenv('TestUser'), os.getenv('TestPw')
    d.find_element(By.ID, 'user_login').send_keys(user)
    d.find_element(By.ID, 'user_pass').send_keys(pw)
    d.find_element(By.ID, 'wp-submit').click()
    yield d, site
    d.quit()

第二个读取一个 JSON 文件,挑选出文件中的每一页,然后将其交给第三个函数:

def page_generator() -> Iterator[Dict[str, Any]]:
    try:
        json_path = '../linkList.json'
        doc = open(json_path)
        body = json.loads(doc.read())
        doc.close()
    except FileNotFoundError:
        print(f'Did not find a file at {json_path}')
        exit(1)
    for page in body['pages']:
        yield page

第三个功能是测试的香饽饽,遍历页面,寻找每个链接。我的目标是参数化每个页面,我的函数标题目前看起来像......

@pytest.mark.parametrize('spin_up, page', [(setup, p) for p in page_generator()])
def test_links(spin_up, page):
    driver, site = spin_up
    # Do all the things

不幸的是,运行这个结果是TypeError: cannot unpack non-iterable function object。将yield d, site 粘贴在某种循环中以将函数转换为可迭代的唯一选择是,还是有办法告诉test_links 迭代地提取与其spin_up 值相同的设置函数?

【问题讨论】:

    标签: python selenium pytest generator fixtures


    【解决方案1】:

    有一个简单的方法可以做你想做的事,那就是将setup 固定装置直接指定为test_links 的参数。请注意,pytest 足够聪明,可以确定 setup 参数指的是一个夹具,而page 参数指的是一个参数化:

    @pytest.mark.parametrize('page', page_generator())
    def test_links(setup, page):
        driver, site = setup
    

    您还可以查看parametrize_from_file。这是我编写的一个包,用于帮助从 JSON/YAML/TOML 文件加载测试用例。它基本上与您的 page_generator() 函数做同样的事情,但更简洁(也更普遍)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2022-12-08
      相关资源
      最近更新 更多