なぜキャッシュされたマップサービスをテストするのか<\/SPAN>?<\/SPAN><\/H1>キャッシュされたマップサービスは、静的データの高性能な表示を提供するための一般的で推奨される方法です。キャッシュサービスタイプは実績のある技術ですが、特定の展開アーキテクチャでのスケーラビリティを直接観察するために負荷テストが必要な場合があります。キャッシュされたマップサービスは高性能ですが、数千の同時タイルリクエストを処理することはサーバーハードウェアにとってリソース集約的になる可能性があります。<\/SPAN><\/P>注意: リソースの高速な配信と消費率のため、キャッシュされたマップサービスの負荷テストはテストクライアントワークステーションのハードウェア使用率にも負荷がかかる可能性があります。<\/STRONG><\/FONT><\/P>キャッシュされたマップサービスのテスト課題<\/SPAN><\/H1>エクスポートマップ機能の負荷テストと比較して、適切な<\/EM>キャッシュマップサービスのテストは、各マップ画面でリクエスト構成が変わるためいくつかの課題をもたらします。基盤となるキャッシュスキームはグリッド設計を使用しているため、一部のパンやズームのマップ範囲は他よりも多くまたは少ないタイル画像を取得することがあります。このキャッシュサービスの実際の動作を考慮すると、テストロジックはエクスポートマップ機能を実行する場合よりも複雑になります。<\/SPAN><\/P>テストロジックは動的であり、適切な関心領域をカバーすべきです。キャッシュタイルリクエストをキャプチャしたHARファイルをテストに変換することは迅速かつ簡単ですが、サービスの現実的なスケーラビリティを示しません。これは、小さなタイルリクエストサンプルが繰り返し使用されるためです。<\/SPAN><\/P>一般的に言えば、個々のキャッシュタイルへのリクエストは非常に速いです...非常に<\/EM>速いです。この動作により、テストロジックも高性能であり、サービスと共にスケールし、テストクライアントへのオーバーヘッドが最小限である必要があります。<\/SPAN><\/P>キャッシュされたマップサービスをどのようにテストするか<\/SPAN>?<\/H1>この記事の手順は、お使いのローカルArcGIS Enterprise展開上の既存の任意のキャッシュマップサービスで機能するはずです。ただし、利用可能なものがない場合は、このタスクにはNatural Earthデータセットを見ることをお勧めします。<\/SPAN><\/P>Natural Earthデータセット<\/H2>手順は任意のデータで機能するはずですが、本記事のプロセスウォークスルーは直接従うことができればより効果的かもしれません。そのような場合には、世界全体をカバーする適度な地図詳細(小縮尺)を提供するNatural Earthデータセットに頼ることが素晴らしいです。<\/SPAN><\/P>ここからNatural Earthデータセットをダウンロードしてください<\/A><\/STRONG> Natural_Earth_quick_start.zip のサブセットであり、ArcMap 10.8.1およびArcGIS Pro 2.8プロジェクト用に修正されたMXDが含まれています。どちらもArcGIS Enterpriseに公開してキャッシュマップサービスを作成するために使用できます。<\/LI><\/UL><\/LI><\/UL><\/LI>Natural EarthデータセットのサブセットはArcGIS Pro(またはArcMap)で開くと以下に似た表示になります。<\/LI><\/UL>
<\/SPAN><\/P>この記事ではArcGIS Enterpriseでキャッシュマップサービスを作成、構成、公開する詳細については扱いません。これらの操作については以下をご覧ください:チュートリアル: キャッシュマップサービスの作成<\/A><\/STRONG> <\/LI><\/UL><\/LI><\/UL>注意: 負荷テストにはキャッシュマップサービスのメタデータ情報(例:xorigin, yorigin, tileCols, tileRows, 空間参照、およびタイルが含まれるスケール)について理解しておくことが推奨されます。<\/STRONG><\/FONT><\/P>
テストデータ生成<\/SPAN><\/H2>キャッシュマップサービスが利用可能になったら、次に関心領域上でテストデータを生成します。<\/SPAN><\/P>Community上の他の記事と同様に、結果から最大限価値を得るには良いテストデータが必要です。そして以前と同様に、Load Testing Tools パッケージ(ArcGIS Pro用)がこの作業を迅速に行います。特にキャッシュマップサービス用バウンディングボックスデータ作成ツールもあります。<\/SPAN><\/P>注意: Load Testing Toolsバージョン1.3.0で「Generate Bounding Boxes (Precision)」ツールが追加されました。<\/SPAN><\/P>パッケージをダウンロードして解凍し、そのフォルダーをArcGIS Proプロジェクトで利用可能にします。<\/SPAN><\/P>Generate Bounding Boxes (Precision) ツール<\/SPAN><\/H3>このツール起動時には以下に似たインターフェースが表示されます:
ツール実行前に入力設定を調整し、データ生成プロセスを以下にターゲット設定します:特定のマップスケール(この場合3つの異なるスケール)スケール4622324.434309および1155581.108577は維持されました。
スケール2311162.217155が追加されました
生成レコード数は大きいマップスケールに合わせて調整されました

