如何使用pytest框架进行接口测试续集的疑问?

摘要:pytest框架——fixture pytest 中的fixture 是⼀种强大的机制,用于提供测试函数所需的资源或上下文。它可以用于设置测试环境、准备数据等。以下是fixture 的⼀些核心概念和使用场景. 示例1:未标记fixture⽅
pytest框架——fixture pytest 中的fixture 是⼀种强大的机制,用于提供测试函数所需的资源或上下文。它可以用于设置测试环境、准备数据等。以下是fixture 的⼀些核心概念和使用场景. 示例1:未标记fixture⽅法的调用 def fixture_01(): print("第⼀个fixture标记的方法") def test_01(): fixture_01() print("第⼀个测试用例") collected 1 item test_xxx.py::test_01 第一个fixture标记的方法 第一个测试用例 PASSED fixture标记的方法调用 import pytest @pytest.fixture def fixture_01(): print("第⼀个fixture标记的方法") def test_01(fixture_01): print("第⼀个测试⽤例") collected 1 item test_xxx.py::test_01 第一个fixture标记的方法 第一个测试用例 PASSED 未标记 fixture ⽅法的调用与 fixture 标记的方法调⽤完全不⼀样,前者需要在⽅法体中调用,而后者可以将函数名作为参数进行调⽤。 示例2:访问列表页和详情页之前都需要执行登录操作 import pytest @pytest.fixture def login(): print("---执⾏登陆操作-----") def test_list(login): print("---访问列表⻚") def test_detail(login): print("---访问详情⻚") 运行结果: 通过使用@pytest.fixture 装饰器来告诉pytest⼀个特定函数是⼀个fixture,通过运行结果可见,在执行列表页和详情页之前都会先执行 login 方法。 fixture嵌套 import pytest @pytest.fixture def first_entry(): return "a" @pytest.fixture def order(first_entry): return [first_entry] def test_string(order): order.append("b") assert order == ["a", "b"] 测试不必局限于单个fixture ,它们可以依赖于想要的任意数量的fixture ,并且fixture 也可以使⽤其他fixture。 请求多个fixture import pytest class Fruit: def __init__(self, name): self.name = name def __eq__(self, other): return self.name == other.name @pytest.fixture def my_fruit(): return Fruit("apple") @pytest.fixture def fruit_basket(my_fruit): return [Fruit("banana"), my_fruit] def test_my_fruit_in_basket(my_fruit, fruit_basket): assert my_fruit in fruit_basket 测试和 fixture 不仅限于⼀次请求单个 fixture ,它们可以请求任意多个。 yield fixture 当运行测试时,我们希望确保它们能够自己清理,以便它们不会⼲扰其他测试(同时也避免留下⼤量测试数据来膨胀系统)。pytest中的 fixture 提供了⼀个⾮常有用拆卸系统,它允许我们为每个 fixture 定义具体的清理步骤。 “Yield” fixture 使用 yield 而不是 return 。有了这些 fixture ,我们可以运行⼀些代码,并将对象返回给请求的 fixture/test ,就像其他 fixture ⼀样。唯⼀的不同是: return 被替换为 yield 。 该 fixture 的任何拆卸代码放置在 yield 之后。 ⼀旦 pytest 确定了 fixture 的线性顺序,它将运行每个 fixture 直到它返回或 yield ,然后继续执行列表中的下⼀个 fixture 做同样的事情。测试完成后,pytest 将逆向遍历 fixture 列表,对于每个 yield 的 fixture ,运行 yield语句之后的代码。
阅读全文