全干工程师神器 - Jmeter 02 - Jmeter关于录制与简单实战

关于Jmeter录制

说实话,Jmeter对录制的支持不好,所以不建议过分依赖录制,建议大家慢慢的学会手写请求, 基本都是界面操作,程度不难。相反,录制看似简单,其实会给后期调试脚本增加很多麻烦。【关于录制、了解即可】

录制工具 badboy

  • badboy上的操作,只限于badboy只限于badboy本身的操作软件
  • 关于badboy录制时候脚本弹出的 alert ,一直点“确定”即可
  • Jmeter的认知:一般情况下大家都会觉得jmeter是一款性能测试工具,其实在实际应用上,更偏向于功能上、接口上的自动化。对于没有脚本编程能力的测试人员来说,Jmeter是一款很好的选择。
  • 自动重定向和跟随重定向 [这里不明白的话,可以参考 http://blog.51cto.com/xqtesting/1766130]

录制-badboy

简介:

BadBoy是一款免费WEB自动化测试工具,其实就是一个浏览器模拟工具,具有录制和回放功能,支持对录制出来的脚本进行调试。同时支持捕获表单数据的功能,所以能够进行自动化测试。但目前用的多的是用来进行脚本录制,BadBoy支持将脚本导出为JMeter脚本。
JMeter录制脚本有多种方法,其中最常见的方法是用第三方工具badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,但用的多就是通过Badboy进行录制。

1、下载地址:http://www.badboy.com.au/
2、默认安装即可,弹出选择“alert”选择“是”
3、打开badboy工具,点击工具栏上的红色圆形按钮,在地址栏目中输入被试项目地址
4、录制完成后,点击工具旁边的黑色按钮,结束录制。选择“文件”--Export to Jmeter
5、打开Jmeter工具,选择“文件”-->“打开”选择刚才保存的(.jmx类型)文件,将文件导入进来。
6、演示录制

录制-代理

不推荐使用带理:

		1、配置比较复杂
		2、因代理的问题造成无法正常上网,甚至会重装系统。
		3、仅做了解即刻。

设置代理:

1、创建一个线程组(右键点击“测试计划”--->“添加”--->“线程组”)

2、在“工作台”-非测试原件-添加“HTTP带理服务器”

3、代理服务器的端口,默认8080,可自行修改,但不要与其他应用端口冲突。

4、目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组(根据实际情况来选择即可)。

5、分组:对请求进行分组。“分组”的概念是将一批请求汇总分组,可以把URL请求理解为组。
   · “不对样本分组”:所有请求全部罗列
   · “在组间添加分隔”:加入一个虚拟的以分割线命名的动作,运行通“不对样本分组”,无实际意义。
   · “每个组放入一个新的控制器”:执行时按控制器给输出结果
   
6、“只存储每个组的第一个样本”:对于一次URL请求,实际很多次http请求的情况

7、点击“启动”

三、Jmeter脚本项目小实战

1、被测试网站: xqtesting.blog.51cto.com
2、指标:响应时间及错误率
3、场景


在这里插入图片描述


测试步骤

1、测试计划
2、线程组
3、HTTP请求
4、监听器
5、运行脚本
6、查看报告

在这里插入图片描述


HTTP请求设置-保持默认即可

  • 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。

  • 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息

  • 服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址

  • 端口号:目标服务器的端口号,默认值为“80”,后面的超时定义可以不用填写

  • 协议:向目标服务器发送HTTP请求时的协议,可以是http亦或https,默认值是http

  • 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

  • Content encoding:内容的编码方式。

  • 路径:目标URL路径(不包括服务器和端口)

  • 自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,Jmeter 自动重定向到新的页面。

  • Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用 Keep-Alive方式
    进行HTTP通信,默认选中。

    Keep-Alive:持久长连接

  • Use multipart/form-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/form-data方法发送,默认不选中。

  • 同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了 一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的 每一行是一个参数值对(对应RUL中的名称1=值1)

  • 同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这 种方式模拟。

  • 从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请 求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含
    的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配制定正则表达式的URL指向资源才会被下载。

  • 用作监视器:此取样器被当成监视器,在Monitor Results Listener中可以直接看到 基于该取样器的图形化统计信息。默认为不选中。

  • Save response as MD5 hash : 选中该项,在执行时仅记录服务端响应数据的MD5值,
    而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减 少取样器记录相应数据的开销。

线程组属性/设置

  • 线程数:虚拟用户数
  • ramp up period:设置的虚拟用户数需要多长时间全部启动。如果线程数为20,时 间为10,也就是每秒钟启动2个线程。
    参考:https://blog.csdn.net/sunwangdian/article/details/50738870
  • 循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那么每 个线程发送100次请求。总请求数为20*100=2000.如果勾选了“永远”,那么所有 线程会一致发送请求,一到选择停止运行脚本。
  • 调度器:可以更灵活的设置运行时间等。

监听器-聚合报告

附:保存文件的后缀 jtl 单位:毫秒

  • Lable:定义HTTP请求名称
  • Samples:表示这次测试中一共发出了多少个请求
  • Average:平均响应时长—默认情况下是单个Request的平均响应时长,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时长。
  • Median:中位数,也就是50%用户的响应时长。
  • 90%Line:90%用户的响应时长。
  • Min:访问页面的最小响应时长。
  • Max:访问页面的最大响应时长。
  • Error%:错误请求的数量/请求的总数
  • Throughput:默认情况下表示每秒完成的请求数(Request per Second),当使用了
    Transaction Controller 时,也可以表示类似 LoadRunner 的Tranaction per Second数。
  • KB/Sec:每秒从服务器端接收到的数据量。

Jmeter - 参数化

参数化的两种实现方式 用户参数CSV Data Set Config

用户参数


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


察看结果树

在这里插入图片描述


在这里插入图片描述


CSV Data Set Config


在这里插入图片描述


在这里插入图片描述


多个变量参数化与单个变量参数化的区别

单个变量


在这里插入图片描述


多个变量

  • 多个变量的情况下,使用“,”【英文格式】逗号作为分隔符,将关键字进行分隔.

在这里插入图片描述


用户参数与CSV Data Set Config

关于"用户参数""CSV Data Set Config"哪个元件用来做参数化更有优势,没有标 准答案,"两者都可以用",主要看使用者更倾向于哪一个。

一般情况下,参数化数据量不是很大的情况下,使用用户参数更为简便些。

如果参数化数据量比较大的情况下,比如开发导出来的CSV文件,CSV Data Set Config
要比用户参数来说更有优势些。

Jmeter - 集合点

可以理解为“增加并发、模拟并发”

定义:

简单的说,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的, 为了更真实的实现并发这概念,我们可以在需要压力的地方设置集合点,每到输入用户 名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。

如淘宝的秒杀,多个用户同时进行一个操作。

注意:
1、jmeter集合点通过添加定时器来完成。
2、JMeter里面的集合点通过添加定时器来完成。
3、Synchronizing timer仅作用于同一个JVM中的线程。

查看下文“注意点”处的补充。

操作步骤


在这里插入图片描述


在这里插入图片描述


注意:

  • Number of Simulated Users to Group by:
    每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。
    可理解为集合多少人后再执行请求

  • Timeout in milliseconds:
    如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。默认为0。

  • 如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous
    Users to Group by” 中设置的值,那么Test将无限等待,除非手动终止。

作用域

如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如下图
定时器仅仅对HTTP请求1起作用,即仅在HTTP请求1执行前执行定时器,和HTTP请 求2无关。


在这里插入图片描述


如果希望synchronizing timer应用于多个sampler.

如下,执行HTTP请求1和HTTP请求2前都会执行同步定时器1、2。当执行一个sampler 之前时,和sampler处于相同作用域的定时器都会被执行;


在这里插入图片描述


注意点

问:集合点的位置一定要在Sample(采样器)之前才能生效吗?

答:在Jmeter中,timer是在sampler之前执行的。不管这个定时器的位置放在sampler之 后,还是之前。当然,如果有多个timer的时候,在相同作用域下,会按上下顺序执行 timer,这个就需要慎重放置timer的顺序;不过,为了更好的可读性,还是建议将timer放在对应的sampler前面 或 子节点中;

关于Synchronizing timer补充: Synchronizing timer 仅作用于同一个JVM中的线程。

  • a.如果分布式测试时
    synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm 工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;

  • b.如果分布式测试
    并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数

关于集合点,在实际应用中基本上是不用的,或者说非常少非常少用。
其实,仅仅就集合点来说,影响性能么?答案:影响。那么影响大么?答案:其实也不是太大。

因为一个系统能够承受的并发数和压力取决于两点。

  • 取决于业务脚本里的思考时间
    同样的并发、同样压力情况下,若思考时间不同,能够承受的压力也是不同的。

  • 取决于系统真正的处理能力,或者说 TPS【系统吞吐量,亦说QPS】,TPS每秒处理的能力越高,那么处理压力的能力相对来说就会多一些。

Jmeter—断言/检查点

按照Jmeter官方的翻译过来叫“断言”,其实功能与LoadRunner的“检查点”是一样 的,叫法不一样罢了(文字游戏)

断言/检查点

对响应的结果做一个判断。

响应断言

注意点
1、模式匹配规则
2、要测试的模式


在这里插入图片描述


在这里插入图片描述


响应断言的参数

Apply to:响应作用范围
	1、Main sample and sub-samples:断言应用于主采样器和子采样器。 
	2、Main sample only:断言仅应用于主采样器。 
	3、Sub-samples only:断言仅应用于子采样器。 
	4、Jmeter Variable:断言将被施加到命名变量的内容,变量值进行匹配
要测试的响应字段
	1、响应文本:指页面返回的http文本内容 。
	2、响应代码:指请求返回的状态,如200 。
	3、响应信息:指请求返回的响应信息,如OK、not found 。
	4、Response Headers : 响应头信息 。
	5、Request Headers :请求头信息。
	6、剩余几个还不了解~~ 
模式匹配规则:
1、包括=返回结果包括你指定的内容,支持正则匹配 
2、匹配:
	(1)相当于 equals 。当返回值固定时,可以返回值做断言,效果和equals相同
	(2)正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式	   必须能匹配整个返回值,而不是返回值的一部分。 
3、Equals ::返回结果与指定断言完全一致 
4、SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是SubString不支持正则字符串。

断言结果

对“响应断言”的“断言结果”进行再次的判断

增加"断言结果"

在这里插入图片描述


断言结果判定
  • 成功
    如果成功,“断言”一栏显示请求地址

在这里插入图片描述


  • 失败
    如果失败,“断言”一栏请求地址下方显示报错原因。

在这里插入图片描述


Jmeter—关联/动态关联

1、和LoadRunner中的关联差不多

2、Jmeter中关联的两种方式:正则、xpath(一般xml的时候用的多)
   		正则:一般用的比较多的是正则
   		
   XML:返回的数据是XML格式的情况,用XML居多
   
3、以webtours登录威力进行演示  webtours.jmx
   webtours:LoadRunner自带的

步骤

1、webtours开启关联
2、badboy录制
3、导入Jmeter
4、找出需要关联的请求(nav.pl)
5、该请求 -->  后置处理器 --> 正则 --> 填入内容
6、增加断言
7、增加断言结果
8、运行查看

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 模板:如果前面的正则表达式取了不止一个参数,那么这里需要制定参数的组别,如果该参数为$1$,则表示取得第一个值,$2$表示取得第二个值

  • 匹配数字:0随机; -1取所有值,以数组形式存储; 1; 2…

  • 缺省值:一般默认即可(为空)

Jmeter—web程序

项目背景

  • XX网站
  • 环境:Windows

需求

  • 并发登录的性能

场景

  • 1s增加2个线程;运行2000次。
  • 分别查看20、40、60并发下的表现

监控

  • 成功率、响应时间、标准差、CPU、MEM、IO等
  • 资源监控需要在Windows / Linux下部署监控agent (server agent)

步骤

  • badboy录制
  • 导入jmeter
  • 参数化、检查点、集合点
  • 指标监控,资源监控
  • 报告(可导出到xls,然后自行生成报表)
  • 演示login.jmx

在这里插入图片描述


注意点

关于 “聚合报告 --> 响应数据” 中文乱码解决方法

监控内存及CPU等(jconsole)

最近逛论坛的时候,发现了一个比较好的监控内存CPU等的小工具,本着开源小工具多 多益善的原则,记录一下。

打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就 不用去做其他的配置,直接 点击:开始——》运行——》输入cmd——》然后在出现的 命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】


在这里插入图片描述


在这里插入图片描述


Jmeter–FTP程序

需求

  • 上传一个文件到服务器(put)
  • 下载一个文件到本地(get)

在这里插入图片描述


步骤

  • 打开Jmeter
  • 线程组
  • ftp请求缺省值(可有可无)
  • ftp请求(get和put两种)
  • 如果有用户名和密码填上即可

Jmeter—jdbc测试mysql数据库

JDBC Connection Configuration

测试计划需加载Jar包


在这里插入图片描述


参考链接:https://blog.csdn.net/u012167045/article/details/72638507
参考链接:https://jingyan.baidu.com/article/f96699bbf5d092894e3c1b87.html


这张图好像有点失帧了,凑合吧…
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


关于jdbc中文乱码的说明

第一步:请确认你在数据库中写sql出来的中文是正常显示的,并没有出现问号或乱码, 如果出现那是数据库编码的问题,和jmeter无关;

第二步:在第一步确认的前提下,修改jmeter jdbc databaseurl
jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true,前面的链接地址和端口以及数据库名根据实际情况修改,后面的参数固定,这样就可以解决问号乱码的问题了。

Jmeter—分布式性能测试

Jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的。

原理

其实和LoadRunner的agent差不多,如下图所示。


在这里插入图片描述


  • 调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试 结果收集汇总,报告产出。
  • 执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面), 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及 详细断言信息。

