JMeter工具使用初探

工欲善其事必先利其器,要保证移动应用产品在上线之后能稳定运行于各种复杂环境,仅仅进行功能测试是远远不够的,压力测试越来越被应用开发商所重视。而压力测试从传统的内部压力到基于云计算的压力测试,再到用户视角的外部压测,也在不断发展变化。JMeter作为一款广为流传的开源压测产品,最初被设计用于Web应用测试,并不断扩展到其他测试领域。

  如今,JMeter可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等,还能对服务器、网络或对象模拟巨大的负载,通过不同压力类别测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

  JMeter的特点包括对HTTP、FTP服务器、数据库进行压力/性能测试;完全的可移植性;完全 Swing和轻量组件支持包;完全多线程;缓存和离线分析/回放测试结果;可链接的取样器;具有提供动态输入到测试的功能;支持脚本编程的取样器等。不仅如此,在设计阶段JMeter能够充当HTTP PROXY(代理)来记录浏览器的HTTP请求,也可以记录Apache等WebServer的log文件来重现HTTP流量,并在测试运行时以此为依据设置重复次数和并发度(线程数)来进行压测。

  JMeter的压力发生原理

  JMeter可以作为Web服务器与浏览器之间的代理网关,捕获浏览器请求和Web服务器响应,这样就能快速生成性能测试脚本。有了测试脚本,JMeter通过线程组来模拟真实用户对Web服务器的访问压力。

  原理图如下:

  JMeter的结构如下图所示,通过各种元件的组织配合,满足不同的测试需要:

  JMeter的常见元件

  1、Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能,也就说性能测试的所有内容都是于基于一个计划的,右键单击“测试计划”弹出菜单:

  注意:“函数测试模式”复选框如果被选择,会记录来自服务器返回的每个取样的数据,在测试监听器中选择一个文件,这些数据将被写入文件。如果尝试一个较小的测试来保证JMeter配置正确并且服务器正在返回期望的结果,这是很有用的,但后果是这个文件会快速增大并对JMeter效率产生影响。

  2、Threads(Users)线程(用户)

  1) setup thread group

  一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是这些类型的线程执行测试前进行定期线程组的执行。setUp Thread Group类似于lr的init.可用于执行预测试操作。

  2) teardown thread group

  一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。tearDown Thread Group类似于lr的end.可用于执行测试后动作。

  3) thread group(线程组)

  这个就是我们通常添加运行的线程,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。

  在设置线程组参数的时候注意:

  Ramp-Up Period:指定了启动所有线程所花费的时间,单位是秒,默认时间是1秒。比如,当前的设定表示“在5秒内启动5个线程,每个线程的间隔时间为1秒”。如果需要JMeter立即启动所有线程,将此设定为0即可.

  循环次数:表示每个线程执行多少次请求。

  3、测试片段(Test Fragment)

  测试片段元素是控制器上的一个种特殊线程组,在测试树上与线程组处于一个层级。它与线程组的差异在于,只有被一个模块控制器或者是被控制器所引用时才会执行。

  4、取样器(Sampler)

  取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息和响应时间的最小单元,JMeter 原生支持多种不同的Sampler,如HTTP Request Sampler、FTP Request Sampler、TCP Request Sampler、JDBC Request Sampler 等,每一种不同类型的Sampler可以根据设置的参数向服务器发出不同类型的请求。在JMeter的所有Sampler中,Java Request Sampler与BeanShell Requst Sampler是两种特殊的可定制的Sampler。

  5、逻辑控制器(Logic Controller)

  逻辑控制器包括两类元件,一类是用于控制test plan 中 Sampler节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、 switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织和控制 Sampler节点的,如事务控制器、吞吐量控制器。

  6、配置元件(Config Element)

  配置元件(config element)用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池 (Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配置元件则可以修改 Sampler的默认数据。例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的 cookie 进行管理。HTTP 请求默认值不会触发JMeter发送http请求,而只是定义HTTP请求的默认属性。

  7、定时器(Timer)

  定时器(Timer)用于操作之间等待时间的设置,等待时间是性能测试中常用的控制客户端QPS的手段,类似于LoadRunner里面的“思考时间”。JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。

  8、前置处理器(Per Processors)

  前置处理器用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当URL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。

  9、后置处理器(Post Processors)

  后置处理器是用于对Sampler 发出请求后得到的服务器响应进行处理,一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。例如,XPath Extractor 可以提取响应数据中通过给定XPath 值获得的数据,正则表达式提取器则可以提取响应数据中通过正则表达式获得的数据。

  10、断言(Assertions)

  断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

  11、监听器(Listener)

  监听器不是用来监听系统资源的元件,而是对测试结果数据进行处理和可视化展示的一系列元件,包括图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。

  12、工作台

  在测试中我们可能需要暂时更改一些组件,可以把一些需要更改的组件保存在工作台中,测试完成后再恢复。但是切记不能退出jmeter,一旦退出jmeter工作台中的内容就会消失。

  13、Property Display

  此元件相当于是jmeter.properties的GUI。

  JMeter元件的作用域和执行顺序

  在JMeter中,元件的作用域是靠测试计划的树型结构中元件的父子关系来确定的,作用域的原则是:

  1.取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。

  2.逻辑控制器(Logic Controller)元件只对其子节点中的取样器和逻辑控制器作用。

  3.除取样器和逻辑控制器元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用。

  4.除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。

  了解了元件有作用域之后,再来看看元件的执行顺序规则,在同一作用域名范围内,测试计划中的元件按照如下顺序执行:

  1)配置元件(config elements )

  2)前置处理程序(Per-processors)

  3)定时器(timers )

  4)取样器(Sampler)

  5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。

  6)断言(Assertions)(除非Sampler 得到的返回结果为空)。

  7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。

  关于执行顺序,有三点需要注意:

  * 前置处理器、后置处理器和断言等元件只能对 取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。

  * 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。

  * 一个断言在测试树中是分等级的。如果它的父元件是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个控制器下的所有请求。

  以上是JMeter使用之前必须了解的一些基本信息,接下来我们将为您带来JMeter脚本录制实例,敬请期待。

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

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

