在深入了解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的特点。

【pytest官方文档】解读fixtures - 1.什么是fixtures的更多相关文章

  1. 【pytest官方文档】解读fixtures - 2. fixtures的调用方式

    既然fixtures是给执行测试做准备工作的,那么pytest如何知道哪些测试函数 或者 fixtures要用到哪一个fixtures呢? 说白了,就是fixtures的调用. 一.测试函数声明传参请 ...

  2. 【pytest官方文档】解读fixtures - 3. fixtures调用别的fixtures、以及fixture的复用性

    pytest最大的优点之一就是它非常灵活. 它可以将复杂的测试需求简化为更简单和有组织的函数,然后这些函数可以根据自身的需求去依赖别的函数. fixtures可以调用别的fixtures正是灵活性的体 ...

  3. Cuda 9.2 CuDnn7.0 官方文档解读

    目录 Cuda 9.2 CuDnn7.0 官方文档解读 准备工作(下载) 显卡驱动重装 CUDA安装 系统要求 处理之前安装的cuda文件 下载的deb安装过程 下载的runfile的安装过程 安装完 ...

  4. 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer

    当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...

  5. 【pytest官方文档】解读fixtures - 10. fixture有效性、跨文件共享fixtures

    一.fixture有效性 fixture有效性,说白了就是fixture函数只有在它定义的使用范围内,才可以被请求到.比如,在类里面定义了一个fixture, 那么就只能是这个类中的测试函数才可以请求 ...

  6. 【pytest官方文档】解读fixtures - 8. yield和addfinalizer的区别(填坑)

    在上一章中,文末留下了一个坑待填补,疑问是这样的: 目前从官方文档中看到的是 We have to be careful though, because pytest will run that fi ...

  7. 【pytest官方文档】解读- 插件开发之hooks 函数(钩子)

    上一节讲到如何安装和使用第三方插件,用法很简单.接下来解读下如何自己开发pytest插件. 但是,由于一个插件包含一个或多个钩子函数开发而来,所以在具体开发插件之前还需要先学习hooks函数. 一.什 ...

  8. 【pytest官方文档】解读- 开发可pip安装的第三方插件

    在上一篇的 hooks 函数分享中,开发了一个本地插件示例,其实已经算是在编写插件了.今天继续跟着官方文档学习更多知识点. 一个插件包含一个或多个钩子函数,pytest 正是通过调用各种钩子组成的插件 ...

  9. FluentValidation:C#后端输入验证框架的官方文档解读

    参照 FluentValidation 的官方文档写的例子,方便日后查看和使用. 原文:https://github.com/JeremySkinner/FluentValidation/wiki H ...

随机推荐

  1. 2019牛客暑期多校训练营(第十场)F.Popping Balloons(线段树)

    题意:现在给你n个点 现在让你横着划三条线间距为r 然后竖着划三条线间距同样为r 现在让你求经过最多的点数 思路:我们首先建一棵关于y区间的线段树 然后枚举x轴 每次更新重叠的点 然后再更新回去 找一 ...

  2. Codeforces Round #673 (Div. 2) B. Two Arrays(数学)

    题目链接:https://codeforces.com/contest/1417/problem/B 题意 定义 $f(a)$ 为数组 $a$ 中满足: $i < j$ $a_i + a_j = ...

  3. Java_web项目中在Java文件里面通过类装载器对资源文件读取

    承接上一节:在eclipse完成对Java_web项目里面资源文件的读取 我们首先在src目录下创建一个资源文件db.properties 内容如下: url=127.0.0.1 name=root ...

  4. Discrete Centrifugal Jumps CodeForces - 1407D 单调栈+dp

    题意: 给你n个数hi,你刚开始在第1个数的位置,你需要跳到第n个数的位置. 1.对于i.j(i<j) 如果满足 max(hi+1,-,hj−1)<min(hi,hj) max(hi,hj ...

  5. 【noi 2.6_9288】&【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度除法)

    题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变 ...

  6. [IOI1998] Polygon (区间dp,和石子合并很相似)

    题意: 给你一个多边形(可以看作n个顶点,n-1条边的图),每一条边上有一个符号(+号或者*号),这个多边形有n个顶点,每一个顶点有一个值 最初你可以把一条边删除掉,这个时候这就是一个n个顶点,n-2 ...

  7. codeforces626E.Simple Skewness(三分)

    Define the simple skewness of a collection of numbers to be the collection's mean minus its median. ...

  8. Codeforces Round #641 div2 B. Orac and Models (DP)

    题意:有一个长度为\(n\)的序列\(a\),求一个最长上升子序列,且这个子序列的元素在\(a\)中的位置满足\(i_{j+1}modi_{j}=0\),求这个子序列的最大长度. 题意:这题假如我们用 ...

  9. URAL - 1635 哈希区间(或者不哈希)+dp

    题意: 演队在口试中非常不幸.在42道考题中,他恰好没有准备最后一道题,而刚好被问到的正是那道题.演队坐在教授面前,一句话也说不出来.但教授心情很好,给了演队最后一次通过考试的机会.他让这个可怜的学生 ...

  10. VSCode配置Python开发环境

    https://blog.csdn.net/vinkim/article/details/81546333 https://zhuanlan.zhihu.com/p/31417084