コンテンツにスキップ

テストごとに新しい状態を。container待ちなしで。

OpenSearch互換のbaseを一度seedし、テストごとに独立したforkを渡す。公式clientはそのまま。重い検索containerの起動は要りません。

テストごとに新しい状態を。検索engineは起動し直さない。

Section titled “テストごとに新しい状態を。検索engineは起動し直さない。”

seed済みbaseを共有し、読み取り専用テストは直接検索できます。document、mapping、indexの状態を変えるテストには専用のcopy-on-write forkを渡します。テストが変更するindexだけが複製されます。

seed済みtest環境の起動時間

各経路の平均。osmemは525-byte seedを読み込みreadyになるまで、container系はwarm imageからPUT /benchmark成功まで。

Go組み込み · 日本語無効2.13 ms
Go組み込み · 日本語有効319.7 ms
Docker · OpenSearch6.07 s
Testcontainers Go · OpenSearch6.26 s
Devbox services up -b · OpenSearch7.94 s

server起動中のmemory

RSS平均。TestcontainersはGo runnerの起動前からの増分だけを加算。

osmem server · 日本語有効160 MiB
Docker · OpenSearch container942 MiB
Testcontainers Go · container + runner増分958 MiB
Devbox · container + service process1,009 MiB

変更テスト用cloneの生成時間

構築済みの日本語有効indexをforkする時間。writeやcloseは含めません。

Go組み込み · Cluster.Clone()14.4 µs
Python · server.clone()0.24 ms
Java · server.clone()0.58 ms
Node.js · server.clone()1.63 ms

link後binaryと初回downloadのfootprint

10進MBの同一scale。barは別々の対象を表し、package全体の同種比較ではありません。

Go app · osmem + 日本語analyzerのlink増分 (+35.0 MiB)36.7 MB
Devbox · Maven/JDK環境の初回download (194.1 MiB)203.5 MB
OpenSearch 2.19.0 · Docker Hub圧縮値、linux/arm64739.3 MB

起動グラフはGo組み込みの日本語無効/有効を比較します。有効時はseedに含むkuromoji analyzerの初期化も含み、525-byte seedに対するNew()+LoadSeed()を計測しています。Python・Java・Node.js SDKの起動値と範囲は計測ページにまとめました。cloneはGo 5,000回×5、SDK各300回で生成のみ計測。Devboxはprocess-compose経由で同じDocker-backed OpenSearchを起動し、初回downloadのMaven/JDK環境はserver imageと別です。container imageは取得済み、Testcontainersの初回はRyukも起動。RSSにDocker daemonは含めず、Testcontainers Goは起動前からのrunner RSS増分、Devboxはprocess-composeとDocker clientを加算しています。ready条件が異なるため、厳密なengine比較ではなくローカルの経路比較です。