使用 Elasticsearch 进行集成测试初始化数据时的注意事项
作者:来自 Elastic piotrprz

在创建应该使用 Elasticsearch 进行搜索、数据聚合或 BM25/vector/search 的软件时,创建至少少量的集成测试至关重要。虽然 “模拟索引” 看起来很诱人,因为测试甚至可以在几分之一秒内运行,但它们实际测试的不是与真实 Elasticsearch 的交互,而是我们对 Elasticsearch 的想象。这可能会在生产中得到严格的验证,特别是在集群更新之后 :wink:
为了减轻集成测试最明显的缺点,至关重要的是使用数据初始化 Elasticsearch,这种方式对于日常生产场景来说可能不是最佳的,但对于测试设置来说却非常有效。
更多有关测试的文章:
-
使用真实 Elasticsearch 进行更快的集成测试
-
使用模拟和真实的 Elasticsearch 来测试你的 Java 代码
不要重新创建容器
依赖 Elasticsearch 测试你的功能可能只需要很少的时间,比如几分之一秒。那么在测试之间重新启动 Elasticsearch 并不是一个明智的想法,因为你将额外花费几十秒钟来等待 ES 启动。
只需在测试之前启动一次 Elasticsearch,在每次测试后进行清理,并在每次测试之前初始化数据。
提示:如果您在 Java 等语言中使用 Elasticsearch 的 Testcontainers 模块,请确保该字段是 @Container static 或至少在 @BeforeAll 中启动。
测试之前,cURL 是你的好朋友
在生产代码(我们正在测试)中使用客户端库是一个明智的选择。然而,在准备测试环境时,采用更为复杂的方法可能会有好处,因为生产用例和测试数据设置的需求并不 100% 相同。使用 cURL 管理 Elasticsearch 中的数据并不是什么难事,正如我们在之前的文章中看到的那样:如何使用 cURL Elasticsearch:进入 Shell。
另一个好处是 cURL 与编程语言无关,因此来自不同技术栈的人可以更容易理解测试。
从 Testcontainers 使用 cURL 并不比 Bash 困难多少,例如,如果你需要删除书籍索引,可以这样做:
elasticsearch.execInContainer("curl", "https://localhost:9200/books", "-u", "elastic:changeme","--cacert", "/usr/share/elasticsearch/config/certs/http_ca.crt","-X", "DELETE"
)
尽可能批量
在很多情况下,索引单个文档是有意义的,但加载测试数据不是其中之一。无需发出 1000 个请求来索引每个文档,只需运行一个包含 1000 个文档的 _bulk 请求即可。即使使用测试容器也不是什么难事:
elasticsearch.execInContainer("curl", "https://localhost:9200/_bulk?refresh=true", "-u", "elastic:changeme","--cacert", "/usr/share/elasticsearch/config/certs/http_ca.crt","-X", "POST","-H", "Content-Type: application/x-ndjson","--data-binary", "@/tmp/books.ndjson"
)
通过这种方法,您甚至可以在一次调用中将文档添加到许多线索中!
尽量本地化
CPU缓存比内存快得多,本地存储通常比网络快。如果你有十个用例都依赖同一份数据集,那就没有必要每次都把同样的数据发送到同一个容器里(毕竟我们不会每次测试都创建新容器,对吧?)
因此,在创建容器时,加上 .withCopyToContainer(...),这样你就可以把文件一次性复制到容器,然后像上面那样直接用 _bulk 处理。这大概是这样的:
static ElasticsearchContainer elasticsearch =new ElasticsearchContainer(ELASTICSEARCH_IMAGE).withCopyToContainer(MountableFile.forHostPath("src/test/resources/books.ndjson"), "/tmp/books.ndjson");
这在设置(如 CI)中尤其有意义,其中容器运行时不是本地的,而是从不同的机器注入的。
回顾
这里提出的想法提醒我们,永恒的 IT 口头禅 “不要重复自己” 也适用于初始化测试数据。将数据批量保存在本地,这样你就可以节省执行集成测试所需的大量时间。欲了解更多见解,请随意探索 Github repo,其中包含更多示例和分支。
原文:Dec 8th, 2024: [EN] DOs and DON'Ts when initializing data for integration tests with Elasticsearch - Advent Calendar - Discuss the Elastic Stack
相关文章:
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
作者:来自 Elastic piotrprz 在创建应该使用 Elasticsearch 进行搜索、数据聚合或 BM25/vector/search 的软件时,创建至少少量的集成测试至关重要。虽然 “模拟索引” 看起来很诱人,因为测试甚至可以在几分之一秒内运行,但它们实际…...
自然语言模型(NLP)介绍
一、自然语言模型概述 自然语言模型(NLP)通过模拟人类语言理解和生成能力,已成为人工智能领域的核心技术。近年来,以DeepSeek、GPT-4、Claude等为代表的模型在技术突破和应用场景上展现出显著优势。例如,DeepSeek通过…...
解决:Word 保存文档失败,重启电脑后,Word 在试图打开文件时遇到错误
杀千刀的微软,设计的 Word 是个几把,用 LaTex 写完公式,然后保存,卡的飞起 我看文档卡了很久,就关闭文档,然后 TMD 脑抽了重启电脑 重启之后,文档打不开了,显示 杀千刀的ÿ…...
Android进程间通信方式之AIDL
Android 进程间通信(IPC)有多种方式,其中 AIDL(Android Interface Definition Language) 是最常用的一种,特别适用于 客户端-服务端(Client-Server)模型,当多个应用或进程…...
基于MD5分块哈希的前端图片重复检测方案
一、需求背景 在Web应用中处理用户图片上传时,我们需要解决两个核心问题: 避免重复文件占用存储空间 提升上传效率减少带宽消耗 传统方案直接上传后校验,存在以下缺陷: 重复文件仍然消耗上传时间 服务器重复校验增加计算压力…...
【每日学点HarmonyOS Next知识】Web Header更新、状态变量嵌套问题、自定义弹窗、stack圆角、Flex换行问题
【每日学点HarmonyOS Next知识】Web Header更新、状态变量嵌套问题、自定义弹窗、stack圆角、Flex换行问题 1、HarmonyOS 有关webview Header无法更新的问题? 业务A页面 打开 webivew B页面,第一次打开带了header请求,然后退出webview B页面…...
胜软科技冲刺北交所一年多转港股:由盈转亏,毛利率大幅下滑
《港湾商业观察》施子夫 近期,山东胜软科技股份有限公司(以下简称,胜软科技)递表港交所获受理,独家保荐机构为广发证券(香港)。 在赴港上市之前,胜软科技还曾谋求过A股上市&#x…...
【JavaSE-7】方法的使用
1、方法的概念和使用 1.1、什么是方法 方法(method)是程序中最小的执行单元,类似于 C语言中的函数,方法存在的意义: 是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置…...
Modbus TCP转Profibus DP协议转换网关赋能玻璃生产企业设备协同运作
一、案例背景 在玻璃生产行业,自动化控制对提升生产效率与保障产品质量起着决定性作用。一家玻璃生产企业为实现生产过程的精细化管控,引入了先进的自动化控制系统。其中,上位机电脑配备了WINCC组态软件,作为Modbus TCP主站&#…...
Java 大视界 -- Java 大数据在智能政务公共服务资源优化配置中的应用(118)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
C++学习之路,从0到精通的征途:入门基础
目录 一.C的第一个程序 二.命名空间 1.namespace的价值 2.命名空间的定义 3.命名空间使用 三.C的输入与输出 1.<iostream> 2.流 3.std(standard) 四.缺省参数 1.缺省参数的定义 2.全缺省/半缺省 3.声明与定义 五.函数重载 1.参数个数不同 2.参数类型不…...
ADC采集模块与MCU内置ADC性能对比
2.5V基准电压源: 1. 精度更高,误差更小 ADR03B 具有 0.1% 或更小的初始精度,而 电阻分压方式的误差主要来自电阻的容差(通常 1% 或 0.5%)。长期稳定性更好,分压电阻容易受到温度、老化的影响,长…...
Gartner发布2025年网络安全六大预测
文章目录 前言趋势1:生成式AI推动数据安全计划趋势2:管理机器身份趋势3:战术型AI趋势4:优化网络安全技术趋势5:扩大安全行为与文化计划的价值趋势6:应对网络安全倦怠 前言 Gartner发布2025年网络安全六大预…...
C#批量压缩并上载CSV数据文件到Box企业云盘
C# .NET 8实现Windows下批量压缩csv文件为zip文件,然后异步上传到box企业云服务网盘路径,实现异常处理和写入运行状态日志,参数来自ini配置文件。 C# .NET 8代码示例,包含INI配置读取、CSV文件压缩、Box上传、异步处理和日志记录…...
C++常见概念
第一个 C 程序 #include<iostream>using namespace std;int main() {cout << "helloworld" << endl;return 0; }命名空间 #include<stdio.h>int rand 10;int main() {printf("%d", rand);return 0; }#include<stdio.h> #…...
结构型模式---享元模式
概念 享元模式是一种结构型设计模式,他摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。享元模式将原始类中的数据分为内在状态数据和外在状态数据。 内在状态:就…...
2025年渗透测试面试题总结- 深某服-漏洞研究员实习(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 深信服-漏洞研究员实习 1. 在XX实习时做了什么 2. 渗透测试的思路简单描述 3. 护网中承担什么角色 4…...
(13)Anaconda 安装配置详解
1. Anaconda 简介 Anaconda 是一个用于科学计算和数据分析的 Python 发行版,它集成了 Python 解释器、大量常用的科学计算库以及强大的包管理工具。 2. Anaconda 主要特点 丰富的库集合:包含了超过 1500 个用于科学计算、数据分析、机器学习等领域的常用 Python 库,例如 N…...
MWC 2025 | 移远通信大模型解决方案加速落地,引领服务机器人创新变革
随着人工智能、大模型等技术的蓬勃发展,生成式AI应用全面爆发。在此背景下,服务机器人作为大模型技术在端侧落地的关键场景,迎来了前所未有的发展机遇。 作为与用户直接交互的智能设备,服务机器人需要应对复杂场景下的感知、决策和…...
[内网安全] Windows 域认证 — Kerberos 协议认证
🌟想系统化学习内网渗透?看看这个:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Kerberos 协议简介 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过…...
LangChain 1.0 中间件实战:5个钩子函数让你的Agent像专业工程师一样思考
LangChain 1.0中间件深度实践:5个钩子函数打造工程级Agent思维 当我们在2023年首次接触LangChain时,它还是一个以Chain为核心的实验性框架。如今,LangChain 1.0的发布标志着AI Agent开发正式进入生产就绪阶段。本文将带您深入探索其最具革命性…...
ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成
ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成 1. 项目介绍与核心价值 cv_resnet50_face-reconstruction 是一个基于ResNet50架构的人脸重建项目,专门为艺术创作和设计工作提供高质量的人脸底图生成服务…...
深度解析Windows设备指纹伪装技术:EASY-HWID-SPOOFER内核级硬件隐私保护实现
深度解析Windows设备指纹伪装技术:EASY-HWID-SPOOFER内核级硬件隐私保护实现 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字化时代,硬件隐私保护已成…...
RVC与FunASR联动:中文语音识别+AI翻唱端到端流水线
RVC与FunASR联动:中文语音识别AI翻唱端到端流水线 1. 引言:当AI翻唱遇见语音识别 想象一下这个场景:你有一段喜欢的歌曲音频,想用自己的声音翻唱它,但苦于记不住歌词,或者原唱语速太快跟不上。传统的做法…...
终极Windows系统清理指南:免费工具让电脑重获新生
终极Windows系统清理指南:免费工具让电脑重获新生 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 您的Windows电脑是否变得越来越慢?C盘空…...
Sunshine开源游戏串流:打造你的专属云游戏服务器终极指南
Sunshine开源游戏串流:打造你的专属云游戏服务器终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏?厌倦了被商业云游戏平…...
别再手动调格式了!用C#和FastReport.Net搞定标签批量打印与90度旋转(附完整源码)
C#与FastReport.Net实战:打造高可用的标签批量打印与旋转解决方案 在仓储管理、物流配送和零售价签打印等场景中,开发人员经常需要处理各种规格的标签打印需求。传统的手动调整方式不仅效率低下,而且难以应对频繁变化的业务需求。本文将分享如…...
3种革命性技术突破:解放城通网盘下载速度的终极方案
3种革命性技术突破:解放城通网盘下载速度的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经面对城通网盘那令人绝望的下载速度而束手无策?当急需获取重要文件…...
告别混乱文件管理:用NERDTree打造VIM项目导航系统
告别混乱文件管理:用NERDTree打造VIM项目导航系统 每次打开一个包含数百个文件的复杂项目时,你是否会感到一阵眩晕?当你在多个目录间反复切换查找某个配置文件时,是否觉得时间在指尖悄然流逝?对于资深VIM用户而言&…...
客服机器人开放平台能自建知识库吗?以百应Agent为例,探讨成都企业售后自动解答的实现路径
在数字化转型加速的今天,成都作为西部电商和制造业重镇,众多企业面临售后咨询量激增的挑战。退货、物流追踪、产品故障排查等售后问题占客服咨询的 60% 以上,传统人工客服成本高、响应慢,已难以满足用户即时需求。客服机器人开放平…...
