使用JMeter对异步HTTP / REST服务进行压力/负载测试

尽管我一直在使用JMeter进行Web应用程序的压力测试和负载测试好几次,但我们还是花了一些时间才弄清楚如何使用该工具测试基于异步HTTP / REST的服务。 在我们这里,我是指一名程序员, Holger Staudacher ,我很荣幸能与当前的一个项目一起工作。

当Holger基于对上述项目进行功能和集成测试的经验而开发了Restfuse时 ,我们决定使用JMeter进行压力和负载测试。 被测软件的主要服务处理上传到特定URL的数据结构。 如果上传过程成功,则返回指向包含处理结果的资源的URL。 产生的资源无法立即使用-处理需要一段时间。 因此,轮询可用于在资源可用时检索资源1

我们的目标是在一次测试中测量上载数据结构,处理数据和下载结果资源所花费的时间。 同时运行多个用户的这种测试应该使我们对系统的吞吐量能力有一个良好的印象。 听起来不太复杂,但是…

…使用JMeter机载功能为上一段中描述的场景编写测试计划的第一种方法效果不佳。 计划既不可理解,也不是(更糟的是)使测量结果毫无意义。 特别是将上载请求和轮询循环与事务控制器一起钳制似乎对计时器产生了一些意外的副作用。 因此,经过一段时间的Google额外研究之后,我偶然发现了JavaSamplerClient API ,这是我以前所不知道的。

stackoverflow.com上有一个条目,描述了如何扩展AbstractJavaSamplerClient ( JavaSamplerClient的实现)并在JMeter使用它。 因此,这就是解决我们的问题的方法。 我们创建了AbstractJavaSamplerClient的扩展,以覆盖runTest(JavaSamplerContext) 。 在该方法中,我们使用HttpClient执行上载和轮询请求。 一旦轮询请求成功检索到处理结果,所有标头和内容信息都将存储在SampleResult实例中。 后者由覆盖的测试采样器方法返回,由JMeter进行进一步处理–非常简单2

创建包含自定义JavaSampleClient的jar并将其放入JMeter安装目录下的lib/ext/文件夹后,可以将Sampler类型的Java Request添加到Thread Group 。 这使您可以选择和配置自定义采样器,如下图所示:

使用JavaSamplerClient使我们的测试计划变得非常简单,并允许我们使用通用的JMeter结果测量功能,如下图所示,在Graph Results视图中:

当然,测量结果现在是合理的……

由于我们不得不花很长时间才能做到这一点,所以我认为我们的解决方案也可能对其他人很感兴趣-这就是写这篇文章的原因。 但是,如果有我们没有注意到的更简单的解决方案,也很高兴收到您的来信。 因此欢迎提供反馈

  1. 我们开始使用网络挂接 ,但我们的客户有问题,说服IT管理员打开防火墙... ↩
  2. 为了使本文的篇幅合理,我跳过了关于如何处理不成功请求的任何描述,但是我们的大多数实施工作都必须在该领域中完成…… ↩


参考:来自Code Affine博客的JCG合作伙伴 Frank Appel的JMeter对异步HTTP / REST服务进行压力/负载测试 。

翻译自: https://www.javacodegeeks.com/2012/11/stressload-testing-of-asynchronous-httprest-services-with-jmeter.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转义字符的使用和功能python_Python中转义符和格式符的混合使用,python,转义字符,与,格式化...

# coding: utf-8 mon 麻辣小龙虾 #周一麻辣小龙虾 tue 宫保鸡丁 #周二宫保鸡丁 wed 水煮肉片 #周三水煮肉片 thu 果儿拌菜 #周四果儿拌菜 fri 小鸡炖蘑菇 #小鸡炖蘑菇 Cf_price 23 #麻辣小龙虾价格 CK_price 12 #宫保鸡丁价格 BM_price 32 #水煮肉片价格 MV_price 19 …

mock接口开发,excel(读,写,修改)

mock接口开发 首先需要安装 Flask 模块 :pip install flask 然后引用 from flask import request #想获取到请求参数的话,就得用这个 lanxia flask.Flask(__name__) #把这个python文件当做一个web服务 lanxia.server(/login,[ post , get ] )#第…

web前端学习之ruby标记和rt/rp标记

ruby 标记定义ruby注释(中文注音或字符)。ruby标记与rt标记一同使用。ruby标记由一个或多个字符(需要一个解释/发音)和一个提供该信息的rt 标记组成,还包括可选的rp标记,定义当浏览器不支持ruby 标记时显示…

mysql 5.7 udf http_mysql下mysql-udf-http效率测试小记

看到张宴的博客上关于"http/rest客户端的文章",怎样安装啥的直接都跳过,下面直接进入测试阶段,测试环境:虚拟机复制代码 代码如下:[rootlocalhost ~]# uname -aLinux sunss 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 …

作为一名程序员,聊聊我们的现状和未来

前言:互联网这个高速发展的新兴行业,注定是敢想敢干敢创新,耐劳耐操耐折腾年轻人的天下? 我们所在的互联网行业,不断地有新的公司冒出,有新的商业模式成形,有新的产品形态影响着大家的生活日常&…

适用于孩子,父母和祖父母的JBoss HornetQ –第1章

