pytest官方文档解读fixtures

目录
  • 一、测试的构成
  • 二、回到fixtures本身

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

一、测试的构成

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

就拿最常见的登录来说,完成一次正常的登录场景,需要可用的测试环境,可以正常登录的账号和密码。然后,用这个账号密码进行登录操作,结果登录成功,符合这次正常登录场景的预期结果,测试完成。

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

  • Arrange
  • Act
  • Assert
  • Cleanup

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

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

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

Assert,Assert是我们查看结果的地方,看看是否像我们预期的那样。比如接口请求成功后,数据的接口会返回“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的特点。

以上就是pytest官方文档解读fixtures的详细内容,更多关于pytest解读fixtures的资料请关注我们其它相关文章!

(0)

相关推荐

  • pytest解读fixture有效性及跨文件共享fixtures

    目录 fixture有效性及跨文件共享fixtures 一.fixture有效性 二.跨文件共享fixtures fixture有效性及跨文件共享fixtures 一.fixture有效性 fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到.比如,在类里面定义了一个fixture,那么就只能是这个类中的测试函数才可以请求.但是,如果一个fixture定义的范围是整个模块,那么这个模块下的每个测试函数都可以去请求. 这里还有另一个影响fixture有效性的参

  • pytest官方文档解读fixtures的autouse

    现在我们已经知道了,fixtures是一个非常强大的功能. 那么有的时候,我们可能会写一个fixture,而这个fixture所有的测试函数都会用到它. 那这个时候,就可以用autouse自动让所有的测试函数都请求它,不需要在每个测试函数里显示的请求一遍. 具体用法就是,将autouse=True传递给fixture的装饰器即可. import pytest @pytest.fixture def first_entry(): return "a" @pytest.fixture de

  • pytest解读一次请求多个fixtures及多次请求

    目录 一.一个测试函数/fixture一次请求多个fixture 二.每个测试函数可以多次请求fixtures(返回值被缓存) 跟着节奏继续来探索fixtures的灵活性. 一.一个测试函数/fixture一次请求多个fixture 在测试函数和fixture函数中,每一次并不局限于请求一个fixture.他们想要多少就可以要多少. 下面是另一个简单的例子: import pytest # Arrange @pytest.fixture def first_entry(): return "a&

  • pytest fixtures函数及测试函数的参数化解读

    目录 pytest fixtures测试函数参数化 一.@pytest.mark.parametrize:参数化测试函数 1. 常规用法 2. 在参数化中标记单个测试实例 3. 多个参数化组合,笛卡尔积 二.用钩子函数pytest_generate_tests example拓展 总结 pytest fixtures测试函数参数化 Pytest会在以下几个级别启用测试参数化: pytest.fixture(),可以对fixture函数进行参数化. @pytest.mark.parametrize

  • pytest官方文档解读fixtures调用fixtures及fixture复用性

    目录 fixtures调用其他fixtures及fixture复用性 一.Fixtures调用别的Fixtures 二.Fixtures的复用性 fixtures调用其他fixtures及fixture复用性 pytest最大的优点之一就是它非常灵活. 它可以将复杂的测试需求简化为更简单和有组织的函数,然后这些函数可以根据自身的需求去依赖别的函数. fixtures可以调用别的fixtures正是灵活性的体现之一. 一.Fixtures调用别的Fixtures 直接看一个简单示例: import

  • pytest官方文档解读fixtures

    目录 一.测试的构成 二.回到fixtures本身 在深入了解fixture之前,让我们先看看什么是测试. 一.测试的构成 其实说白了,测试就是在特定的环境.特定的场景下.执行特定的行为,然后确认结果与期望的是否一致. 就拿最常见的登录来说,完成一次正常的登录场景,需要可用的测试环境,可以正常登录的账号和密码.然后,用这个账号密码进行登录操作,结果登录成功,符合这次正常登录场景的预期结果,测试完成. 这样看来,通常就可以把测试分为4个步骤: Arrange Act Assert Cleanup

  • pytest官方文档解读fixture的调用方式

    目录 pytest官方文档fixtures调用 一.测试函数声明传参请求fixture 二.fixture中的返回值传递给测试函数 pytest官方文档fixtures调用 既然fixtures是给执行测试做准备工作的,那么pytest如何知道哪些测试函数 或者 fixtures要用到哪一个fixtures呢?说白了,就是fixtures的调用. 一.测试函数声明传参请求fixture 测试函数通过将fixture声明为参数来请求fixture. def test_my_fruit_in_bas

  • pytest官方文档解读Fixture errors抛错解决

    既然fixtures函数也是咱们自己写的,那难免会发生异常,当fixture函数异常后,pytest中如何处理呢? 首先,在pytest中,如果一个测试函数中传入了多个fixture函数,那么pytest会尽可能的按线性顺序先后执行.如果,先执行的fixture函数有问题引发了异常,那么pytest将会停止执行这个测试函数的fixture,并且标记此测试函数有错误. 但是,当测试被标记为有错误时,并不是说这个测试函数的结果失败了,这仅仅意味着测试函数所依赖的fixture有问题,导致测试函数不能

  • fullCalendar中文API官方文档

    1. 使用方式: 引入相关js, css后, $('#div_name').fullCalendar({//options}); 接受的是一个option对象 2. 普通属性 2.1. year, month, date: 整数, 初始化加载时的日期. 2.2. defaultView: 字符串类型, 默认是'month; 2.2.1. 允许的views: 2.2.1.1. month 一页显示一月, 日历样式 2.2.1.2. basicWeek 一页显示一周, 无特殊样式 2.2.1.3.

  • iPhone X官方文档的适配学习详解

    前言 官方文档原文地址:链接,iPhone X在文中均用iPX来表示,iPhone 7在文中均用iP7来表示 屏幕尺寸 iPX的屏幕尺寸是2436px×1125px(812pt×375pt @ 3x),也就是说我们依然使用的是3x的素材应该影响不大,他和iP7在宽度上是一致的,但是高度上多了145个点. 布局 最好在真机上预览一下布局. 布局需要延伸到边缘,另外在纵向高度上最好可以根据不同情境滚动. 状态栏的高度已经改变了,如果布局没有使用系统的导航栏,或者布局是依照导航栏来的,那么需要重新适配

  • 深入理解Vue官方文档梳理之全局API

    Vue.extend 配置项data必须为function,否则配置无效.data的合并规则(可以看<Vue官方文档梳理-全局配置>)源码如下: 传入非function类型的data(上图中data配置为{a:1}),在合并options时,如果data不是function类型,开发版会发出警告,然后直接返回了parentVal,这意味着extend传入的data选项被无视了. 我们知道实例化Vue的时候,data可以是对象,这里的合并规则不是通用的吗?注意上面有个if(!vm)的判断,实例化

  • Vue官方文档梳理之全局配置

    本文主要介绍了Vue官方文档梳理之全局配置,分享给大家,也给自己留个笔记.具体如下: optionMergeStrategies 用于自定义选项的合并策略,Vue已经预定义了一些自己配置项的合并策略,如下图所示. 比如props.methods.computed就是同一个策略:子配置项会覆盖父级配置项.源码如下: var strats = config.optionMergeStrategies; strats.props = strats.methods = strats.computed =

  • 利用python查看官方文档

    离线版本Python Mannuals,直接开始菜单搜索就行,Module Docs是安装模块的文档,点开在浏览器打开 或者安装Python目录下找Doc点进去 比如查看python内置的函数 像re,tkinter在D:\Python36\lib下,jupyter,mysql安装在D:\Python36\lib\site-packages下 官网点击Docs https://docs.python.org/3/ 到此这篇关于利用python查看官方文档的文章就介绍到这了,更多相关python查

随机推荐