【LoadRunner】如何对GIS服务器进行性能测试
1、需求了解
首先确定对gis服务器压测的测试范围,形成具体的测试用例,gis平台都是通过网页端的javascript api调用的gis集群服务接口,通过LR录制上一步中的业务操作,找到javascript向gis服务器请求的地址做参数化后形成压测脚本,实现对GIS服务器的压力测试。
2、测试范围
ARCGIS性能测试主要范围有三个:ARCGIS生成基础地图服务、空间查询服务、为地图提供数据的服务接口的性能,本文主要对ARCGIS生成基础地图服务性能测试进行介绍。
3、测试工具
LoadRunner 11
4、测试步骤
4.1脚本准备
利用loadrunner对地图查询业务进行录制,录制脚本如下:
Action()
{
lr_start_transaction("查询"); web_custom_request("0_4",
"URL=http://xxx.xx.x.xxx:xxxx/arcgis/rest/services/xxx/{服务名称}/MapServer/0?f=json",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
EXTRARES,
"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,
LAST); web_custom_request("query_15",
"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&"
"outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_custom_request("query_16",
"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="
"CODE%2CNAME%2CFID&outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_custom_request("query_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%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"
"&outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_custom_request("query_18",
"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="
"CODE%2CNAME%2CFID&outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_custom_request("query_19",
"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="
"CODE%2CNAME%2CFID&outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_reg_save_param("StatusCode","LB=\"alias\":\"","RB=\",\"length\"",LAST);
web_custom_request("query_20",
"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",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); web_custom_request("query_21",
"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="
"CODE%2CNAME%2CFID&outSR=102100",
"Method=GET",
"Resource=0",
"Referer=http://xxx.xx.x.xxx:xxxx/xxxgis/aigis/map.html?module=%E4%B8%9A%E5%8A%A1%E5%88%86%E5%B8%83",
"Mode=HTML",
"EncType=application/x-www-form-urlencoded",
LAST); // lr_end_transaction("查询",LR_AUTO);
if (strstr(lr_eval_string("{StatusCode}"),"CODE")!=NULL) {
lr_end_transaction("查询",LR_PASS);
}
else{
lr_end_transaction("查询",LR_FAIL);
lr_error_message("行政区划名称与代码:%s",lr_eval_string("{服务名称}""__""{行政代码}"));
}
return 0;
}
其中主要参数为服务名称、行政代码和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服务器进行性能测试的更多相关文章
- loadrunner测试TCP协议服务器性能
loadrunner测试TCP协议服务器性能 . 性能loadrunner测试c 最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loa ...
- GIS服务器需求分析
一. 需求概要 1 边界 核心职责 接收并存储外部各方系统GPS数据 GPS数据实时分发, 轨迹检索 2 流程 GIS客户端向GIS服务器订购 GIS客户端向GIS服务器订购号码(仅有号码这一项业 ...
- 在局域网中搭建自己的gis服务器
在局域网中搭建自己的gis服务器 需求 在客户的B/S应用系统中使用电子地图.该系统只可运行于内部网中. 分析 由于系统中的电子地图只能运行于局域网中所以不能采用googl ...
- 【JMeter4.0学习(二)】之搭建openLDAP在windows8.1上的安装配置以及JMeter对LDAP服务器的性能测试脚本开发
目录: 概述 安装测试环境 安装过程 配置启动 配置搭建OpenLDAP 给数据库添加数据 测试查询刚刚插入的数据 客户端介绍 JMeter建立一个扩展LDAP服务器的性能测试脚本开发 附:LDAP学 ...
- loadrunner实战篇 - 客户关系管理系统性能测试
系统介绍 图1(客户关系管理系统模块关系图) 需求分析 一.性能指标 性能指标分 ...
- LoadRunner 学习笔记(1)性能测试常见术语
并发用户数据:与服务器进行交互的在线用户数量 请求响应时间:从Client端发出请求到得到响应的整个时间 一般包括网络响应时间 + server的响应时间 事务请求响应时间:完成这个事务所用的时间 这 ...
- Loadrunner Http接口Get/Post方法性能测试脚本解析
最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法. 1. Http接口性能测试基本流程 首先定义了一个 ...
- sysbench——服务器cpu性能测试
一.前言 最近在工作中需要测试cpu占用率.内存占用率,我想要寻找一种合适的能提高cpu占用率的工具及方法.先尝试了使用 echo "scale=5000; 4*a(1)" | b ...
- GIS服务器开发资源文档
JAVA开发gis后台服务可以参照此文学习,持续跟新... 几何基础类库 代表: JTS(Java), GEOS(C++), Shapely(Python) JTS封装了点.线等等对象 数据源实现 ...
随机推荐
- tcpick
tcpick 是一款基于文本的嗅探器,能追踪,重组和重排tcp流.
- 爬虫基础-http请求的基础知识
百度百科上这么介绍爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 在开发爬虫时常用的工具:ch ...
- cms-帖子内容实现2
package com.open1111.controller.admin; import java.io.File;import java.util.Date;import java.util.Ha ...
- LeetCode Merge Sorted Array 合并已排序的数组
void merge(int A[], int m, int B[], int n) { int *a=A,*b=B; ,j=; ||m==){ //针对特殊情况,比如A或B中无元素的情况 & ...
- objective C 内存管理及属性方法具体解释
oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...
- 初尝微信小程序1-特点
微信小程序特点:1.不需要下载安装即可使用 2.用户用完即走,不用关心是否安装太多应用 3.应用将无处不在,随时可用 适合开发的小程序类型:1.简单的用完即走的应用 2.低频的应用 3.性能要求不高的 ...
- PHP 对象基础知识
最近开始重新学习对象知识,其实也算是初步深入学习对象和设计模式,希望自己会坚持下去,保持更新 初识PHP对象 还记得,刚开始学习 PHP 的时候,学到到方法和对象时有一个很大的疑问,对象与方法相比较那 ...
- jQuery具体实例介绍什么时候用ajax,ajax应该在什么地方使用
网站开发时,ajax是一个非常方便的工具,它具有和表单相同的功能完成前端和后台之间的交互!它起到局部刷新的功能!那什么时候用ajax呢?下面给大家介绍几个实例,首先应该分为两类: 一.在用表单和aj ...
- spark入门: wordcount-java
wordcount-java: pom.xml文件如下: <dependencies> <dependency> <groupId>junit</groupI ...
- (转)CocoaPods
本文转自http://nshipster.cn/cocoapods/ 文明是建立在道路,桥梁,运河,下水道,管线,电线和光纤这些基础设施之上的.只要设计和施工得当,它们可以帮助社会成倍的发展. 唯一的 ...