1. 概述

Pytest的fixture功能灵活好用,支持参数设置,便于进行多用例测试,简单便捷,颇有pythonic。
如果要深入学习pytest,必学fixture。

fixture函数的作用:

  • 完成setup和teardown操作,处理数据库、文件等资源的打开和关闭
  • 完成大部分测试用例需要完成的通用操作,例如login、设置config参数、环境变量等
  • 准备测试数据,将数据提前写入到数据库,或者通过params返回给test用例,等

2. 使用介绍

2.1. 简介

  • 把一个函数定义为Fixture很简单,只能在函数声明之前加上“@pytest.fixture”。其他函数要来调用这个Fixture,只用把它当做一个输入的参数即可
  • 多个fixture方法,可以互相调用,最好不要递归哈(没试过,有兴趣的童鞋可以试试)
  • 一个test函数可以包含多个fixture参数
  • fixture作用域:fixture可以修饰单个函数,单个或多个类的成员函数,单个类

2.2. 三种使用方式

方式1,将fixture函数,作为test函数的参数

import pytest

@pytest.fixture()
def before():
print '\nbefore each test' def test_1(before):
print 'test_1()' def test_2(before):
print 'test_2()'
assert 0

方式2,@pytest.mark.usefixtures("before")

import pytest

@pytest.fixture()
def before():
print('\nbefore each test') @pytest.mark.usefixtures("before")
def test_1():
print('test_1()') @pytest.mark.usefixtures("before")
def test_2():
print('test_2()') class Test1:
@pytest.mark.usefixtures("before")
def test_3(self):
print('test_1()') @pytest.mark.usefixtures("before")
def test_4(self):
print('test_2()') @pytest.mark.usefixtures("before")
class Test2:
def test_5(self):
print('test_1()') def test_6(self):
print('test_2()')

方式3,用autos调用fixture,使用时需要谨慎

@pytest.fixture(scope="function", autouse=True)

import time
import pytest @pytest.fixture(scope="module", autouse=True)
def mod_header(request):
print('\n-----------------')
print('module : %s' % request.module.__name__)
print('-----------------') @pytest.fixture(scope="function", autouse=True)
def func_header(request):
print('\n-----------------')
print('function : %s' % request.function.__name__)
print('time : %s' % time.asctime())
print('-----------------') def test_one():
print('in test_one()') def test_two():
print('in test_two()')
  • fixture scope
  • function:每个test都运行,默认是function的scope
  • class:每个class的所有test只运行一次
  • module:每个module的所有test只运行一次
  • session:每个session只运行一次

2.3. fixture返回参数

import pytest

@pytest.fixture(params=[1, 2, 3])
def test_data(request):
return request.param def test_not_2(test_data):
print('test_data: %s' % test_data)
assert test_data != 2

3. 参考

  • pytest fixtures: explicit, modular, scalable
    https://docs.pytest.org/en/latest/fixture.html

Pytest - 进阶功能fixture的更多相关文章

  1. pytest进阶之fixture

    前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unit ...

  2. pytest进阶之fixture函数

    fixture函数存在意义 与python自带的unitest测试框架中的setup.teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.但是相 ...

  3. 【pytest系列】- fixture测试夹具详解

    如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html fixture的优势 ​ pyt ...

  4. pytest框架之fixture前置和后置

    一.conftest.py 定义公共的fixture,多个测试类中都可以调用 pytest提供了conftest.py文件,可以将fixture定义在此文件中 运行测试用例时,不需要去导入这个文件,会 ...

  5. Pytest【定制fixture】

    在pytest中的fixture是在测试函数运行前后,由pytest执行的外壳函数,fixture中的代码可以定制,满足多变的测试需求:包括定义传入测试中的数据集.配置测试前系统的初始化状态.为批量测 ...

  6. Pytest高级进阶之Fixture

    From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...

  7. pytest进阶使用【fixture(一)fixture与setup/teardown区别】

    fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...

  8. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  9. pytest框架之fixture详细使用

    本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pytest框架,一边学习一边记录,和大家分享,话不多说,那就先从p ...

随机推荐

  1. python基础学习1-双层装饰器(实现登陆注册)

    LOGIN_USER = {"IsLogin":False} def check_login(func): #检查登陆的装饰器 def inner(*args,**kwargs): ...

  2. 使用Python代码处理Excel

    转载说明: 原文地址:http://my.oschina.net/alazyer/blog/223354 原文有十处左右的错误,修正后转载于此. 经验证,python 3.4.3下可用.请各位朋友明察 ...

  3. JAVAWEB servlet和jsp的权限访问控制

    要想防止用户直接访问某个页面,那么就需要要求他带着session来访问,我们才让他访问,所以登录时设置的session就用上了 在用户没有session时,访问servlet或者jsp时直接重定向页面 ...

  4. ant property file刷新不及时

    一.问题 ant脚本定义file的property,有时往里面写了新的值,去访问时还是旧的值 二.原因分析 应该是已定义的file property,后续更新其值的时候,ant的内存缓存没有及时更新, ...

  5. 一键将 Python2 代码自动转化为 Python3

    问题 Python2 的代码直接在 Python3 环境运行的话会报错误: 如果大量的代码,无论是批量替换,还是逐行修改都够累的,这活儿表示不能干! 有没有办法一键转换呢? 百度了一下发现网上的方法如 ...

  6. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  7. lastIndexOf()

    方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索.

  8. 【轮子狂魔】抛弃IIS,打造个性的Web Server - WebAPI/Lua/MVC(附带源码)

    引言 此篇是<[轮子狂魔]抛弃IIS,向天借个HttpListener - 基础篇(附带源码)>的续篇,也可以说是提高篇,如果你对HttpListener不甚了解的话,建议先看下基础篇. ...

  9. .NET:关于数据模型、领域模型和视图模型的一些思考

    背景 数据模型.领域模型和视图模型是“模型”的三种角色,一些架构用一种类型表示这三种角色,如:传统三层架构.也有一些架构用两种类型表示这三种角色,如:结合ORM的领域驱动架构.非常少见的场景是用三种类 ...

  10. 12只超酷机器人,在家用3D打印搞定!

    3D打印最吸引人的地方在于它完全无极限!现在的3D打印已经广范应用在我们的生活.以及工业上的各个领域.最棒的是,DIY玩家可以真正从中受益.我们现在已经可以应用3D打印,在家制作自己的机器人了.如果你 ...