简体   繁体   English

Python/Pytest 夹具值取决于测试编号

[英]Python/Pytest fixture value depending on test number

I have created a @pytest.fixture(scope="class") inside which I have added steps in the selenium:我创建了一个 @pytest.fixture(scope="class") 在里面我在 selenium 中添加了步骤:

@pytest.fixture(scope="class")
def test_setup1(test_setup):
    driver.click_element()
    driver.enter_price()
    driver.enter_year('1997') <--- test-dependent element
    many steps
    ...
 

Is it possible that one of the elements eg driver.enter_year() depends on the element inside test?元素之一(例如 driver.enter_year() 是否可能取决于测试中的元素? For example:例如:

def test_order_1 (self, test_setup1):

    date = 1998
    assert element_in_alert('Succes')


def test_order_2 (self, test_setup1):

    date = 1994
    assert element_in_alert('Succes')


Yes, you can do this using indirect fixture parametrization :是的,您可以使用间接夹具参数化来做到这一点:

@pytest.fixture(scope="class")
def test_setup1(request, test_setup):
    driver.click_element()
    driver.enter_price()
    driver.enter_year(request.param)

@pytest.mark.parametrize("test_setup1", ["1998"], indirect=True)
def test_order_1 (self, test_setup1):
    assert element_in_alert('Succes')

@pytest.mark.parametrize("test_setup1", ["1994"], indirect=True)
def test_order_2(test_setup1):
    assert element_in_alert('Succes')

This parametrizes the fixture by writing the parameter(s) into request.param .这通过将参数写入request.param参数化夹具。 This is usually used to pass more than one parameter value to the fixture, and if your tests are similar except for that value, you can also do this:这通常用于将多个参数值传递给夹具,如果您的测试除了该值之外都相似,您也可以这样做:

@pytest.mark.parametrize("test_setup1", ["1994", "1998"], indirect=True)
def test_order(test_setup1):
    assert element_in_alert('Succes')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM