首页 > 其他分享 >config.cache 使用

config.cache 使用

时间:2024-03-25 14:33:37浏览次数:24  
标签:None config cache pytest key 使用 data

官方地址:https://docs.pytest.org/en/8.0.x/reference/reference.html#config-cache
pytest 中,cache 是一个非常有用的功能,它允许你在测试会话之间持久化状态。这意味着你可以在一次测试运行中存储一些值,并在后续的测试运行中访问这些值。这对于需要重用昂贵的计算结果或避免重复执行时间密集型操作的场景特别有用。

如何使用 cache

cache 对象通过 pytestFixtureRequest 对象提供,通常在一个 fixture 中获取并返回它

@fixture
def cache(request: FixtureRequest) -> Cache:
    """Return a cache object that can persist state between testing sessions.

    cache.get(key, default)
    cache.set(key, value)

    Keys must be ``/`` separated strings, where the first part is usually the
    name of your plugin or application to avoid clashes with other cache users.

    Values can be any object handled by the json stdlib module.
    """
    assert request.config.cache is not None
    return request.config.cache

是一个本地缓存,并且是存储到了本地的 .pytest_cache 文件夹中,一个key 一个文件
image.png

存储和检索数据

cache 对象提供了两个主要方法:getset

  • get(key, default=None) 方法用于检索之前存储的值。如果指定的 key 不存在,则返回 default 值。
  • set(key, value) 方法用于存储值。key 应该是一个字符串,而 value 可以是任何可以被 json 标准库模块处理的对象。

键应该使用 / 分隔的字符串,其中第一部分通常是你的插件或应用程序的名称,以避免与其他使用 cache 的代码冲突。

示例

假设你有一个测试,需要从外部API获取数据,但这个操作很耗时。你可以在第一次运行测试时从API获取数据,并将其存储在 cache 中。在后续的测试运行中,你可以直接从 cache 中检索数据,避免重复的API调用。

def test_external_api(cache):
    # 尝试从缓存中获取数据
    data = cache.get('external_api/data', default=None)
    if data is None:
        # 如果缓存中没有数据,则从API获取并存储到缓存中
        data = fetch_data_from_external_api()  # 假设这是一个函数来获取数据
        cache.set('external_api/data', data)
    
    # 使用数据进行测试
    assert data is not None

注意事项

  • cache 在 CI 环境中可能不会像预期那样工作,因为每次构建可能使用全新的环境。
  • 使用 cache 时要小心避免过度依赖它,确保测试仍然可以独立运行而不是依赖于先前的测试结果。
  • 清晰地命名你的缓存键,以避免潜在的冲突和混淆。

通过合理使用 pytestcache 功能,可以显著提高测试效率,特别是在处理需要大量计算资源的测试时。

标签:None,config,cache,pytest,key,使用,data
From: https://www.cnblogs.com/poloyy/p/18094328

相关文章

  • 为什么 export 导出一个字面量会报错,而使用 export default 就不会报错?
    核心其实总的来说就是export导出的是变量的句柄(或者说符号绑定、近似于C语言里面的指针,C++里面的变量别名),而exportdefault导出的是变量的值。需要注意的是:模块里面的内容只能在模块内部修改,模块外部只能使用。esModule在语法层面做了一层浅层的保护(即将import导入的变量......
  • windows10便签怎么调出来 win10便笺功能怎么使用
    对于许多上班族来说,电脑不仅是工作的必备工具,更是一个高效管理日常任务和信息的平台。在这个信息爆炸的时代,如何在繁忙的工作中快速记录、查看和提醒重要事项,成为提升工作效率的关键。便签软件,因其简单、便捷的特性,逐渐成为上班族电脑桌面的常客。那么Windows10便签怎么调出来?win......
  • 为什么使用类型化数组来进行字节操作而不是普通的 javascript 数字数组
    1.javascript中的数字数据类型默认为64位(8字节),无论任何数字。这意味着可以在不损失精度的情况下表示-2⁵³+1到2⁵³–1范围内的数字。这意味着即使我们想存储10个,也会消耗8个字节的内存,而这是根本不需要的。当内存效率是一个问题时,特别是在处理大型整数数组或二进制数......
  • python3.6 使用调用栈储存上下文变量
    python3.6使用调用栈储存上下文变量从python3.7开始,新增contextvars模块,用于储存上下文变量.使用场景#python3.7fromcontextvarsimportContextVarimportasynciouser=ContextVar('var')asyncdefb():u=user.get()print(f'getname{u}')......
  • 六、使用jsPlumb实现流程图--Overlays使用
    一、Overlay的功能叠层(Overlay)可以是任意的DOM元素,用于叠加在Connection或Endpoint元素上--绝大部分都是用于叠加在线条上。jsPlumb把Overlay分为了五类:Arrow、Label、PlainArrow、Diamond、Custom。除了Custom和Label类型,其他三类就是jsPlumb提供的可以直接使用的图形;Label类......
  • 微信小程序使用echarts(三)
    一、新问题在根据前两个步骤完成小程序图表的显示之后,发现echarts过大,导致小程序超过2m二、解决过程1、根据官网上的提示进行图表定制,同时注意官网上的echarts.js版本和定制版本需要一致,以防出现版本原因导致的其他问题2、在定制完成,并且将定制的echarts.min.js替换掉原来的ec......
  • drf : 序列化类使用many参数的作用,源码解析
    序列化类使用many参数的作用views.pyfromrest_framework.viewsimportAPIViewfrom.serizlizerimportBookSerializersfromrest_framework.responseimportResponsefrom.modelsimportBooksclassBookView(APIView):defpost(self,request):print(r......
  • Django 字段类型,字段参数,以及在drf中的使用。
    字段类型#models中CharField,DecimalField.....#记住的: CharFieldIntegerFieldFloatFieldDecimalFieldDateTimeFieldDateField#知道--》models中没有的---》反序列化的时候,前端传入的{name:lqz,age:19,hobby:[篮球,足球],wife:{name:lyf,age:38}} ListF......
  • Python数据匹配和记录链接库之recordlinkage使用详解
    概要Python的recordlinkage库为数据匹配和记录链接提供了一个强大的工具集,使得从不同数据源识别重复或相关记录变得简单高效。这对于数据清洗、合并数据集、实体识别等任务至关重要。recordlinkage库简介recordlinkage提供了一套全面的工具来进行复杂的记录比较、匹配和......
  • Python JIT 编译器库之Pyjion使用详解
      概要Pyjion是一个针对Python解释器的JIT编译器,旨在提高Python代码的性能。本文将深入探讨Pyjion库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。Pyjion简介Pyjion是一个用于Python解释器的JIT(即时编译)编译器,它的目标是通过实时编译Py......