相关文章

HDU1251 统计难题 trie树 简单

http://acm.hdu.edu.cn/showproblem.php?pid1251题意: 找前缀数量 裸模板 1 #include<cstdio>2 #include<cstring>3 #include<iostream>4 #include<algorithm>5 #include<cmath>6 #include<queue>7 using namespace std;8 const int maxn…

JMeter场景设置与监控

随着IT技术的飞速发展和企业互联网业务规模不断扩张&#xff0c;IT架构经历了以数据计算为核心的C/S架构、以聚焦业务功能及服务化构建应用的经典互联网架构和如今整合IT资源和按需使用的云计算架构三个阶段。 与之同步发展的压力测试同样有三个发展阶段&#xff0c;从防火墙内…

阿里云轻应用服务器 宝塔面板 mongodb 配置外网连接 其一 基础配置

买了一台阿里云轻应用服务器做测试&#xff0c;我默认安装的是宝塔面板&#xff0c;下面详细记录配置mongodb过程。 1、进行安装&#xff0c;通过宝塔面板自带的软件管理进行安装 2、首先需要保证外网能够进行访问 设置监听端口为0.0.0.0&#xff0c;原来的是127.0.0.1只允许…

工作151:初始登录样式

<!--GY歌谣控制登录页面的功能--> <template><div class"main"><div><h1> <img src"./geyao.png" style"width: 29px;height: 29px;margin-right: 10px;line-height: 29px" alt"">星传经管系统&l…

Dubbo超时机制导致的雪崩连接

Bug影响&#xff1a;Dubbo服务提供者出现无法获取Dubbo服务处理线程异常&#xff0c;后端DB爆出拿不到数据库连接池&#xff0c;导致前端响应时间异常飙高&#xff0c;系统处理能力下降&#xff0c;核心基础服务无法提供正常服务。 ​Bug发现过程&#xff1a; ​线 上&#xff…

云智慧压测实战分享之JMeter脚本录制实例

在前面的《云智慧压测实战分享之JMeter工具使用初探》中我们对JMeter的功能特点和常用元件做了简单介绍&#xff0c;接下来说说JMeter的脚本录制。JMeter有多种录制脚本方法&#xff0c;其中最常见的是通过第三方工具Badboy录制&#xff0c;另外还有JMeter自身设置(Http代理服务…

阿里云轻应用服务器 宝塔面板 mongodb 配置外网连接 其二 配置账号密码

其一的设置&#xff0c;不需要通过账号密码&#xff0c;就能直接访问数据库&#xff0c;安全性堪忧&#xff0c;我之前就踩过坑&#xff0c;也在之前的文章中讲过&#xff0c;这次用阿里云轻应用服务器重新介绍一波。 命令行窗口可以直接通过阿里云轻应用服务器里面自带的。 1、…

