【pytest官方文档】解读fixtures - 1.什么是fixtures

在深刻了解fixture以前,让咱们先看看什么是测试数据库

1、测试的构成

其实说白了,测试就是在特定的环境、特定的场景下、执行特定的行为,而后确认结果与指望的是否一致。api

就拿最多见的登陆来讲,完成一次正常的登陆场景,须要可用的测试环境,能够正常登陆的帐号和密码。
而后,用这个帐号密码进行登陆操做,结果登陆成功,符合此次正常登陆场景的预期结果,测试完成。函数

这样看来,一般就能够把测试分为4个步骤:测试

  1. Arrange
  2. Act
  3. Assert
  4. Cleanup

Arrange,能够理解为 除了执行测试以外的任何事情。好比上面例子中,我得有个可用的测试环境跟可用的帐号密码,这些都要事先准备好。
此外,还有多是:启动/终止服务、将记录输入数据库、定义要查询的URL、为还不存在的用户生成一些凭据等等。
总之,就是为了可以进行测试要准备好的事情。ui

Act,相比准备前置环境,Act作的事情就相对单一些,其实就是开始测试动做。好比,接口测试里,调用被测试的api接口。code

AssertAssert是咱们查看结果的地方,看看是否像咱们预期的那样。好比接口请求成功后,数据的接口会返回“success”assert status == "success"对象

Cleanup,在测试结束后,作清理工做,为了其余的测试不会意外的受到本次测试的影响。好比,测试以前我插入了一条测试数据,测试完后,我把它删掉。接口

总得来讲,测试就是Act+Assert,而其余要安排的事情,放在Arrange里。文档

2、回到fixtures自己

而在pytest中,fixtures就是来作Arrange的事情。固然了,fixture也不局限于此,若是测试足够复杂的话,不妨也能够在里面进行act的事情。it

把一个普通的函数变成fixtures很是简单,只要加上@pytest.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():
    # 这里是一个fixture,返回了一个Fruit对象,名字叫苹果
    return Fruit("苹果")


@pytest.fixture
def fruit_basket(my_fruit):
    # 这里是另外一个fixture,一样声明一个Fruit对象,名字叫香蕉。
    # 而后在这个fixture中又传入了上一个fixture:my_fruit
    # 最后把最终的返回装到一个列表[]里,返回
    return [Fruit("香蕉"), my_fruit]


def test_my_fruit_in_basket(my_fruit, fruit_basket):
    # 这是一个测试函数,可使用多个fixture
    assert my_fruit in fruit_basket

上面的代码体现了fixtures的2个重要特性:

  • 测试函数可使用多个fixture
  • fixture自己还可使用其余的fixture

接下来,我将继续跟着官方文档解读fixture的特色。

相关文章
相关标签/搜索