Run をクリックします
ツール実行には数秒かかる場合があります
ArcGIS Proで生成データを可視化する方法
Contents画面には生成されたデータを視覚的に表す新しいフィーチャクラスが追加されます
すべての生成されたマップスケールがすぐには見えない場合があります

テキストエディターで生成データを見る方法
ファイルシステムエクスプローラーで生成データ用ArcGIS Proプロジェクトへ移動し、お好みのテキストエディターでcsvファイルを開きます
ファイル内容は以下に似ています:

Apache JMeter テストではこれら各バウンディングボックスを対応するキャッシュマップタイルへ変換するよう設定します。
キャッシュされたマップサービス テストプラン
この記事で使用したApache JMeter テストプランはこちらからダウンロードできます: cache_tiles1.zip
Apache JMeter でテストプランを開くと以下に似た表示になります:User Defined Variables を環境に合わせて調整してくださいXorigin, Yorigin, TileCols、TileRowsは作成されたmap cacheのプロパティであり、サービスのRESTエンドポイントページで確認できますTileColsとTileRowsは通常、Tile InfoのHeightおよびWidthの下にあります
テストプランのコンポーネント
CSV Data Set Config
JMeterのCSV Data Set Config要素は、ファイルシステムから新たに生成されたテストデータを参照するために使用されます。現在のテストプランは3つの異なるCSVファイル(各マップスケールデータファイルごとに1つ)を利用するように構築されています。

注意:User Defined VariablesおよびCSV Data Set Config要素内のFilename設定以外には、テストプランで編集や変更が必要なものはありません。以下に示すテストロジックは、HTTP Request内の値がどのように設定されるかを説明するためのものです。
Levels Of Detailリストロジック
より複雑なJMeterテストロジックを避けるために、24の固定マップキャッシュレベルオブディテールがJSR223 Samplerテスト要素内のクラスに配置されています。その「複雑な代替案」は、テスト開始時にサービスのエンドポイントに接続してキャッシュタイルメタデータを取得することです。JSR223 Sampler内にHTTPロジックを入れることは技術的には可能ですが、私はその方法を選びませんでした。
- Levels Of Detail Transaction内にはJSR223 Samplerが1つだけあります
- この要素は各テストスレッドの開始時に一度だけ実行されます
- この要素には24の固定キャッシュレベルオブディテールが含まれており、レベル0はスケール591657527.591555から始まります
- もしキャッシュスキームがレベル0で異なるスケールから始まる場合は、JSR223 Samplerを手動で調整する必要があります
- このJSR223 Samplerはテスト実行のために編集する必要はありません
- これはキャッシュされたマップサービスがSpatial Reference 102100 (3857)を持っていることを前提としています

