iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Pytest框架之fixture详解(三)
  • 325
分享到

Pytest框架之fixture详解(三)

2024-04-02 19:04:59 325人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

相关文章 Pytest框架之fixture详解(一) Pytest框架之fixture详解(二) Pytest框架之fixture详解(三) 本文关于fixture的内容如下: 1、

相关文章

Pytest框架之fixture详解(一)

Pytest框架之fixture详解(二)

Pytest框架之fixture详解(三)

本文关于fixture的内容如下:

  • 1、参数化fixture
  • 2、fixture工厂
  • 3、request这个fixture

1、参数化fixture

fixture有个params参数,允许我们传递数据。

语法格式:

# conftest.py文件
​
# fixture的params参数
# 取value1时,会把依赖此fixture的用例执行一遍。
# 取value2时,会把依赖此fixture的用例执行一遍。
# 取value3时,会把依赖此fixture的用例执行一遍。
# params有几个参数,就会将依赖此fixture的用例执行几遍。
@pytest.fixture(params=[value1, value2, value3..])
def fix_name():
    # do something

当我们需要多次调用fixture时,则可以用到fixture的参数化功能。

但它并不是并发的,是串行执行的。

比如,测试对象有多种配置方式,那么参数化可以帮我们在多种配置方式下执行用例。

接下来,以网页自动化为案例。

需求:要在Google、firefox浏览器下执行测试用例,用例为打开百度搜索pytest。

1)先在conftest.py当中,定义fixture,并设置params=["google", "firefox"]

# conftest.py
​
# params设置为google和firefox
@pytest.fixture(params=["google", "firefox"])
def browser_fix(request):
    if request.param == "google":
        driver = WEBdriver.Chrome()
    elif request.param == "firefox":
        driver = webdriver.Firefox()
    else:
        driver = None
    yield driver
    if driver:
        driver.quit()

2)在测试用例文件test_baidu_action.py中,编写测试用例,并调用browser_fix

# test_baidu_action.py
​
@pytest.mark.usefixtures("browser_fix")
def test_baidu(browser_fix):
    driver = browser_fix
    driver.get("https://www.baidu.com/")
    driver.find_element(By.ID, "kw").send_keys("pytest", Keys.ENTER)
    loc = (By.XPATH, '//h3')
    WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
    driver.find_element(*loc).click()

3)运行2)中的用例,会依次在google浏览器中执行完成,然后在firefox浏览器中执行完成。一共是2条测试用例。

2、fixture工厂

当我们在一个用例当中,需要多次调用fixture时,就可以使用fixture工厂

利用的是装饰器的方式

在fixture内部,定义一个函数。fixture返回的是函数。

以下案例来自官网:

@pytest.fixture
def make_customer_record():
    def _make_customer_record(name):
        return {"name": name, "orders": []}
​
    return _make_customer_record
​
# 用例内部,多次调用了fixture.
def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")  # 第1次调用
    customer_2 = make_customer_record("Mike")  # 第2次调用
    customer_3 = make_customer_record("Meredith")  # 第3次调用

如果工厂创建的数据需要管理,那么fixtue可以如下处理:

@pytest.fixture
def make_customer_record():
     
    # 管理工厂的数据。在前置中创建。在后置中销毁
    created_records = []
​
    def _make_customer_record(name):
        record = models.Customer(name=name, orders=[])
        # 前置中添加数据
        created_records.append(record)
        return record
​
    yield _make_customer_record  # 返回内部函数
     
    # 销毁数据
    for record in created_records:
        record.destroy()
​
# 测试用例
def test_customer_records(make_customer_record):
    customer_1 = make_customer_record("Lisa")
    customer_2 = make_customer_record("Mike")
    customer_3 = make_customer_record("Meredith")

3、request这个fixture

pytest内置的名为requests的fixture,主要功能: 提供请求fixture的测试用例/测试类的信息的。

我们定义fixture之后,通常都是测试用例/测试类,来请求fixture。

而request fixture就会记录 测试用例/测试类 相关信息。

request fixture是通过FixtureRequest来实现的,有以下属性(列举部分)可以使用:

  • request.param:获取fixture的params参数值
  • request.scope:获取fixture的作用域
  • request.function:获取调用fixture的用例函数名称。如果fixture是函数级别的作用域。
  • request.cls:获取测试用例是从哪个测试类里收集的。
  • request.module:获取测试用例/测试类从哪个python模块里收集的。
  • request.config:从pytest的config文件当中,获取与当前请求有关的配置信息

更多的请查阅官网:Https://docs.pytest.org/en/stable/reference.html

既然requests是fixture,那么我们定义的fixture,就可以直接把requests作为函数参数来用。

下面,以简单案例来演示。

定义一个fixture,将requests作为参数。

import pytest
​
@pytest.fixture(params=[1,2])
def init(request):
    print("用例名称:", request.function)
    print("fix参数 ", request.param)
    print("fix的作用域 ", request.scope)
    print("用例所在的类 ", request.cls)

定义一个测试类,直接请求名为init的fixture:

@pytest.mark.usefixtures("init")
class TestABC:
​
    def test_hello(self):
        print("-------------------------")

执行结果如下:

到此这篇关于Pytest框架之fixture的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Pytest框架之fixture详解(三)