现在与HornetQ合作已经快4年了,我认为是时候分享我到目前为止所学知识的一部分了。 这篇文章的主要目的不是重写官方文档 ,而是以简单的方式阐明我们在PaddyPower中最常用的概念。 什么是HornetQ HornetQ是JMS实现。 JMS是一种面向消息的中间件API&am…

riot.js教程【四】Mixins、HTML内嵌表达式

前文回顾riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期;riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法;riot.js教程【一】简介; 共享Mixins 混合开发可以使你很好的复用代码,如…

移动端判断手机横竖屏状态

禁用用户自动缩放功能&#xff1a; <meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0"> 判断横竖屏状态有两种方法&#xff1a;css判断、js判断 (一)、css判断横屏还是竖屏 1、写在同一个css文…

ubuntu dhcp ping 不通 自己_??2、DHCP安装和配置

DHCP动态主机设置协议&#xff0c;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;可以快速分配IP地址&#xff0c;解决内网IP不足、手动配置IP造成IP冲突以及内网机器多手工配置比较麻烦的问题。1.把win2008和win2003设置同一网段&#xff0c;网络适配器—配置…

python秒数变日期_将pandas日期列转换为已用秒数

新答案 将文本转换为Timedeltadf[Origin Time(Local)] pd.to_timedelta(df[Origin Time(Local)]) df[Seconds] df[Origin Time(Local)].dt.total_seconds() 旧答案 考虑数据帧dfdf pd.DataFrame(dict(Datepd.date_range(2017-03-01, 2017-03-02, freq2H))) Date 0 2017-03-0…

mysql用一个表更新另一个表的方法

Solution 1: 修改1列(navicate可行) update student s, city c set s.city_name c.name where s.city_code c.code; Solution 2: 修改多个列 update a, b set a.titleb.title, a.nameb.name where a.idb.id Solution 3: 采用子查询(navicate不可行) update student s set…

选择您的Java EE 6应用服务器

我被问到的第一个问题是&#xff1a;“我们应该使用哪个Java EE应用服务器&#xff1f;”。 随着Java EE 6的日益普及&#xff0c;新的兼容应用程序服务器获得了认证。 当前的官方兼容性和认证矩阵列出了针对完全配置文件&#xff0c;Web配置文件或两者认证的12种不同产品。 如…

串的基本计算

#include<stdio.h> #include<stdlib.h> //typedef int Status; #define Max 20 #define OK 1 #define ERROR 0 #define OVERLOE -2 typedef struct//堆分配表示串 { char *ch; int length; }HString; // int CreatHString(HString &H)//构造字符串 { H.length …

HTML表格属性及简单实例

这里主要总结记录下表格的一些属性和简单的样式&#xff0c;方便以后不时之需。 1、<table> 用来定义HTML的表格&#xff0c;具有本地属性 border 表示边框&#xff0c;border属性的值必须为1或空字符串("")。该属性不会控制边框的样式&#xff0c;而是由CSS来…

怎么查看MySQL 源码编译了什么_Mysql 源码编译教程贴

题外话:这是一篇教程贴,不仅学的是mysql的编译,还是一些编译的知识.我也是一个菜鸟,写一些感悟和心得,有什么问题可以批评指正,谢谢!如果只是为了安装请移到我的另一篇安装贴: Mysql安装贴环境:OS: CentOS 6.6x64 minimysql: mysql-5.6.251. mysql 下载:http://dev.mysql.com/d…

linux mysql启动_MySQL 安装(二)

MySQL 安装所有平台的Mysql下载地址为&#xff1a;MySQL 下载 . 挑选你需要的 MySQL Community Server 版本及对应的平台。Linux/UNIX上安装MySQLLinux平台上推荐使用RPM包来安装MySQL&#xff0c;MySQL AB提供了以下RPM包的下载地址&#xff1a;MySQL - MySQL服务器。你需要该…

0524驼峰命名法,模态对话框

模态对话框 window.showModalDialog("url"&#xff0c;"向目标对话框传的值"&#xff0c;"窗口特征参数") 打开模态对话框 模态对话框必须关掉才能对后端操作。 模块对话框和窗口的区别是永远置顶。 特征参数&#xff1a;用分号隔开&#xff0c;…

谁在偷你的记忆? 应用服务器版

您创建了一个了不起的应用程序。 您将其投入生产。 您会发现您没有足够的可用内存。 即使您的所有测量结果&#xff08;可能是借助我们的小型公用事业公司进行的测量 &#xff09;都表明您应该还不错。 我们计划发布一系列博客文章&#xff0c;研究堆消失的位置&#xff0c;并…

遗忘的html标签

1 <span>x</span><sup>2</sup><span> y10</span> 2 <br> 3 <span>H</span><sub>2</sub><span>O</span> <sup> 标签可定义上标文本。 包含在 <sup> 标签和其结束标签 …

Android四大组件之BroadcastReceiver

什么是BroadcastReceiver? BroadcastReceiver(广播接收器)&#xff0c;顾名思义&#xff0c;是用来接收广播的。Android内部实现了一套广播通信机制&#xff0c;即在某个应用或某个组件注册广播接收器&#xff0c;接收特定类型的广播。当别的应用或组件发送该类型的广播时&…