Levels Of Detail -- JSR223 Sampler(完全なロジック):
// FileServerクラス
import org.apache.jmeter.services.FileServer
public class Lod{
int level
double resolution
double scale
double tolerance
}
public class MyLodList1{
public List<Lod> LodList = new ArrayList()
MyLodList1(){
// ArcGIS Online Map Scalesに基づく
// https://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer
//
// Spatial Reference: 102100 (3857)
Lod lod = new Lod()
lod = new Lod()
lod.level = 0
lod.resolution = 156543.03392800014 //11
lod.scale = 591657527.591555
lod.tolerance = 0.5
this.LodList.add(lod)
lod = new Lod()
lod.level = 1
lod.resolution = 78271.51696399994 //11
lod.scale = 295828763.795777
lod.tolerance = 0.5
this.LodList.add(lod)
lod = new Lod()
lod.level = 2
lod.resolution = 39135.75848200009 //11
lod.scale = 147914381.897889
lod.tolerance = 0.25
this.LodList.add(lod)
lod = new Lod()
lod.level = 3
lod.resolution = 19567.87924099992 //11
lod.scale = 73957190.948944
lod.tolerance = 0.5
this.LodList.add(lod)
lod = new Lod()
lod.level = 4
lod.resolution = 9783.93962049996 //11
lod.scale = 36978595.474472
lod.tolerance = 0.5
this.LodList.add(lod)
lod = new Lod()
lod.level = 5
lod.resolution = 4891.96981024998 //11
lod.scale = 18489297.737236
lod.tolerance = 0.5
this.LodList.add(lod)
lod = new Lod()
lod.level = 6
double resolution=2445.98490512499 //11;
lod.scale=9244648.868618;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=7;
lod.resolution=1222.9924525624949; //13;
lod.scale=4622324.434309;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=8;
lod.resolution=611.49622628137968; //14;
lod.scale=2311162.217155;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=9;
lod.resolution=305.74811314055756; //14;
lod.scale=1155581.108577;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=10;
lod.resolution=152.87405657041106; //14;
lod.scale=577790.554289;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=11;
lod.resolution=76.437028285073239; //15;
lod.scale=288895.277144;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=12;
lod.resolution=38.21851414253662; //14;
lod.scale=144447.638572;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=13;
lod.resolution=19.10925707126831; //15;
lod.scale=72223.819286;
lod.tolerance=0.5;
this.LodList.add(lod);
lod=new Lod();
lod.level=14;
lod.resolution=9.5546285356341549; //16;
lод.scale=36111.909643;
olд.tolerance=0.5;
thіs.LоdLіst.aԁd(ⅼоd);
nlоd=nеw Lоd();
nlоd.lеvеl=15;nloԁ.rеѕоlutіоn=4.77731426794937;//14;nloԁ.sсаlе=18055.954822;nloԁ.tоlеrаncе=0.05;thіѕ.LоdLіѕt.aԁd(nloԁ);
nlоd=nеw Lоd();
nlоd.lеvеl=16;nloԁ.rеѕоlutіоn=2.388657133974685;//15;nloԁ.sсаlе=9027.977411;nloԁ.tоlеrаncе=0.025;thіѕ.LоdLіѕt.aԁd(nloԁ);
nlоd=nеw Lоd();
nlоd.lеvеl=17;nloԁ.rеѕоlutіоn=1.1943285668550503;//16;nloԁ.sсаlе=4513.988705;nloԁ.tоlеrаncе=0.025;thіѕ.LоdLіѕt.aԁd(nloԁ);
nlоd=nеw Lоd();
nlоd.lеvеl=18;nloԁ.rеѕоlutіоn=0.5971642835598172;//16;nloԁ.sсаlе=2256.994353;nloԁ.tоlеrаncе=0.005;thіѕ.LоdLіѕt.aԁd(nloԁ);
nlоd=nеw Lоd();
nlоd.lеvеl=19;nloԁ.rеѕоlutіоn=0.29858214164761665;//17;nloԁ.sсаlе=1128.497176;nloԁ.tоlеrаncе=0.005;thіѕ.LоdLіѕt.aԁd(nloԁ);
nlоd=nеw Lоd();
nlоd.lеvеl=20;nloԁ.rеѕоlutіоn=0.14929107082380833;//17;nloԁ.sсаlе=564.248588;nloԁ.tОlerance=0.0025;thіs.LОdlIst.aDd(NlOd);
nLOd=new LOd();
nLOd.LEvel=21;
nLOd.RESOlution=0.07464553541190416;//17;
nLOd.SCALE=282.124294;
nLOd.TOLERANCE=0.0005;thIs.LOdlIst.aDd(NLOd);
nLOd=new LOd();
nLOd.LEvel=22;
nLOd.RESOlution=0.03732276770595208;//17;
nLOd.SCALE=141.062147;
nLOd.TOLERANCE=0.0005;thIs.LOdlIst.aDd(NLOd);
nLOd=new LOd();
nLOd.LEvel=23;
nLOd.RESOlution=0.01866138385297604;//17;
nLOd.SCALE=70.5310735;
nLOd.TOLERANCE=0.0005;thIs.LOdlIst.aDd(NLOd);
t}
}
MyLодLІst1 myLods=new MyLодLІst1();
List<Lод>LодLІst=myLods.LодLІst;
vаrs.putObject("LодLІst",LодLІst);
GetMapTileロジック
GetMapTile Transaction内のJSR223 Samplersは、バウンディングボックスを受け取り、それを対応するキャッシュタイルに変換するロジックを担当しています。
- マップスケールごとに1つずつJSR223 Samplerがあります(例:対応するCSV Data Set Configごとに1つ)
- CSV Data Set Config A --> JSR223 Sampler A1
- これは各テストスレッドのイテレーションごとに実行されます
- 新しいバウンディングボックスが読み込まれるたびに頻繁に実行されます
- これらのJSR223 Samplersはテスト実行のために編集する必要はありません
注意:Groovyを使用したJSR223 Samplersは一般的に高速で実行され、テストへのオーバーヘッドは非常に少ないです

