Pytest学习(二)——fixture的详细使用

目录

前言

Fixture定义

fixture的优势

fixture参数列表

1. function(默认)

 2. class 每个测试类调用一次 fixture,所有测试方法共享同一个 fixture 实例。

 3. module 每个测试模块调用一次 fixture,模块内的所有测试方法共享同一个 fixture 实例。

 4. session:在整个测试会话期间只调用一次 fixture,适合用于全局资源配置。

 fixure常用用法

参考文献

前言

  pytest fixture 是一种用来管理测试依赖和资源的机制。

 简单来说,就是做初始化准备,比如一些测试用例需要打开浏览器或者链接数据库才能进行测试,因此我们需要在有需要的测试用例面前加上fixture进行测试前的资源准备。

  • 前面一篇讲了setup、teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的
  • 如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登录。很显然无法用 setup 和 teardown 来实现了
  • fixture可以让我们自定义测试用例的前置条件

Fixture定义

通过在函数前面加上

@pytest.fixture()装饰器来装饰一个函数,那么被装饰的这个函数就是一个fixture

fixture的优势

  • 命名方式灵活,不局限于 setup 和teardown 这几个命名
  • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
  • scope="module" 可以实现多个.py 跨文件共享前置
  • scope="session" 以实现多个.py 跨文件使用一个 session 来完成多个用例

fixture参数列表

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
    print("fixture初始化的参数列表")

参数列表

  • scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session四个【常用】
  • autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
  • name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name

 注意:session的作用域:是整个测试会话,即开始执行pytest到结束测试

案例如下:

1. function(默认)

每个测试函数都会独立调用一次 fixture。

import pytest

@pytest.fixture(scope="function")
def function_fixture():
    print("Function fixture setup")
    yield
    print("Function fixture teardown")

def test_one(function_fixture):
    print("Running test_one")

def test_two(function_fixture):
    print("Running test_two")

输出

Function fixture setup
Running test_one
Function fixture teardown
Function fixture setup
Running test_two
Function fixture teardown

 2. class 每个测试类调用一次 fixture,所有测试方法共享同一个 fixture 实例。

import pytest

@pytest.fixture(scope="class")
def class_fixture():
    print("Class fixture setup")
    yield
    print("Class fixture teardown")

class TestExample:
    def test_one(self, class_fixture):
        print("Running test_one")

    def test_two(self, class_fixture):
        print("Running test_two")

输出:

Class fixture setup
Running test_one
Running test_two
Class fixture teardown

 3. module 每个测试模块调用一次 fixture,模块内的所有测试方法共享同一个 fixture 实例。

import pytest

@pytest.fixture(scope="module")
def module_fixture():
    print("Module fixture setup")
    yield
    print("Module fixture teardown")

def test_one(module_fixture):
    print("Running test_one")

def test_two(module_fixture):
    print("Running test_two")

输出:

Module fixture setup
Running test_one
Running test_two
Module fixture teardown

 4. session:在整个测试会话期间只调用一次 fixture,适合用于全局资源配置。

import pytest

@pytest.fixture(scope="session")
def session_fixture():
    print("Session fixture setup")
    yield
    print("Session fixture teardown")

def test_one(session_fixture):
    print("Running test_one")

def test_two(session_fixture):
    print("Running test_two")

输出:

Session fixture setup
Running test_one
Running test_two
Session fixture teardown

 fixure常用用法

  • Fixture 作用accountlogin fixture 分别用于设置测试环境和返回必要的数据。
  • Fixture 依赖login fixture 依赖于 account,这表明可以将多个 fixture 链接在一起,以便共享状态或初始化数据。
  • 输出顺序:输出顺序由 fixture 的调用顺序决定,确保初始化的逻辑在测试用例执行之前完成。
  • 返回值:可以在测试用例中访问 fixture 返回的值,以进行断言或其他逻辑处理。
import pytest
@pytest.fixture()
def account():
    print("Account")
    return "Ret-Account"
# 调用上面的account fixture
@pytest.fixture()
def login(account):
    print("Login")
class TestDemo:
    def test_case1(self, login):
        print("调用了login,返回值为{}".format(login))

    def test_case2(self, account):
        print("调用了account,返回值为{}".format(account))

参考文献

pytest之fixture用法01:fixture详解-百度开发者中心

Pytest进阶之fixture的使用(超详细)_pytest fixture用法-CSDN博客

Pytest系列(4) - fixture的详细使用 - 小菠萝测试笔记 - 博客园

 pytest 执行用例的基本使用 - 哩子吖 - 博客园

你可能感兴趣的:(#,测试开发,pytest,学习)