步骤

  • 关闭防火墙

  • 在所要运行Jmeter并作为负载生成器的机器上安装Jmeter,并确定其中一台机器作
    为主的controller,其他的机器作为agent。然后运行所有的agent机器上的
    jmeter-server文件.【Win系统运行“jmeter-server.bat”、Linux运行“jmeter-server”】

  • 在controller机器的jmeter的bin目录下,找到jmeter.properties文件


在这里插入图片描述


  • 启动controller机器上的Jmeter应用,选择菜单“运行” —> “远程启动”,来
    分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。

Jmeter 中的监听器以及测试结果分析

监听器

  • 种类繁多…看界面

  • 常用的几个

    • 断言结果
    • 查看结果树
    • 聚合报告
    • 用表格查看结果
    • 图形结果
    • aggregate graph
    • 等等…

指标分析

  • Samples:表示本次场景中一共发出了多少个请求。
  • Average:平均响应时间—默认情况下是单个Request的平均响应时长,当使用了
    Transaction Controller时,也可以以Transaction为单位显示平均响应时长。
  • Median:中位数,响应时间中值,也就是50%用户的响应时长。
  • 90%Line:90%用户的响应时间。
  • Min:访问页面的最小响应时间。
  • Max:访问页面的最大响应时间。
    • 以上时间单位为毫秒…不要弄错了
  • Error%:出错率;错误请求的数量/请求的总数
  • Throughput:吞吐量。默认情况下表示每秒完成的请求数(Request per Second),当使用了Transaction Controller 时,也可以表示类似 LoadRunner 的Tranaction per Second数。
  • KB/Sec:流量。每秒从服务器端接收到的数据量。