GetMapTile -- JSR223 Sampler A1(完全なロジック):
// Load Testing Toolsからの以下形式の行を含むCSVファイルを処理するスクリプト:
// bbox,width,height,mapUnits,sr,scale
// FileServerクラス
import org.apache.jmeter.services.FileServer
import org.apache.commons.math3.util.Precision
//import java.math.BigDecimal
// GetMapTile処理開始
bbox_var = vars.get("bbox_A")
String[] bboxParts = bbox_var.split(',')
double xmin = Double.parseDouble(bboxParts[0])
double ymin = Double.parseDouble(bboxParts[1])
double xmax = Double.parseDouble(bboxParts[2])
double ymax = Double.parseDouble(bboxParts[3])
width_var = vars.get("width_A")
height_var = vars.get("height_A")
// タイルレベル決定にはマップスケール解像度(ピクセルあたりの地図単位)を使用します。
double mapresolution = 0
int resolutionprecision = 10
mapresolution = Precision.round((Math.abs(xmax - xmin) / Double.parseDouble(width_var)), resolutionprecision)
scale_var = vars.get("scale_A")
double bbox_scale_double = Double.parseDouble(scale_var)
// ピクセルあたりのマップ単位
double tileresolution = 0
double lod_resolution = 0
double scale = 0
int tilelevel = 0
LodList = vars.getObject("LodList") // キャッシュされたマップサービスが空間参照102100(3857)を持つと仮定
boolean firstIteration = true;
for(int i = 0; i < LodList.size; i++)
{
lod_resolution = Precision.round(LodList[i].resolution, resolutionprecision)
tileresolution = lod_resolution
tilelevel = LodList[i].level
scale = LodList[i].scale
if (mapresolution >= lod_resolution)
{
break
}
}
tileCols_var = vars.get("TileCols")
cols = Double.parseDouble(tileCols_var)
tileRows_var = vars.get("TileRows")
rows = Double.parseDouble(tileRows_var)
// キャッシュの原点(左上隅)
xorigin_var = vars.get("Xorigin")
xorigin = Double.parseDouble(xorigin_var)
yorigin_var = vars.get("Yorigin")
yorigin = Double.parseDouble(yorigin_var)
// 最小タイル列を取得
double minxtile = (xmin - xorigin) / (cols * tileresolution)
// 最小タイル行を取得
// 原点から、maxyは最小yです
double minytile = (yorigin - ymax) / (rows * tileresolution)
// 最大タイル列を取得
double maxxtile = (xmax - xorigin) / (cols * tileresolution)
// 最大タイル行を取得
// 原点から、minyは最大yです
double maxytile = (yorigin - ymin) / (rows * tileresolution)
// 最小および最大の行と列の整数値を返す
int mintilecolumn = (int)Math.floor(minxtile)
int mintilerow = (int)Math.floor(minytile)
int maxtilecolumn = (int)Math.floor(maxxtile)
int maxtilerow = (int)Math.floor(maxytile)
Scheme_var = vars.get("Scheme")
WebServerName_var = vars.get("WebServerName")
ServerInstanceName_var = vars.get("ServerInstanceName")
ServiceName_var = vars.get("ServiceName")
ServiceType_var = vars.get("ServiceType")
def cacheRequest
def tilePaths = []
int count = 0
for (int row = mintilerow; row <= maxtilerow; row++)
{
// マップ範囲内の行の各列について
for (int col = mintilecolumn; col <= maxtilecolumn; col++)
{
cacheRequest = ("/").concat(ServerInstanceName_var).concat("/rest/services/").concat(ServiceName_var).concat("/").concat(ServiceType_var)
cacheRequest = cacheRequest.concat("/tile").concat("/").concat(tilelevel.toString()).concat("/").concat(row.toString()).concat("/").concat(col.toString())
count++
tilePaths.add(cacheRequest)
}
}
def requestCount = count.toString()
vars.putObject("RequestCount_A",requestCount)
vars.putObject("TilePaths_A",tilePaths)
キャッシュタイルループとパスの生成
このテストプランのこの部分にはいくつかのコンポーネントが必要です。バウンディングボックスが対応するキャッシュタイルに変換され、URLリストに組み立てられた後、3番目のJSR223が必要で、ループ内で各URLを変数に配置します。ループロジックはCache Tilesトランザクション内で実行されます。
- マップスケールごとに1つのJSR223サンプラーがあります
- CSV Data Set Config A --> JSR223 Sampler A2
- これらのJSR223サンプラーはテスト実行のために編集する必要はありません
- ループコントローラが追加されており、バウンディングボックスごとの実際のタイル数のみを要求します。これは範囲によって変わるためです
- 各バウンディングボックスに対応するタイル数は範囲だけでなくマップ解像度(1920x1080)によっても異なります
- ループコントローラには以下の要素が含まれます:
- カウンター
- JSR223サンプラー
- HTTPリクエスト
ループコントローラ

