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

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

在深入了解fixture之前,让我们先看看什么是测试


一、测试的构成


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


就拿最常见的登录来说,完成一次正常的登录场景,需要可用的测试环境,可以正常登录的账号和密码。


然后,用这个账号密码进行登录操作,结果登录成功,符合这次正常登录场景的预期结果,测试完成。


这样看来,通常就可以把测试分为4个步骤:


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


Arrange,可以理解为 除了执行测试之外的任何事情。比如上面例子中,我得有个可用的测试环境跟可用的账号密码,这些都要事先准备好。


此外,还有可能是:启动/终止服务、将记录输入数据库、定义要查询的URL、为还不存在的用户生成一些凭据等等。


总之,就是为了能够进行测试要准备好的事情。


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


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


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


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


二、回到fixtures本身


而在pytest中,fixtures就是来做Arrange的事情。当然了,fixture也不局限于此,如果测试足够复杂的话,不妨也可以在里面进行act的事情。


把一个普通的函数变成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的特点。

相关文章
|
7月前
|
测试技术 Python
pytest中的fixture和conftest.py
pytest中的fixture和conftest.py
|
测试技术
pytest conftest.py和fixture的配合使用
pytest conftest.py和fixture的配合使用
|
测试技术
pytest学习和使用9-fixture中conftest.py如何使用?
pytest学习和使用9-fixture中conftest.py如何使用?
138 0
pytest学习和使用9-fixture中conftest.py如何使用?
|
测试技术 API
【pytest官方文档】解读fixtures - 9. 什么样的fixture结构,用起来最可靠?
【pytest官方文档】解读fixtures - 9. 什么样的fixture结构,用起来最可靠?
【pytest官方文档】解读fixtures - 9. 什么样的fixture结构,用起来最可靠?
|
关系型数据库 MySQL 测试技术
【pytest官方文档】解读fixtures - 8. yield和addfinalizer的区别(填坑)
【pytest官方文档】解读fixtures - 8. yield和addfinalizer的区别(填坑)
【pytest官方文档】解读fixtures - 8. yield和addfinalizer的区别(填坑)
|
测试技术 Python
pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)
pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)
132 0
|
存储 测试技术 Python
Pytest fixture及conftest详解
fixture关键特性;fixture定义;fixture用法;fixture四种作用域;fixture相关参数;内置fixture示例;
Pytest fixture及conftest详解
|
测试技术
pytest(12)-Allure常用特性allure.attach、allure.step、fixture、environment、categories
上一篇文章pytest Allure生成测试报告我们学习了Allure中的一些特性,接下来继续学习其他常用的特性。
pytest(12)-Allure常用特性allure.attach、allure.step、fixture、environment、categories