pytest中的fixture基本用法

目录
  • 简介:
  • fixture的功能
  • 特点及优势
  • 基本用法
  • fixture在自动化中的应用--作用域
  • fixture在自动化中的应用-yield关键字
  • fixture在自动化中的应用--数据共享
  • fixture在自动化中的应用-自动应用
  • fixture在自动化中的应用-参数化

简介:

  fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进:

  1.有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。

  2.按模块化的方式实现,每个fixture都可以互相调用。

  3.fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类class,模块module或整个测试session范围。

fixture的功能

fixture是pytest特有的功能,用以在测试执行前和执行后进行必要的准备和清理工作。使用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。
主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。
从功能上看来,与setup、teardown相似,但是优势明显:

命名方式灵活,不局限于setup和teardown这几个命名
conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置
scope="module" 每一个.py文件调用一次
scope="session" 可以实现多个.py跨文件使用一个session来完成多个用例

特点及优势

1、命令灵活:对于setup.teardown,可以不起这两个名字

2、数据共享:在conftest.py配置里写的方法可以实现数据共享,不需要import导入,可以跨文件共享

3、scope的层次及神奇的yield组合相当于各种setup和teardown

4、实现参数化

基本用法

@pytest.fixture()

import pytest
@pytest.fixture()
def login():
    print("完成登录操作")
def test_search():
    print("搜索功能,此方法不需要完成登录即可执行")
def test_cart(login):
    print("加入购物车,需要完成登录才可以")

fixture在自动化中的应用--作用域

@pytest.fixture(scope='module')


取值


范围


说明


function


函数级


每个函数或方法都会调用


class


类级别


每个测试类只运行一次


module


模块级别


每一个.py文件只调用一次


package


包级


没一个python包至调用一次


session


会话级


每次会话只需要运行一次,会话内所有方法及类、模块都共享这个方法

import pytest
@pytest.fixture(scope='module')
def login():
    print("完成登录操作")
def test_search(login):
    print("搜索功能,此方法不需要完成登录即可执行")
def test_cart(login):
    print("加入购物车,需要完成登录才可以")

fixture在自动化中的应用-yield关键字

场景:你已经可以将测试方法【前要执行的或依赖的】解决了,测试方法后销毁清除数据的要如何进行呢?

解决:通过在fixture函数中加入yield关键字,yield是调用第一次返回结果,第二次执行他下面的语句返回。

步骤:在@pytest.fixture(scope=module),在登录的方法中加yield,之后加销毁清楚的步骤。

import pytest
@pytest.fixture(scope='module')
def login():
    # setup操作
    print("完成登录操作")
    token = 1
    yield token  # 相当于return的操作
    # teardown操作
    print("完成登出操作")

def test_search(login):
    # print("搜索功能,此方法不需要完成登录即可执行")
    print(f"token = {login}")

def test_cart(login):
    # print("加入购物车,需要完成登录才可以")
    print(f"token = {login}")

fixture在自动化中的应用--数据共享

场景:与其他测试工程师合作一起开发时,公共的模块要在不同的文件中,要在大家都能访问到的地方

解决:使用conftest.py这个文件进行数据共享,并且他可以放在不同位置骑着不同的范围共享作用

前提:

conftest文件名是不能换的

放在项目下是全局的数据共享的地方

执行:

系统执行到参数login时,先从本模块中查找是否有这个名字的变量

之后在conftest.py中找是否有

步骤:

将登录模块带@pytest.fixture写在conftest.py中

fixture在自动化中的应用-自动应用

场景:不想原测试方法有任何改动,或全部都自动实现自动应用,没特例,也都不需要返回值时可以选择自动应用

解决:使用fixture中参数autouse=True实现

步骤:在方法上面加@pytest.fixture(autouse=True)

fixture在自动化中的应用-参数化

场景:测试离不开数据,为了数据灵活,一般数据都是用过参数传的

解决:fixture通过固定参数requests传递

步骤:在fixture中增加@pytest.fixture(params=[1,2,3,'tom'])

在方法参数写request,方法体里面使用request.param接收参数

import pytest
@pytest.fixture(params=[1, 2, 3, "测试"])
def login(request):
    print(f"数据名称为:{request.param}")
    return request.param
def test_search(login):
    print(f"{login}")

