本教程包含针对ArcGIS Server服务创建和运行动态负载测试的策略和过程,并假设您熟悉Apache JMeter的一些基础知识。如果您是Apache JMeter的新手,请参阅我们的使用Apache JMeter进行性能测试(简介)。
在深入讨论构建和验证数据驱动负载测试的细节之前,首先讨论一些特定于JMeter的测试策略是很重要的。这些建议不同于我们列出的项目ArcGIS服务器部署负载测试的推荐策略文章旨在与任何测试工具一起使用(但也适用于JMeter)。
一种有助于在JMeter中管理多个测试和多个报告的策略是实现一个简单但一致的文件夹结构,用于存储每个测试的各种元素。JMeter测试的主要驱动程序是JMX文件,这是所有测试逻辑所在的地方。但是,当您继续向测试添加特性并多次运行它时,您将超出仅仅管理单个JMX文件的范围。
一个小小的组织可以走很长的路…手动创建一些关键目录可以帮助管理各种JMeter文件,这些文件将随着时间的推移填充硬盘驱动器。
注意:这种方法是从操作系统的文件系统中完成的,而不是直接从Apache JMeter中完成的。
推荐的文件夹结构:
在“project”文件夹中,将创建5个空目录:数据集、日志、报告、结果和上传。
像上面提到的文件夹结构一样,利用用户定义变量是一种有利于可移植性、可重用性和测试计划共享的测试构建策略。在ArcGIS服务测试中使用的一些常见变量有:
在JMeter测试计划中,这些变量可以很容易地引用,如下所示:${名}它将在执行时自动替换为服务的名称。如果您计划在另一个环境中使用测试,使用变量比使用硬编码值更不容易出错。当测试针对另一个部署运行时,测试人员只需要调整变量定义。对于具有许多已定义的HTTP请求示例的测试计划,这可以真正节省时间。
在定义步骤加载逻辑时,有几种选择。它们都很相似,提供相同的基本功能,但确实有一些细微的差异。线程组是一个很好的、安全的选择,它提供了最大的测试可移植性,因为它包含在核心JMeter产品中。
也就是说,使用JMeter插件管理器(安装为使用Apache JMeter进行性能测试(简介))添加“自定义线程组”可以为测试环境提供一些其他有用的选项。
从JMeter中的插件管理器(选项—> . exe)插件管理器):
一旦“自定义线程组”插件被安装,一个建议的替代线程组是bzm -并发线程组因为它允许直接的步骤配置,直观地呈现定义的压力,从测试的角度来看,这是一个很好的验证功能。
向测试中添加事务是分组的一种有用方法属于同一个“操作”的一个或多个类似请求.例如,加载一个应用程序,一个导航地图缩放或表单搜索。使用这样的事务可以极大地帮助分析,因为它将操作(例如表单搜索)隔离到自己的逻辑“容器”中,只有负责其功能的请求。然而,将许多不同功能或服务的请求放在一个大组中会使测试后的研究非常困难。通过事务,可以分别进行分析以了解每个操作的性能。
注:地图应用和工作流程各不相同;有些操作具有由许多请求组成的事务,而其他操作只有一个请求。
注意:测试中不同操作的性能并不总是以相同的方式扩展;有些人可能比其他人做得更好;能够识别性能较差的操作(通过惟一的事务名称)是很好的分析。
确保从远程服务器返回预期的响应与发送请求一样重要。由于各种原因,在测试ArcGIS资源(如服务)时,仅仅依赖HTTP状态码(例如HTTP 200)是不够的。
验证响应的一种方法是在Header或Body中查找关键字。如果请求的是PNG图像,但返回的是文本错误消息,则响应断言规则将在报头中查找“image/ PNG”,并将尝试标记为失败的.如果它出现在报头中,则认为它是通过了请求。
注意:对于JMeter测试计划中需要检查的每个HTTP请求,必须添加响应断言规则。
使用上述策略,可以创建一个灵活而通用的JMeter测试计划,在每个请求中调用来自ArcGIS地图服务的不同感兴趣的区域。“动态测试”是理想的,因为它可以使服务器资源比每次都请求相同的数据更努力地工作。这样的测试更能代表现实世界的情况。
作为一名性能测试人员,我们希望使用如下所示的导出映射请求签名,并将其转换为动态JMeter负载测试:
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=-108.76228873935%2C31.0409016308382%2C-88.8526618315487%2C46.9686031570791&bboxSR=4326&imageSR=4326&size=1477%2C827&f=image
JMeter提供了几种在测试计划中构建HTTP有效负载的方法,例如:
本文将重点介绍手动创建JMeter测试的第一种方法,如何组装请求的组件,以及如何使其行为“动态”。这个数据驱动测试将通过导出函数调用SampleWorldCities地图服务(在本地部署上运行)。
注意:从许多方面来看,SampleWorldCities被认为是一个非常小且轻量级的地图服务,但是考虑到它在ArcGIS服务器部署中无处不在,使用它来完成负载测试的创建是非常理想的。
使用bzm -并发线程组插件,配置的步骤加载逻辑可以在上面的图表中很容易地看到和直观地确认。该测试将被设置为运行20分钟,将通过使用10个不同的步骤来增加压力(每2分钟一次添加一个并发测试线程),达到最多10个并发测试线程后将停止。
现在我们想要创建一个数据驱动的HTTP请求,每个请求都要求不同的空间范围。这是通过常规的JMeter HTTP请求完成的。
导出映射的请求签名,例如:
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=-108.76228873935%2C31.0409016308382%2C-88.8526618315487%2C46.9686031570791&bboxSR=4326&imageSR=4326&size=1477%2C827&f=image
包含几个URL组件,这些组件需要访问HTTP请求页面的不同位置(以最大限度地提高灵活性和维护)。让我们从分离URL参数的请求的键/值对开始。
下面的参数部分已被修改为包含几个JMeter变量,而不是原始值。有些部分会引用测试中尚未创建的JMeter变量名,这是可以接受的。
dpi = 96透明= true&format = png32&layers = % 3展示a0 % 2 c1 % 2 c2&bbox = $ {bbox_9244649} &bboxSR = $ {sr_9244649} &imageSR = $ {sr_9244649}大小= $ {width_9244649} {height_9244649}加元% 2 f =形象
这将有助于设置必要的几个部分,使HTTP请求的某些部分成为动态的。
bbox,宽度,高度,mapUnits、sr、规模
-108.76228873935, 31.0409016308382, -88.8526618315487, 46.9686031570791, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
23.1282001284589, 34.337748761293, 43.03782703626, 50.2654502875339, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
-117.052786808947, 35.3545948648786, -97.1431599011459, 51.2822963911194, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
-100.83549484975, 36.0637839078502, -80.9258679419492, 51.991485434091, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
17.7030587822399, 34.3302705716379, 37.6126856900409, 50.2579720978788, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
32.2827904735659, 37.2792197897781, 52.192417381367, 53.2069213160189, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
0.222469446585188, 35.0562794764081, 20.1320963543862, 50.9839810026489, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
100.262489726575, 20.8660021309943, 120.172116634376, 36.7937036572352, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
72.4186084471192, 22.1748804724666, 92.3282353549203, 38.1025819987075, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
-61.2094273153097, -26.7402777397378, -41.2998004075086, -10.812576213497, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
-72.5908131920005, -26.6270515481087, -52.6811862841995, -10.6993500218679, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
99.7474167083529, 20.7088254145549, 119.657043616154, 36.6365269407958, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
102.59837658124, 20.384726879328, 122.508003489041, 36.3124284055689, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
80.8239612278688, 23.4521454643548, 100.73358813567, 39.3798469905956, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
-105.812716128284, 31.0536390717042, -85.9030892204829, 46.9813405979451, 1280年,1024年,esriDecimalDegrees, 4326, 9244649
注意:此信息对于验证测试回放非常有用,但对于性能故障排除也很有用
自上次Save以来,我们做了许多更改。
要下载本文中使用的Apache JMeter测试计划,请参见:sampleworldcities1.zip
要下载包含更多详细信息的Apache JMeter测试计划,请参阅:sampleworldcities2.zip
Apache JMeter团队建议不从GUI运行负载测试,而是从命令行调用测试,以获得最佳性能和资源利用。由于这一过程可能涉及到几个值得详细讨论的开关、参数调整和检查,因此这是一个值得单独讨论的过程,称为:从命令行模式运行Apache JMeter负载测试(初级/中级).
注意:如果您的Apache JMeter测试将向可能影响其他用户的服务器发送请求,请与您的GIS团队协调。负载测试应该安排在非高峰营业时间运行。
Apache JMeter根据Apache2.0许可。Apache、Apache JMeter、JMeter、Apache羽毛和Apache JMeter标志是Apache软件基金会的商标。
您必须是注册用户才能添加评论。如果您已经注册了,请登录。否则,请注册并登录。