jtl文件分析 —> 见test.jtl

  • 在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保
    存测试结果,也可以为日后的性能测试报告提供更多的素材。
  • Jmeter中,结果都存放在“.jtl”文件。这个“.jtl”文件可以提供多种格式的编写,
    而一般我们都是将其以CSV文件格式记录。
  • 只需要选择某个监听器,点击页面中的configure按钮。此时,一个设置页面就会弹
    出来,建议都勾选如下项:Save Field Name , Save Assertion Failure Message
  • 经过了以上设置,此时保存下来的“.jtl”文件会有如下项:
  • timeStamp,elapsed,lable,responseCode,responseMessage,threadName,
    dataType,success,failureMessage,bytes,Latency
  • 请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属 的线程,数据类型,是否成功,失败信息,字节,延迟。

Jmeter 调用第三方jar包

  • 有时候我们在测试接口的时候需要调用第三方Jar包来完成。比如,某些数据的加密需要调用加密的Jar包,在Jmeter里可以很方便的完成。
  • Jar包 找开发要!找开发要!找开发要!
  • “测试计划”一栏下方调用Jar包

  • 大致步骤如下:
    • 获取需要调用的Jar包
    • Jmeter的测试计划中天加Jar包
    • 通过beanshell sample 进行调用并保存结果
    • 在Jmeter中需要用到该值的地方直接使用即可

参考链接:jmeter完成md5加密的接口请求参数


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


Jmeter - 测试webservice

附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行 webservice接口的测试。(了解即可)

概念

  • 官方解释:Web Service是一种可以接收从Internet上的其他系统传递过来的请求,轻量级的独立的通讯技术。通过SOAP协议完成,使用WSDL文件进行描述内容。

  • 粗暴解释:当作一个接口,和HTTP没区别。完成请求,请求的时候完成入参,响应的时候完成出参,响应的时候有返回及返回的参数。

    • 接口请求中的一种。
    • 接口的本质其实就是发送请求和响应的一个过程。

Jmeter3.x测试webservice接口

附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


生成唯一数UUID


在这里插入图片描述


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哥撩编程

多点...少点...多少给点?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值