到此这篇关于pytest中的fixture基本用法的文章就介绍到这了,更多相关pytest fixture用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pytest-fixture简介及其用法讲解

    目录 什么是fixture 如何使用fixture 使用fixture传递测试数据 使用fixture来执行配置和销毁逻辑 fixture可以使用其他的fixture fixture的参数介绍 params,fixture的参化 autouse,为常用的fixture添加autouse选项 name,为fixture重命名 PS: 什么是fixture 在一个测试过程中,fixture主要提供以下功能: 为测试提供上下文,比如环境变量,数据集(dataset),提供数据,数据和测试用例分开定义测

  • Pytest Fixture参数讲解及使用

    Fixture参数详解及使用 Fixture的调用方式: @pytest.fixture(scope = "function",params=None,autouse=False,ids=None,name=None) 参数详解:1.SCOPE用于控制Fixture的作用范围作用类似于Pytest的setup/teardown默认取值为function(函数级别),控制范围的排序为:session > module > class > function 取值 范围 说

  • 分享Pytest fixture参数传递的几种方式

    目录 1.背景 2.fixture中参数传递的几种方式 1)fixture中的函数返回 2)与@pytest.mark.parametrize的结合 3)fixture中的方法嵌套传递 4)测试方法中产生数据后,直接调用teardown 1.背景 最近使用Pytest中的fixture和conftest时,遇到需要在conftest中的setup和teardown方法里传递参数.这里记录下几种实现的方式. 2.fixture中参数传递的几种方式 1)fixture中的函数返回 conftest.

  • pytest中fixture函数使用

    目录 前言 fixture函数 fixture的使用 前言 setup和teardown能实现在测试用例执行之前或之后做一些操作,但是这种是整个测试脚本全局生效的: 如果我们想实现某些用例执行之前进行登录,某些用例执行之前不需要进行登录,这种场景我们再使用setup和teardown就无法实现了,这时候我们就需要用到fixture功能了. fixture函数 fixture(scope="function", params=None, autouse=False, ids=None,

  • Pytest框架之fixture的详细使用教程

    前言 前面一篇讲了setup.teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的 如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登录.很显然无法用 setup 和 teardown 来实现了fixture可以让我们自定义测试用例的前置条件 fixture优势 命名方式灵活,不局限于 setup 和teardown 这几个命名 conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture sc

  • pytest中的fixture基本用法

    目录 简介: fixture的功能 特点及优势 基本用法 fixture在自动化中的应用--作用域 fixture在自动化中的应用-yield关键字 fixture在自动化中的应用--数据共享 fixture在自动化中的应用-自动应用 fixture在自动化中的应用-参数化 简介: fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进: 1.有独立的命名,并通过声明它们从测试函数.模块.类或整个项目中的使用来激活. 2.按模块化的方式实现,每个fixtur

  • Pytest中conftest.py的用法

    前言 在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧 什么是conftest.py 我们之前了解了fixture,fixture可以直接定义在测试脚本中,但是有些时候,我们希望一个fixture可以被复用,这就需要对fixture进行集中管理,Pytest使用文件conftest.py集中管理固件.在复杂的项目中,可以在不同的目录层级定义conftest

  • pytest自动化测试中的fixture的声明和调用

    目录 1. fixture的声明 2. fixture的调用 2.1 fixture的调用方式 2.1.1 使用fixturename 2.1.2 使用@pytest.mark.usefixtures("fixturename") 2.1.3 autouse--自动应用 2.2 fixture使用的灵活性 2.2.1 一个fixture函数可以调用其他的fixture 2.2.2 fixture函数可被反复重用 2.2.3 测试函数/fixture函数可以一次调用多个fixture 2

  • Pytest中skip和skipif的具体使用方法

    skip的用法 使用示例:@pytest.mark.skip(reason="跳过的原因,会在执行结果中打印") 标记在测试函数中 举个

  • Pytest框架之fixture详解(一)

    我们在编写测试用例,都会涉及到用例执行之前的环境准备工作,和用例执行之后的环境清理工作. 代码版的测试用例也不例外.在自动化测试框架当中,我们也需要编写: 用例执行之前的环境准备工作代码(前置工作代码) 用例执行之后的环境清理工作(后置工作代码) 通常,在自动化测试框架当中,都叫做fixture. pytest作为python语言的测试框架,它的fixture有2种实现方式. 一种是xunit-style,跟unittest框架的机制非常相似,即setup/teardown系列 一种是它自己的f

  • python pytest进阶之fixture详解

    前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解). fixture用途 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 3.支持经典的xunit fixture ,像unittest使用的setup和te

  • pytest框架之fixture详细使用详解

    本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pytest框架,一边学习一边记录,和大家分享,话不多说,那就先从pytest框架的精髓fixture说起吧! 简介: fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进: 1.有独立的命名,并通过声明它们从测试函数.模块.类或整个项目中的使用来激活. 2.按模块化的方式实现,每个fixture都可以互相调用. 3.fixt

  • Pytest中skip skipif跳过用例详解

    前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能, 或者您希望失败的测试功能希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例 实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试 @pytest.mark.skip 跳过执行测试用例,有可选参数reason:跳过的原因,会在执行结果中打印 #!/usr/bin/env python # -*- coding: utf-8 -*-

随机推荐