【问题标题】:Python/Pytest fixture value depending on test numberPython/Pytest 夹具值取决于测试编号
【发布时间】:2020-08-28 20:24:56
【问题描述】:

我创建了一个 @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
    ...
 

其中一个元素是否可能,例如driver.enter_year() 取决于测试中的元素? 例如:

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')


【问题讨论】:

    标签: python unit-testing testing pytest


    【解决方案1】:

    是的,您可以使用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')
    

    这通过将参数写入request.param 来参数化夹具。这通常用于将多个参数值传递给夹具,如果您的测试除了该值之外是相似的,您也可以这样做:

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

    【讨论】:

    • 感谢您的时间和事实的答复。你帮了我很多。问候,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多