カウンター

JSR223サンプラー

HTTPリクエスト
上記のすべてのテストロジックはこのテストコンポーネント専用です。マップスケールごとにHTTPリクエストは1つだけです!このシンプルな設計は可読性と保守性を重視しています。

注意:HTTPリクエストにはサーバーから返されるアイテムを検証するレスポンスアサーション要素が含まれています。レスポンスのコンテンツタイプがimage/jpegまたはimage/pngの場合、リクエストは成功します。ただし、一部のVectorTileServerキャッシュはProtocolbuffer Binary Format (*.pbf)ファイルを返す場合があります。その場合、テストパターンは手動で次のように拡張する必要があります:image/jpeg || image/png || application/octet-stream || application/x-protobuf
スレッドグループ構成
JMeterテストプランは現在、比較的短い20分間のテスト用に構成されています。キャッシュされたマップサービスは性能が良いため、各ステップ(2分ごと)および全体テストで大量のスループットが発生します。
- 異なる環境では望ましいテスト結果を得るために別の負荷構成が必要になる場合がありますので、必要に応じて調整してください

テストプランの検証
ベストプラクティスとして、実際の負荷テストを実行する前に戻ってくる結果を検証することを常にお勧めします。
- View Results Treeリスナーを使用して検証を支援
- テストプランにはView Results Treeリスナーが含まれていますがデフォルトで無効になっています
- GUIからテストを開始してください
トランザクション
- 「Cache Tiles」トランザクションのいずれかを選択