本文链接: https://www.lsjlt.com/news/119013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Pytest框架之fixture详解(三)
    相关文章 Pytest框架之fixture详解(一) Pytest框架之fixture详解(二) Pytest框架之fixture详解(三) 本文关于fixture的内容如下: 1、...
    99+
    2024-04-02
  • Pytest框架之fixture详解(二)
    相关文章 Pytest框架之fixture详解(一) Pytest框架之fixture详解(二) Pytest框架之fixture详解(三) 本文关于 fixture 的内容如下: ...
    99+
    2024-04-02
  • Pytest框架之fixture详解(一)
    相关文章 Pytest框架之fixture详解(一) Pytest框架之fixture详解(二) Pytest框架之fixture详解(三) 我们在编写测试用例,都会涉及到用例执行之...
    99+
    2024-04-02
  • pytest框架之fixture详细使用详解
    本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pytest框架,一边学习一边记录,和大家分享,话...
    99+
    2024-04-02
  • pytest框架详解
    pytest是一个流行的Python测试框架,提供了丰富的功能和灵活的配置选项,使得编写和运行测试变得更加轻松和高效,其主要特点和用法如下:1、支持在unittest框架中编写的测试用例;2、能够自动发现测试文件和测试用例;3、提供了参数化...
    99+
    2023-12-19
    pytest框架 python
  • pytest进阶教程之fixture函数详解
    fixture函数存在意义   与python自带的unitest测试框架中的setup、teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要...
    99+
    2024-04-02
  • Pytest fixture及conftest相关详解
    目录前言一、Pytest fixture1.pytest fixture几个关键特性2.Pytest fixture定义3.Pytest fixture用法1)用法一:作为参数使用2...
    99+
    2024-04-02
  • 自动化测试框架pytest的Fixture固件怎么调用
    本篇内容介绍了“自动化测试框架pytest的Fixture固件怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是固件Fixture...
    99+
    2023-07-05
  • Pytest框架conftest.py文件的使用详解
    目录conftest.py文件特点1、conftest.py文件介绍2、conftest.py的注意事项3、conftest.py的使用4、不同位置conftest.py文件的优先级...
    99+
    2024-04-02
  • Python测试框架pytest核心库pluggy详解
    目录代码案例实例化:添加到钩子定义中 (add_hookspecs)注册插件 register运行插件 pm.hook.myhook代码案例 import pluggy # Hook...
    99+
    2024-04-02
  • pytest内置fixture使用临时目录流程详解
    目录前言tmpdirtmpdir_factorytmp_pathtmp_path_factory指定临时目录前言 本篇来学习pytest中内置fixture中临时目录的使用 tmpd...
    99+
    2022-12-17
    pytest fixture临时目录 pytest临时目录 pytest fixture
  • 详解Pytest框架的基础知识和应用
    Pytest框架的基本概念和用法详解 一、引言 随着Python的流行和多种测试框架的涌现,软件测试已经成为开发过程中不可或缺的一部分。Pytest是Python中一款简单而功能强大的测试框架,旨在提供更简洁、易于使用和可扩展的...
    99+
    2024-01-13
    - 用法: 安装 配置和基本用法
  • GameFramework框架详解之 Network网络框架
    前言 目前流行的一些开源的网络框架有很多,我自己也手写过网络相关的模块。但是当我看了GameFramework的网络框架,还是眼前一亮的感觉。他的封装继承体系真的非常值得我们细细去品味,去学习。今天就...
    99+
    2023-10-25
    网络 tcp/ip udp gameframework protobuf
  • python单测框架之pytest常见用法
    目录单测框架的作用pytest简介pytest默认规则pytest的运行方式主函数模式命令行模式参数详解读取pytest.ini配置文件运行分组执行忽略执行单测框架的作用 ...
    99+
    2024-04-02
  • Python测试框架pytest高阶用法全面详解
    目录前言1.pytest安装1.1安装1.2验证安装1.3pytest文档1.4 Pytest运行方式1.5 Pytest Exit Code 含义清单1.6&n...
    99+
    2024-04-02
  • MFC框架之OnIdle案例详解
    先看下MSDN对OnIdle()介绍: CWinApp::OnIdle OnIdle is called in the default message loop when ...
    99+
    2024-04-02
  • pythonFlask框架之HTTP请求详解
    我们的浏览器访问网站时,默认为发送了一个HTTP的GET请求。 在浏览网站时,会经常填写表单,比如填写用户名密码。点击登录后,会跳转到我们的主页。 接下来,我们实现这个案例。 首先我...
    99+
    2024-04-02
  • python爬虫之scrapy框架详解
    1.在pycharm下安装scrapy函数库 2.将安装好scrapy函数库下的路径配置到系统path的环境变量中 3.打开cmd终端输入:scrapy.exe检查是否安装成功 ...
    99+
    2024-04-02
  • Rust之Substrate框架中Core详解
    目录Substrate框架简介Substrate框架中Core部分概述Substrate Core的核心功能区块链系统基础部分节点本地功能模块共识算法区块同步交易池管理如何使用Sub...
    99+
    2023-05-18
    Rust Substrate框架Core Substrate Core
  • Java之JSF框架案例详解
    这是一个分为两部分的系列,其中我介绍了JSF 2及其如何适合Java EE生态系统。 在第1部分中,我将介绍JavaServer Pages(JSF)背后的基本思想 ,在第2部分中,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作