测试人社区

代码的理解方法是什么?

@pytest.fixture() …像这些的方法,该怎么样去理解?以下的这段代码中:
class TestLogin:
@pytest.mark.usefixtures(‘login’)
def test_case1(self,login):
print(login)
print(“testcae1”)
只知道理解那是类和方法,就‘@pytest.mark.usefixtures(‘login’)’像这些方法不知道怎么去引用,调用到?感觉自己的理解方式不对,请指教!

这是pytest的装饰器功能呀,usefixtures是引用fixture标签标注的方法,具体可以了解pytest部分

@pytest.fixture()装饰器用于声明函数是一个fixture。如果测试函数的参数列表中包含fixture名,那么pytest会检测到,并在测试函数运行之前执行fixture。

1、使用fixture传递测试数据
2、指定fixture作用范围
3、使用usefixtures指定fixture
4、fixture的参数化

@pytest.fixrture 用来标记fixture对象,通常用于完成预置处理,清理和重复操作。

  • 详细的参数及参数值参考官网,官网中也有很多例子
  • conftest.py 共享夹具功能也非常有用
  • 以下只举几个常用的例子
@pytest.fixture(scope="function", params=[1, 2, 3])
def fixture_name(request):
    # todo 测试准备工作
    yield request.param  # 获取参数化中的一个值
    # todo 测试清理工作

使用方式1:通过将fixture对象的名称做为输入参数

def test_ex(fixture_name):
    # fixture_name 的值是yield中返回的值,若yield不返回,则为空,
    assert fixture_name == 1

使用方式2:夹具中使用夹具

@pytest.fixture(scope="function")
def fixture_name2(fixture_name): # 把夹具对象名称作为另一个夹具对象的输入参数
    # todo 测试准备工作
    yield fixture_name
    # todo 测试清理工作

使用方式3:pytest.mark.usefixtures(),与方式1相比,这种方式不能使用夹具的返回值

使用场景:测试函数不需要直接访问fixture对象

# 每个测试case都会执行fixture_name
@pytest.mark.usefixtures("fixture_name")
class Test_Ex:
    def test_a(self):
        assert 1==1
    def test_b(self):
        pass

谢谢大家,有点明白了!