【pytest】fixture固件-传递参数

引言:pytest框架用于传递参数的方法是在需要返回参数的方法上面添加一个装饰器@pytest.fixture()


目录

关联+一个参数的传递

关联+多个参数的传递

关联+函数的传递

 conftest.py 文件的使用

scope参数详解


关联+一个参数的传递

在想要返回参数的方法上面添加装饰器@pytest.fixture(),同时第二个方法接收参数,但是要注意方法中传递的参数要写第一个方法的方法名。

# 利用fixture固件技术进行参数传递
class Test_Class6():
    @pytest.fixture()
    def test_case1(self):
        uname = "user1"
        return uname

    def test_case2(self, test_case1):
        b = test_case1
        print(b)

关联+多个参数的传递

当想要传递多个参数的时候,可以将参数放在列表中传递。

class Test_Class7():
    @pytest.fixture()
    def test_case1(self):
        uname = ["user1", "user2"]
        return uname

    def test_case2(self, test_case1):
        b = test_case1
        print(b)

关联+函数的传递

新定义的函数的返回值同样也可以传递,一样是在函数上面添加装饰器@pytest.fixture()

import random
class Test_Class7():
    @pytest.fixture()
    def random_number(self):
        num = random.randint(1, 10)
        return num

    def test_case2(self, random_number):
        b = random_number
        print(b)

 conftest.py 文件的使用

大批量的脚本需要使用相同的测试数据,可以在项目根目录下创建conftest.py文件

  • conftest.py配置脚本名称是固定的,不能改名称
  • conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  • 放到项目的根目录下就可以全局调用了,如果放到某个package下,那就在改package内有效
import pytest
@pytest.fixture(scope='session')
def test_data():
    datalist = [1, 2, 3, 4, 5]
    return datalist

scope参数详解

fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function

如果不写scope参数,那默认就是function。

  • function:每一个函数或方法都会调用,每个测试用例执行前都会执行一次function级别的fixture
  • class:每一个类调用一次,一个类中可以有多个方法。只在class里所有用例开始前执行一次
  • module:每一个.py文件调用一次,该文件内又有多个function和class。在当前.py脚本里面所有用例开始前只执行一次
  • session:是多个文件调用一次,可以跨.py文件调用。有多个.py文件调用时,实际只调用了一次fixture
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
pytest fixture 中的参数是通过函数参数传递的,具体传递方式有两种:一种是使用 `@pytest.fixture` 的 `params` 参数,另一种是在测试函数中直接传递参数。下面分别给出示例: 1. 使用 `@pytest.fixture` 的 `params` 参数传递参数 ```python import pytest @pytest.fixture(params=[1, 2, 3]) def my_fixture(request): return request.param def test_my_fixture(my_fixture): assert my_fixture > 0 ``` 在这个例子中,`@pytest.fixture` 声明了一个 fixture 函数 `my_fixture`,并使用 `params` 参数指定了三个参数值:1、2、3。在测试函数 `test_my_fixture` 中,`my_fixture` 作为参数传递进去,它的值会依次取到 1、2、3,每次都会执行一遍测试函数。因为 `assert` 语句的条件 `my_fixture > 0` 满足,所以测试函数通过。 2. 在测试函数中直接传递参数 ```python import pytest @pytest.fixture def my_fixture(): return 42 def test_my_fixture(my_fixture): assert my_fixture == 42 def test_my_fixture_with_param(): param = 24 assert my_fixture(param) == 66 ``` 在这个例子中,`@pytest.fixture` 声明了一个 fixture 函数 `my_fixture`,它返回了一个值 42。在测试函数 `test_my_fixture` 中,`my_fixture` 作为参数传递进去,这个测试函数断言 `my_fixture` 返回的值等于 42。在测试函数 `test_my_fixture_with_param` 中,我们创建了一个参数 `param`,并通过 `my_fixture(param)` 的方式直接调用了 fixture 函数,并传递了参数 `param`。这里我们规定,`my_fixture` 函数接收一个整数参数,然后把它加上 42 再返回。因此,测试函数 `test_my_fixture_with_param` 的断言条件是 `my_fixture(param) == 66`。这个测试函数通过。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BetterFate!

爱你哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值