BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Grafana k6リリース:Typescript、ECMAScript、ブラウザテストなどの機能強化

Grafana k6リリース:Typescript、ECMAScript、ブラウザテストなどの機能強化

原文リンク(2024-09-21)

The Grafana k6チームは、オープンソースの負荷テストツールの新バージョンを約2ヶ月ごとにリリースし、新機能とユーザーエクスペリエンスの向上をもたらしている。最近のアップデートでは、特にTypeScriptのサポート、ECMAScriptの互換性、ブラウザテスト、gRPC、メモリ管理、暗号化、テスト結果の保存に関する機能強化など、重要な改善がいくつか導入された。

k6バージョン0.52リリースで導入された主要なアップデートの1つは、TypeScriptのネイティブサポートである。これまでは、k6でTypeScriptを使用する開発者は、WebpackやRollupのようなツールを使用してスクリプトをバンドルしてから実行する必要があった。今回のアップデートでは、特別な互換モードオプションを使用することで、TypeScriptのテストをk6のコマンドラインインターフェイス(CLI)から直接実行できるようになった。この新機能は、TypeScriptを好む開発者のテストプロセスを大幅に簡素化し、特に既存のTypeScriptライブラリを再利用する場合にk6での作業を容易にする。

TypeScriptに加えて、v0.52リリースでは、これまでk6では利用できなかったさまざまなECMAScript 6(ES6)や新しい機能のサポートも導入された。これらの機能には、オプショナル・チェイニング、オブジェクト・スプレッド、プライベート・クラス・フィールドなどが含まれる。これらのECMAScript (ES+)機能を取り入れることで、k6は最新のJavaScriptエコシステムにより準拠するようになり、開発者は回避策を講じることなく最新のJavaScript構文を利用できるようになった。k6 v0.53リリースでは、これらのES6+機能がデフォルトの互換モードで利用できるようになり、開発者は特別な設定をすることなく、より簡単にこれらの機能を利用できるようになった。

最近のk6のアップデートで注目されているもう1つの分野は、ブラウザ・テスト・モジュールだ。当初2021年に導入されたブラウザ・モジュールは、非同期操作やJavaScriptのasyncやawaitキーワードをサポートしていなかった。これはk6 v0.52リリースで変更され、ブラウザAPIは完全に非同期化され、より広範なJavaScriptエコシステムと連携し、Playwrightのようなツールとの互換性を確保した。このアップデートにより、ブラウザのテスト体験はよりユーザーフレンドリーで直感的なものになったが、既存のブラウザ・スクリプトに破壊的な変更をもたらした。ユーザーがこれらの変更に適応できるよう、k6チームは影響を受けるAPIの詳細と、互換性を確保するために既存のスクリプトを修正する方法を記した移行ガイドを提供した。ブラウザ・モジュールは現在、実験的なステータスから正式にコア・モジュールに移行し、安定した状態でk6/experimental/browserの代わりにk6/browserで利用できるようになった。

ブラウザ・モジュールと並んで、gRPCストリーミング機能も大きな変更を受けた。k6 v0.51リリースでは、grpc.Stream機能は、双方向gRPCストリーミングをサポートし、安定版k6/net/grpcモジュールに完全に統合された。この段階的変更は、開発者が彼らのテストで自信を持ってgRPC APIを使用し、心配することなく将来のバージョンにアップグレードでき、それ以上の破壊的な変更が発生しないことを保証する。さらに、gRPCモジュールは、Promiseを返し、より効率的なパフォーマンスを提供するclient.asyncInvokeメソッドでノンブロッキング非同期操作をサポートするようになった。

k6 v0.51リリースでは、これまでOOM(Out of Memory)エラーを引き起こしていた、大きなファイルを使った負荷テストの実行という課題にも対処した。SharedArrayオブジェクトはある程度の緩和策にはなっていたものの、すべてのファイルコンテンツをメモリにロードしていた。この問題に取り組むため、k6チームはStreamモジュールを導入し、開発者が大きなファイルを小さなチャンクで読み込めるようにしたことで、メモリ消費が削減され、効率が大幅に向上した。新しいStream APIは、k6が大きなデータセットを少しずつ読み込んで処理を可能にし、テスト中のOOM問題を防止する。

さらに、k6 v0.51リリースでは、setTimeoutclearTimeoutsetIntervalclearIntervalのような一般的なJavaScriptタイマーメソッドがグローバルに利用できるようになった。以前は、これらのメソッドはk6/timersまたはk6/experimental/timersモジュールからインポートする必要があった。これらのメソッドにグローバルにアクセスできるようにすることで、k6は他のJavaScript環境の動作により近くなり、テスト内での非同期操作の管理プロセスが簡素化された。

最近のk6リリースでは、暗号化操作も改善されている。このツールは、ECDHECDSA といった新しい非対称暗号アルゴリズムや、pkcs8spkiフォーマットのサポートを含む、追加のWeb Cryptoメソッドををサポートするようになった。また、JSON Web Key (JWK)形式での鍵のインポートおよびエクスポートもサポートし、暗号を使用するセキュアなアプリケーションをテストするk6の機能をさらに強化した。webcryptoモジュールはまだ未完成ではあるが、これらのアップデートはk6における暗号テストをより強固なものにするための一歩である。

最後に、OpenTelemetry(OTEL)のk6のコア機能への統合は、k6 v0.53リリースで導入されたもう一つの重要なアップデートである。OTELはテレメトリとオブザーバビリティの標準となっており、k6に組み込まれたことで、ユーザーはテスト結果をOpenTelemetryのバックエンドに直接送ることができるようになった。この追加により、k6ユーザーは、k6のメトリクスやタグをOTELと同等なものにマッピングし、追加の設定を必要とせずに、テスト結果をデフォルトのOTELエクスポーターに出力ができる。これにより、試験結果の保存・分析方法におけるk6の柔軟性がさらに拡大し、業界標準のテレメトリ・ツールと統合される。

k6の他にも、AutocannonLocustといった注目すべき負荷テストツールがある。Node.jsで書かれたAutocannonは、大量のトラフィック下でウェブサーバーのパフォーマンスをテストするために設計された高速HTTPベンチマークツールだ。スループットやレイテンシーのような主要メトリクスを提供する。一方、Locustはオープンソースの負荷テストツールで、Pythonスクリプトを使用してカスタムユーザーの動作を定義する。数百万人の同時ユーザーをシミュレートできるため、大規模なパフォーマンステストに最適だ。

作者について

この記事に星をつける

おすすめ度
スタイル

BT