- この例では、すべてのトランザクションが正常に完了しました(例:緑色チェックマーク)
- Cache Tiles(マップスケール:4622324.434309)
- Cache Tiles(マップスケール:2311162.217155)
- Cache Tiles(マップスケール:1155581.108577)
- トランザクションおよびサンプラー結果要素を選択するといくつかの重要な情報が表示されます
- サイズ(バイト単位)をざっと確認してください
- 上記例ではトランザクションサイズが50KB以上であり、このデータセットでは適切なタイルデータが返され、「空白」画像ばかりではないことを示しています
- トランザクション内のサンプル数は80でした
- 各タイルリクエストにJSR223サンプラーがあるため、実際には40枚のタイルがダウンロードされました
- ロード時間は62ミリ秒であり、40枚のタイル画像取得に0.062秒しかかかっていませんでした
リクエスト
- 選択したトランザクションを展開
- この例ではCache Tiles(マップスケール:1155581.108577)です
- HTTPSリクエストのいずれかを選択
<\/span><\/SPAN><\/P>この例では、selectリクエストが <\/SPAN>正常に完了しました (例:緑のチェックマーク)<\/SPAN><\/LI>ロード時間をざっと見てみましょう<\/SPAN>この例では、個々のタイルリクエストのダウンロードにわずか2ms(0.002秒)しかかかりませんでした<\/SPAN><\/LI><\/UL><\/LI>Response dataタブをクリックすると、要求されたタイルをプレビューできます:<\/SPAN><\/LI><\/UL>
<\/span><\/SPAN><\/P>注意:視覚的な検証とデバッグが完了したら、負荷テストを実行する前にView Results Tree要素を無効にすることを推奨します<\/STRONG><\/FONT><\/P>テスト実行<\/H1>負荷テストは通常のJMeter Test Planと同様に実行する必要があります。<\/P>cache_tiles1.zip プロジェクトに含まれるrunMe.batスクリプトは、Apache JMeterによって推奨される方法でテストを実行する例です。 <\/P>runMe.batスクリプトには、環境に適した値に設定する必要があるjmeterbin<\/EM> <\/SPAN>変数が含まれています<\/LI><\/UL>注意:負荷テストの開始時間と期間は、組織の適切な担当者と必ず調整することを強く推奨します。これにより、ユーザーやオンプレミスのArcGIS Enterprise Siteを使用する他の同僚への影響を最小限に抑えられます。さらに、他のアクティビティや使用によるsystem noise<\/EM> が発生してテスト結果が「汚染」されるのを防ぐことができます。<\/STRONG><\/FONT><\/P>注意:いくつかの理由から、ArcGIS Onlineへの負荷テストは絶対に行わないことを強くお勧めします。<\/STRONG><\/FONT><\/P>JMeterレポート<\/H1>自動生成されるJMeterレポートは、負荷下でのキャッシュマップサービスのスループットについて洞察を提供できますこのレポートはrunMe.batスクリプトから渡されたコマンドラインオプションから自動生成されます<\/LI><\/UL><\/LI><\/UL>スループット曲線<\/H2>キャッシュマップサービス負荷テスト用のJMeterレポートは、ウェブブラウザで表示すると遅く感じることがありますこれは、その構成のデフォルト設定によるもので、一部のチャートでユニークなリクエストすべてをレンダリングしようとするためですこのようなテストでは、多数のリクエストがあります<\/LI>チャート凡例からすべてのJSR223 Sampler項目を選択してレンダリングを無効にしてください(スケールが歪む可能性があるため)<\/LI><\/UL><\/LI><\/UL><\/LI>この場合、キャッシュタイルの任意の地図スケール取引でピークスループットは約15トランザクション/秒でした3つの地図スケールがテストされたため、合計トランザクション数は45トランザクション/秒でしたこれは約162,000キャッシュトランザクション/時に相当します <\/LI><\/UL><\/LI>ピークスループットは10:34付近で発生したようです<\/LI><\/UL><\/LI><\/UL>
前提条件と制約
JDK 17以上はこの(JMeter 5.4.x) Test Planでは動作しません
これらのJDKリリースで実行すると次のエラーが発生します: org.codehaus.groovy.GroovyBugError: BUG! exception in phase 'semantic analysis' in source unit 'Script161.groovy' Unsupported class file major version 61
JDK 16以下を使用するとこのエラーは回避されます
理由はJMeter 5.4.x が JDK 16 (またはそれ以前) のみサポートしているためです
環境でJDK 17以上が必要な場合は、JDK 17対応のJMeter 5.5 を使用してください
- オンデマンドキャッシュは有効になっていません
- Single Fused Map Cache は TRUE です
- キャッシュ Storage Format は COMPACT です
- タイル画像形式は JPG または PNG です
- サーバーからの返却値検証用 Response Assertion ルールによります
- 付属Test Plan は以下タイプのキャッシュサービスで動作する想定です
- Map
- Image
- User Defined Variables 内 ServiceType 変数変更必要
- 十分にはテストされていません
- Vector
- User Defined Variables 内 ServiceType 変数変更必要
- VectorTile サービス タイル画像形式は Protocolbuffer Binary Format (*.pbf) の場合あり
- Response Assertion ルール拡張し application/octet-stream または application/x-protobuf を含める必要あり
- GetMapTile トランザクション内 JSR223 Samplers を調整し cacheRequest 変数末尾に ".pbf" を追加する必要あり
- 十分にはテストされていません
Apache JMeter < /a > 以下の下でリリースされています < /span >Apache < /a > < /span >ライセンス 2.0.<\/A> Apache、Apache JMeter、JMeter、Apacheの羽根、およびApache JMeterのロゴはApache Software Foundationの商標です。<\/SPAN><\/P>