官方地址: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 leetcode 检查单词是否为句中其他单词的前缀 解题分析,活用startsWith方法

    壹 ❀ 引 今天来做一道题目贼长,但做起来不难的题,为啥昨天前天没写呢,因为题目太简单了,没收获额外有用信息,已知的知识反复写就有些浪费时间了.今天的题目来自leetcode1455. 检查单词是否为 ...

  2. 用 WebClient 代替 RestTemplate

    RestTemplate是用于执行 HTTP 请求的同步客户端,通过底层 HTTP 客户端库(例如 JDK HttpURLConnection.Apache HttpComponents 等)公开一个 ...

  3. centos7下修改mysql5.5字符集

    1.查看现有数据库编码 show variables like "%char%"; 2.修改mysql配置文件:/etc/my.cnf(以实际安装环境为准) 在[client]字段 ...

  4. win32 - Session 0 隔离

    在Windows XP,Windows Server 2003和Windows操作系统的早期版本中,所有服务都与登录控制台的第一个用户在同一会话中运行.该会话称为会话0.在会话0中一起运行服务和用户应 ...

  5. Docker进阶之02-Swarm集群入门实践

    Docker集群概述 Docker集群有2种方案: 1.在Docker Engine 1.12之前的集群模式被称为经典集群,这是通过API代理系统实现的集群,目前已经不再维护. 2.自Docker E ...

  6. itertools.chain.from_iterable()将嵌套列表合并成一个

    from itertools import chain a = [[1,2],[3,4]] print(chain.from_iterable(a)) # [1,2,3,4]

  7. 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连接使用 ConnectionString 方式

    问题描述 查看Service Bus的Java示例代码,发现使用Spring Cloud Integration,配置 Application.yaml 可以连接到两个Service Bus. 但代码 ...

  8. java GUI 快速入门

    java 中编写 GUI 有两中工具包,分别为 AWT.Swing. Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法. AWT 和 Swing 都能跨平台使用:AWT 会 ...

  9. 图查询语言 nGQL 简明教程 vol.01 快速入门

    本文旨在让新手快速了解 nGQL,掌握方向,之后可以脚踩在地上借助文档写出任何心中的 NebulaGraph 图查询. 视频 本教程的视频版在B站这里. 准备工作 在正式开始 nGQL 实操之前,记得 ...

  10. Nebula 在 Akulaku 智能风控的实践:图模型的训练与部署

    本文整理自 Akulaku 反欺诈团队在 nMeetup·深圳场的演讲,B站视频见:https://www.bilibili.com/video/BV1nQ4y1B7Qd 这次主要来介绍下 Nebul ...