微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在pytest中,如何访问传递给测试的参数?

在pytest中,我可以传递参数进行测试(使用fixture或者decorator @ pytest.fixture(params = list-of-params)).

完成测试后,如果测试失败,则传递的参数将显示在结果中,如TestCheckoutPage.test_address_edit [True]或False(如果为false).

如何访问这些参数并将其添加到终结器? request.param似乎不起作用,即使这是在制作灯具时获取参数的方式:

@pytest.fixture(params=[True, False])
def user(request):
    return request.param

这样可行.但是,如果我尝试将其传递给测试:

class TestClass:
    def test_something(self, user):
        pass

然后,使用autouse fixture收集信息:

@pytest.fixture(autouse=True)
def set_driver(self, request):
    print request.param

这引发了一个错误,说FixtureRequest中没有参数.

有没有办法让我可以获得该参数?我试图让Selenium在测试失败时截取屏幕截图,但因为带参数的测试具有相同的名称和类名以及所有,它正在为第一次执行写入文件,然后将其覆盖第二,第三,…… ,时间到了.所以我想将参数添加文件名中以避免这种情况.

谢谢!

解决方法:

实际上,request.param仅在定义参数化的fixture函数中可用.如果您需要set_driver夹具中的用户,您可以尝试这样做:

import pytest

@pytest.fixture(params=[True, False])
def user(request):
    return request.param

class TestHello:
    @pytest.fixture(autouse=True)
    def set_driver(self, user):
        print "set_driver sees", user

    def test_method(self):
        assert 0

如果你只想让set_driver做一些事情,如果用户实际参与了测试,那么你可以这样做:

import pytest

@pytest.fixture(params=[True, False], scope="module")
def user(request):
    return request.param

@pytest.fixture(autouse=True)
def set_driver(request):
    if "user" in request.fixturenames:
        user = request.getfuncargvalue("user")
        print "set_driver sees", user


def test_function(user):
    assert 0

def test_function_nouser():
    assert 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