Pytest框架之fixture详解(三)

 更新时间:2022年06月30日 10:19:35   作者:小旭2021  
本文详细讲解了Pytest框架之fixture,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

相关文章

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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python里大整数相乘相关技巧指南

    python里大整数相乘相关技巧指南

    对于大整数计算,一般都要用某种方法转化,否则会溢出。但是python无此担忧了。Python支持“无限精度”的整数,一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型。
    2014-09-09
  • Ubuntu下升级 python3.7.1流程备忘(推荐)

    Ubuntu下升级 python3.7.1流程备忘(推荐)

    这篇文章主要介绍了Ubuntu下升级 python3.7.1流程备忘,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Python异常处理操作实例详解

    Python异常处理操作实例详解

    这篇文章主要介绍了Python异常处理操作,结合实例形式分析了Python异常处理的相关原理、操作语句与使用技巧,需要的朋友可以参考下
    2018-05-05
  • 翻转数列python实现,求前n项和,并能输出整个数列的案例

    翻转数列python实现,求前n项和,并能输出整个数列的案例

    这篇文章主要介绍了翻转数列python实现,求前n项和,并能输出整个数列的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python命令行工具Click快速掌握

    python命令行工具Click快速掌握

    这篇文章主要介绍了python命令行工具Click快速掌握,写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它。命令行工具中用起来最爽的就是 Click,,需要的朋友可以参考下
    2019-07-07
  • Python和JS反爬之解决反爬参数 signKey

    Python和JS反爬之解决反爬参数 signKey

    这篇文章主要介绍了Python和JS反爬之解决反爬参数 signKey,Python 反爬中有一大类,叫做字体反爬,核心的理论就是通过字体文件或者 CSS 偏移,接下来文章的详细介绍,需要的小伙伴可以参考一下
    2022-05-05
  • python实现数据库跨服务器迁移

    python实现数据库跨服务器迁移

    这篇文章主要为大家详细介绍了Python实现数据库之间的数据迁移,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python中的连接符(+、+=)示例详解

    Python中的连接符(+、+=)示例详解

    Python 中可使用 + 进行字符串的连接操作,这个相信大家都知道,其实Python中的连接符还有+=,下面这篇文章主要介绍了Python中的连接符(+、+=),需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Python绘图系统之绘制散点图,极坐标和子图

    Python绘图系统之绘制散点图,极坐标和子图

    这篇文章主要为大家详细介绍了如何基于Python实现一个绘图系统,可以支持绘制散点图,极坐标和子图,文中的示例代码讲解详细,感兴趣的可以了解下
    2023-09-09
  • python脚本设置超时机制系统时间的方法

    python脚本设置超时机制系统时间的方法

    这篇文章主要介绍了python脚本设置超时机制系统时间的方法,感兴趣的小伙伴们可以参考一下
    2016-02-02

最新评论