【LoadRunner】如何對GIS服務器進行性能測試
1、需求了解
首先確定對gis服務器壓測的測試範圍,形成具體的測試用例,gis平臺都是通過網頁端的javascript api調用的gis集群服務接口,通過LR錄制上一步中的業務操作,找到javascript向gis服務器請求的地址做參數化後形成壓測腳本,實現對GIS服務器的壓力測試。
2、測試範圍
ARCGIS性能測試主要範圍有三個:ARCGIS生成基礎地圖服務、空間查詢服務、為地圖提供數據的服務接口的性能,本文主要對ARCGIS生成基礎地圖服務性能測試進行介紹。
3、測試工具
LoadRunner 11
4、測試步驟
4.1腳本準備
利用loadrunner對地圖查詢業務進行錄制,錄制腳本如下:
1 Action() 2 { 3 lr_start_transaction("查詢"); 4 5 web_custom_request("0_4", 6 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0?f=json", 7 "Method=GET", 8 "Resource=0", 9 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",View Code10 "Mode=HTML", 11 "EncType=application/x-www-form-urlencoded", 12 EXTRARES, 13 "Url=0?f=json", "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", ENDITEM, 14 LAST); 15 16 web_custom_request("query_15", 17 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A5009377.08569099%2C%22ymin%22%3A5009377.085700966%2C%22xmax%22%3A10018754.171386972%2C%22ymax%22%3A10018754.171396947%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=CODE%2CNAME%2CFID&" 18 "outSR=102100", 19 "Method=GET", 20 "Resource=0", 21 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 22 "Mode=HTML", 23 "EncType=application/x-www-form-urlencoded", 24 LAST); 25 26 web_custom_request("query_16", 27 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A10018754.171386972%2C%22ymin%22%3A5009377.085700966%2C%22xmax%22%3A15028131.257082947%2C%22ymax%22%3A10018754.171396947%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=" 28 "CODE%2CNAME%2CFID&outSR=102100", 29 "Method=GET", 30 "Resource=0", 31 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 32 "Mode=HTML", 33 "EncType=application/x-www-form-urlencoded", 34 LAST); 35 36 web_custom_request("query_17", 37 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A15028131.257082947%2C%22ymin%22%3A5009377.085700966%2C%22xmax%22%3A20037508.34277893%2C%22ymax%22%3A10018754.171396947%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=CODE%2CNAME%2CFID" 38 "&outSR=102100", 39 "Method=GET", 40 "Resource=0", 41 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 42 "Mode=HTML", 43 "EncType=application/x-www-form-urlencoded", 44 LAST); 45 46 web_custom_request("query_18", 47 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A5009377.08569099%2C%22ymin%22%3A0.000004988163709640503%2C%22xmax%22%3A10018754.171386972%2C%22ymax%22%3A5009377.085700966%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=" 48 "CODE%2CNAME%2CFID&outSR=102100", 49 "Method=GET", 50 "Resource=0", 51 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 52 "Mode=HTML", 53 "EncType=application/x-www-form-urlencoded", 54 LAST); 55 56 web_custom_request("query_19", 57 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A10018754.171386972%2C%22ymin%22%3A0.000004988163709640503%2C%22xmax%22%3A15028131.257082947%2C%22ymax%22%3A5009377.085700966%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=" 58 "CODE%2CNAME%2CFID&outSR=102100", 59 "Method=GET", 60 "Resource=0", 61 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 62 "Mode=HTML", 63 "EncType=application/x-www-form-urlencoded", 64 LAST); 65 66 web_reg_save_param("StatusCode","LB=\"alias\":\"","RB=\",\"length\"",LAST); 67 web_custom_request("query_20", 68 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&outFields=CODE%2CNAME%2CFID&outSR=102100", 69 "Method=GET", 70 "Resource=0", 71 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 72 "Mode=HTML", 73 "EncType=application/x-www-form-urlencoded", 74 LAST); 75 76 web_custom_request("query_21", 77 "URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服務名稱}/MapServer/0/query?f=json&where={行政代碼}&returnGeometry=true&spatialRel=esriSpatialRelIntersects&maxAllowableOffset=9783&geometry=%7B%22xmin%22%3A15028131.257082947%2C%22ymin%22%3A0.000004988163709640503%2C%22xmax%22%3A20037508.34277893%2C%22ymax%22%3A5009377.085700966%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=" 78 "CODE%2CNAME%2CFID&outSR=102100", 79 "Method=GET", 80 "Resource=0", 81 "Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83", 82 "Mode=HTML", 83 "EncType=application/x-www-form-urlencoded", 84 LAST); 85 86 // lr_end_transaction("查詢",LR_AUTO); 87 if (strstr(lr_eval_string("{StatusCode}"),"CODE")!=NULL) { 88 lr_end_transaction("查詢",LR_PASS); 89 } 90 else{ 91 lr_end_transaction("查詢",LR_FAIL); 92 lr_error_message("行政區劃名稱與代碼:%s",lr_eval_string("{服務名稱}""__""{行政代碼}")); 93 } 94 return 0; 95 }
其中主要參數為服務名稱、行政代碼和geometry,服務名稱為系統中的行政區劃服務,包括AdminProvince(省級)、AdminDistrict(市級)與AdminCounty(縣級)等;where=CODE+like+%{查詢地區行政區劃碼}%25%27(根據具體項目決定);geometry代表空間查詢使用的幾何要素。
4.2請求範例
請求地址: |
http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/InsuranceCompany/MapServer/0/query |
請求參數: |
f: 返回內容格式(html/json) where: 查詢條件語句 returnGeometry: 是否返回幾何要素 spatialRel: 空間查詢關系 maxAllowableOffset: 簡化返回的幾何要素時,允許的最大偏移量 geometry: 空間查詢使用的幾何要素 geometryType: 空間查詢使用的幾何要素類型 inSR: 輸入幾何要素的坐標系 outFields: 需要返回的字段 outSR: 返回數據的坐標系 |
請求示例: |
http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/InsuranceCompany/MapServer/0/query?f=json&where=&returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometry=%7B%22xmin%22%3A11778047.838733034%2C%22ymin%22%3A4605433.760798998%2C%22xmax%22%3A12815145.43850603%2C%22ymax%22%3A5446852.568161995%2C%22spatialReference%22%3A%7B%22wkid%22%3A102100%7D%7D&geometryType=esriGeometryEnvelope&inSR=102100&outFields=*&outSR=102100 |
返回內容: |
Json數據 |
4.3腳本完善
對地圖查詢腳本進行參數化、數據準備以及添加判斷等。
以上為,GIS項目測試經驗總結。
【LoadRunner】如何對GIS服務器進行性能測試