官方地址: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 一个文件

存储和检索数据

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 功能,可以显著提高测试效率,特别是在处理需要大量计算资源的测试时。

config.cache 使用的更多相关文章

  1. 源码解读 Laravel PHP artisan config:cache

    来源 https://laravel-china.org/articles/5101/source-code-reading-laravel-php-artisan-configcache 源码在哪 ...

  2. 在进行make之前,configure的时候,请先清理config.cache

    在进行make之前,configure的时候,请先清理config.cache

  3. dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入

    fopen居然返回false,既不是目录或文件权限相关问题,也不是文件路径问题(相对路径.绝对路径)等,更不是打开文件的模式问题(r,w,a等).网上搜了一会,说到返回false的原因无非都是上面三种 ...

  4. Ehcache(2.9.x) - Configuration Guide, Configuring Cache

    About Ehcache Configuration Ehcache supports declarative configuration via an XML configuration file ...

  5. records.config文件参数解释

    # Process Records Config File # # <RECORD-TYPE> <NAME> <TYPE> <VALUE (till end ...

  6. records.config文件配置模板

    # # # Process Records Config File # # <RECORD-TYPE> <NAME> <TYPE> <VALUE (till ...

  7. laravel config 配置无效

    修改了配置文件config  发现逻辑代码中并无生效. 猜测缓存,所以执行下: php artisan config:cache 缓存文件默认会存在bootstrap/cache 中,并不在stora ...

  8. 深入理解 Laravel 中 config 配置加载原理

    Laravel的配置加载其实就是加载config目录下所有文件配置.如何过使用php artisan config:cache则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目 ...

  9. [Laravel] 11 - WEB API : cache & timer

    前言 一.资源 Ref: https://www.imooc.com/video/2870 二.缓存 缓存:静态缓存.Memcache.redis缓存 Ref: [Laravel] 09 - Func ...

  10. records.config中文详解

    转载:http://www.safecdn.cn/cdn/2018/12/records-config-zh/106.html records.config参数的一些备注 CONFIG proxy.c ...

随机推荐

  1. JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性

    壹 ❀ 引 看过博主JS 疫情宅在家,学习不能停,七千字长文助你彻底弄懂原型与原型链这篇文章的同学应该知道,文中有专门介绍这个问题.那么为什么我要另起一篇再说一次呢?原因有两个,一是介绍原型与原型链的 ...

  2. 探索AI视频生成新纪元:文生视频Sora VS RunwayML、Pika及StableVideo——谁将引领未来

    探索AI视频生成新纪元:文生视频Sora VS RunwayML.Pika及StableVideo--谁将引领未来 由于在AI生成视频的时长上成功突破到一分钟,再加上演示视频的高度逼真和高质量,Sor ...

  3. SATA 中ATA与AHCI的区别

    SATA中ATA和AHCI有什么区别?   1.ACHI是针对SATA2设计的,可以卡其NCQ功能,表面上没有速度的优势,但是因为算法不同,可以有效的保护硬盘.ATA 是硬件模拟IDE的一种方法.表面 ...

  4. java 注解结合 spring aop 自动输出日志新增拦截器与过滤器

    auto-log auto-log 是一款为 java 设计的自动日志监控框架. 前面已经写过了两篇: java 注解结合 spring aop 实现自动输出日志 java 注解结合 spring a ...

  5. React Native如何每次唤醒APP都执行一段代码

    最近想要做一个类似于淘宝每次打开会根据用户剪贴板内容弹出对应商品的功能.要完成这个功能需要每次唤醒APP都读取一次剪贴板. 1.监听 && 销毁 1 async componentDi ...

  6. nebula-br local-store 模式,快速搭建主备集群实践

    因为线上图数据库目前为单集群,数据量比较大,有以下缺点: 单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响 很多优化类但会影响读写的操作不好执行,比如:compact.ba ...

  7. linux基本文件命令复习笔记

    https://www.bilibili.com/video/BV1ex411x7Em/?p=4&spm_id_from=pageDriver&vd_source=92305fa48e ...

  8. linux压缩文件并排除指定目录

    今天要在linux上打包一个项目另作他用,但是项目图片都是放本地服务器的,整个项目打包好后有2G多下载十分费时.项目中的图片我们可以不要,所以压缩的时候要排除图片目录. 具体命令如下: // 参数说明 ...

  9. C#版开源免费的Bouncy Castle密码库

    前言 今天大姚给大家分享一款C#版开源.免费的Bouncy Castle密码库:BouncyCastle. 项目介绍 BouncyCastle是一款C#版开源.免费的Bouncy Castle密码库, ...

  10. 阿里二面:如何定位&避免死锁?连着两个面试问到了!

    在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保.....下面我们就 ...