1. 程式人生 > >【LoadRunner】如何對GIS服務器進行性能測試

【LoadRunner】如何對GIS服務器進行性能測試

scrip open admin 空間查詢 ror reg 集群 測試經驗 orm

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", 
10 "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 }
View Code

其中主要參數為服務名稱行政代碼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服務器進行性能測試