各种Span设置

备注&#xff1a;各种Span设置 &#xff08;转自http://blog.csdn.net/harvic880925/article/details/38984705 &#xff09; 在前面的一个小示例&#xff0c;大家应该也可以看出&#xff0c;要应用一个Span总共分三步&#xff1a; 1、构造String 2、构造Span 3、利用SetSpan…

工作152:阅读之后台管理登录样式

<template><div class"login-wrap"><div class"ms-login"><div class"ms-title">后台管理系统</div><el-form :model"param" :rules"rules" ref"login" label-width"0px&q…

div中图片下方有边距

遇到一个小问题&#xff0c;记录一下。 1、问题描述 <div class"thumb-box"><img class"tt-img" src"https://cdn.w7.cc/images/2017/11/09/15102068385a03ed7644fbf_OxLCy7ypXKpd.png?imageView2/5/w/88/h/88/format/png" alt"…

sign check fail: check Sign and Data Fail!-错误处理

一、报这个错大多都是支付宝公钥配置错误&#xff0c;不同环境的公钥是不同的&#xff0c;大家先确认自己的支付宝公钥获取是否正确:1. 沙箱公钥【查看】创建应用可参照&#xff1a;【如何创建应用】打开应用查看mapi网关适用于【 移动支付 】&#xff0c;【 老版手机网站支付 …

Android 事件分发,分发机制

1. 基础认知 1.1 事件分发的对象是谁&#xff1f; 答&#xff1a;点击事件&#xff08;Touch事件&#xff09; 定义 当用户触摸屏幕时&#xff08;View 或 ViewGroup派生的控件&#xff09;&#xff0c;将产生点击事件&#xff08;Touch事件&#xff09;Touch事件的相关细节…

工作154:代码之解析position 解决

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>日常请假</title><style>* {margin: 0px…

教程-上传应用公钥并获取支付宝公钥

教程-上传应用公钥并获取支付宝公钥 1. 点击签名验签工具右下角的“上传公钥”会打开支付宝开放平台网页&#xff0c;输入账号登录。&#xff08;建议使用IE或Chrome浏览器。) 2. 在“我的应用”中&#xff0c;选择要配置密钥的应用&#xff0c;点击“查看”。记录对应的APPID…

小程序 获取用户信息 openid 等

获取用户信息主要有两种方式 1、直接使用wx.getUserInfo获取一些基础信息。 在userInfo字段中&#xff0c;存在基础信息&#xff0c;比如下图&#xff1a; 2、在正常使用中&#xff0c;我们是需要获取openid的。需要用到wx.login方法。 调用微信小程序中的API接口获取code…

2.mysql优化---增删改优化

整理自互联网 补充知识点&#xff1a;操作数据语句优化的认识 通常情况下&#xff0c;当访问某张表的时候&#xff0c;读取者首先必须获取该表的锁&#xff0c;如果有写入操作到达&#xff0c;那么写入者一直等待读取者完成操作&#xff08;查询开始之后就不能中断&#xff0c;…

工作155:icon图标前置和后置

<el-button slot"append"></el-button> 里的 slot"append" 就是一个UI摆放的位置,其实就是封装的样式布局。 append&#xff1a;代表放在紧贴在依赖组件的后面prepend&#xff1a;代表放在紧贴在依赖组件的前面<el-form :model"for…

Edittext不可编辑可点击,输入密码可见与不可见,验证码换格输入实现方法,车牌号自定义输入键盘

不可编辑可点击&#xff1a;设置两个属性即可 mEdittext.setFocusable(false); mEdittext.setOnClickListener(this::onClick); 输入密码可见与不可见 private boolean ifonpenteyestrue; if (ifonpenteyes){ ifshowpawimage.setImageResource(R.mipmap.openeyes); l…

小程序button去除边框

在小程序给官方button增加自定义样式的时候&#xff0c;需要注意隐藏button的border。 我用的less&#xff0c;加上一行代码就可以解决。 &:after {border: none; }例如下图自定义样式的代码是 .login-btn {background: #ecb810;color: #2e2f2e;display: flex;align-ite…

Alpha 冲刺 (7/10)

队名&#xff1a;天机组 组员1友林 228&#xff08;组长&#xff09; 今日完成&#xff1a;get到了一份对winsock各功能封装好的代码明天计划&#xff1a;继续封装剩余任务&#xff1a;对接主要困难&#xff1a;头文件迷之出错收获及疑问&#xff1a;加深了c以及java类的理解本…