性能测试工具--jmeter(一)

给服务器发送压力的测试工具
基于java语言开发的测试工具

1.为什么用jmeter?

①优点

1)开源
2)可以进行二次开发,对功能进行扩展
3)免费
4)多系统兼容,基于java开发的,进行跨平台
5)轻量
6)易用,通过就metergui界面可以快速创建出需要的脚本
6)插件丰富
7)功能强大(接口功能测试、接口自动化测试、接口性能测试就是压测接口)
8)功能强大还体现在代理功能,jmeter可以实现录制抓包(了解即可)

②是否可以从前端页面进行压测

从前端页面进行压测是可以获取到html资源,是看不到前端页面的渲染。

演示:

第一步:添加线程组、添加取样器中的http请求,添加监听器查看结果树
请求百度
在这里插入图片描述

第二步:设置一下,获取前端资源,并行下载也勾选一下
在这里插入图片描述
第三步:运行,再点响应数据,获取到html

有好几个子请求,html中有图片和css,请求1中是css,请求2是图片
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结论

通过上面例子可以得出,因为真正想要展示出百度页面那种效果,是需要进行页面渲染,而上面演示只是将百度页面数据获取到而已。即结论就是:如果是从前端压测,页面渲染的时间,不包括在响应时间中。
即就是jmeter主要用来测服务端性能,即接口性能。

③前端性能在什么情况下会对服务器有压力?

前端性能和服务端性能分开测,这样才能更方便分析定位问题。

性能一般都是服务端性能。前端性能,只是在从服务器拉起静态资源时会对服务器产生压力,检测到前端资源都不一致了,加载本地的,看一下本地资源的渲染的情况。前端性能,只是在从服务器拉起静态资源时会存在并发,这些静态资源一般不会放在自己公司的服务器上,一般都是放在cdn上。这样拉起静态资源,产生的压力不会对公司内部搭建的服务器造成影响,有的公司的静态资源是放在阿里云的cdn上。如果静态资源是放在阿里云的cdn上,基本上不会出现拉取静态资源造成性能问题,若静态资源、并发量很大,会不会跟带宽造成影响,一般来说都是按流量收费,带宽是足够。

2.其他性能测试工具:

①apacheAB:不接收服务器返回的数据,用命令进行,只关注httpcote。httpcode是200,服务器只是给了你正确的响应,并不代表业务正确,错误的用户名和密码登录,httpcode也是200,,不接收服务器返回的数据,只关注httpcote,测出来的数据会比jmeter高很多。压测时是在接口层模拟用户真实的操作,是需要接收服务器返回的真实数据,jmeter是需要接收服务器返回数据,接收返回数据后判断是否正确,返回的code是否正确、业务字段是否正确,即apacheAB的测试数据的参考性意义不大。不接收返回器的真实数据,没有参考价值。
②oadrunner
③locust:基于python
④gatling

java项目建议用Jmeter

3.官网:https://jmeter.apache.org

1)要求是需要安装jdk8以上的环境

2)各个组件相关

在这里插入图片描述

4、安装及配置

5、目录结构:

在这里插入图片描述

5.1、启动:

window上启动jmeter是jmeter.bat
linux上启动jmeter是jmeter.sh

启动后会有cmd的黑框
不要使用gui进行压测,仅用于创建和调试脚本才用这个gui界面

若要进行压测试,使用非gui模,使用脚本:jmeter -n -t 脚本 -l -o 输出的路径(html报告路径),实际压测都是用这种方式
在这里插入图片描述

5.2、jmeter.properties(源的配置)

要看一些jmeter的配置的话可以到这个文件中jmeter.properties看
配置文件一旦修改,需要重启jmeter

5.3、bin

在这里插入图片描述

jmeter的jar包,启动脚本,配置文件和日志文件等

5.4、docs

jmeter的官方API文档,主要于二次开发
在这里插入图片描述

5.5、lib

该目录发生变更,jmeter必须重启才有效
lib/ext目录,存放的是第三方的组件和插件,包括二次扩展

在这里插入图片描述
在这里插入图片描述

5.6、extras

存放一些附件组件,主要是用于jmeter和ant的集成所需要的一下文件
在这里插入图片描述

5.7、printable_docs

存放的是jmeter的帮助文档,就是官网内容

6、jmeter的六大组件:

配置元件、定时器、前置处理器、后置处理器、断言、监听器(都可以添加到测试计划、线程组、逻辑控制器、取样器)

6.1组件的作用

1)配置元件

在这里插入图片描述

类似于项目的配置文件,初始化变量

主要:
①CSV 数据文件设置(参数化用到)
②计数器(做参数化要用到)
③HTTP信息头管理器(头信息里发送请求的类型content_type、前后端分离模式中传的是json,在信息头里指定)
④HTTP Cookie管理器
⑤HTTP请求默认值(有很多http取样器,ip一样,可以把它取出来,放到默认值里)
⑥JDBC Connection Configuration

2)前置处理器(Pre Processors)

在这里插入图片描述

在取样器请求之前执行一些操作。

测接口时:比如某个参数(密码用MD5)加密,发请求之前,将对应的参数(密码)进行加密,就用BeanShell 预处理程序。

3)定时器(Timer)

在这里插入图片描述

延缓发送请求的频率,把请求发送的频率降低,服务器也能进行处理,只是后面测试出来的tps不同,又是另外一回事,一般用来指定请求发送的延时策略,不建议使用。若服务器性能好,批量数据也能进行处理,jmeter的线程数是没有参考意义,不是说需要500并发,线程数就设置500,tps就500

若真的只关注并发数500,也是可以通过定时器进行延缓他的发送请求。
主要:固定定时器,同步定时器(集合点),秒杀和抢购场景使用。

4)后置处理器(Post Processors)

在这里插入图片描述

在取样器请求完成后执行一些操作,通常用于处理响应数据,从中提取需要的值。

比如A请求要作为b请求的入参,就需要用到关联,不管是正则还是jsonpath将数据提取到。

主要:

①正则表达式提取器
②调试后置处理程序
③jp@gc - JSON/YAML Path Extractor(返回的数据是json用)
④BeanShell 后置处理程序

5)断言

在这里插入图片描述

主要用于判断请求的结果是不是期望的业务结果。
http是200,业务不一定正确
判断业务是否正确,通过断言中的业务code+关键字段

主要:

响应断言、断言持续时间、BeanShell断言。

6) 监听器(Listener)

在这里插入图片描述

监听器可以在 JMeter 执行测试的过程中搜集相关的数据,并展示。

主要

jp@gc - Transactions per Second
jp@gc - Response Times Over Time
jp@gc - Active Threads Over Time.

监听器主要用来调试脚本,压测时需要将其禁用。
怎么监听jmeter的结果,比如tps和响应时间,用jmeter的可视化监控

7、jmeter的其他组件:

7.1、测试计划(Test Plan):性能测试被测的项目

7.2、线程

下面有线程组
在这里插入图片描述

①线程组怎么理解?

添加多个线程组

这里的线程组理解为性能测试不同的场景(单场景、混合场景、稳定性场景),每一个线程组代表一个单场景,线程组名字都可以进行改,比例可以有多个,混合场景可能有多个
在这里插入图片描述

主要:

①线程组(重要)
②jp@gc - Stepping Thread Group(重要)
③ setUp线程组
④ tearDown线程组)
⑤ 性能测试不同的场景(单场景、混合场景、稳定性场景)

3)逻辑控制器(Logic Controller)(重要)

吞吐量控制器,通过它来控制业务比例
主要

①事务控制器
②吞吐量控制器(控制业务模型)
③仅一次控制器
④ForEach控制器
只能添加到线程组下。

4)取样器(sampler)

① HTTP请求(90%以上都是http协议)
②jp@gc - Dummy Sampler
③调试取样器(调式用到)
④ BeanShell 取样器
⑤JDBC Request
⑥其他( java、tcp、websocket)

8、组件执行顺序:

8.1、各个组件是一个时:

①顺序

运行,需要加载配置,配置元件先执行。
 1)配置元件  
 2)前置处理器  
 3)定时器  
 4)取样器  
 5)后置处理器
 6)断言  
 7)监听器

②验证

**第一步:BeanShell 断言,就不需要发请求了,直接设置结果。
log.info打印内容,测试一下失败的信息
第二步:添加后置处理器,就用BeanShell
在这里插入图片描述

第三步:添加取样器就选beanshell
在这里插入图片描述

第四步:添加前置处理器beanshell
在这里插入图片描述

第五步:添加直接来一个固定定时器,为了效果更明显,设置10s
在这里插入图片描述

第六步:添加配置元件,常用的是csv
在这里插入图片描述

第七步:运行,看效果。**

执行顺序,可以先看日志,打印顺序看到
先执行的配置文件,打印bs前置时,停顿一下,等10s,表示定时器在取样器之前执行,定时器会延缓取样器器的发送频率,每次执行取样器时都先等10秒,取样器后是断言

在这里插入图片描述

还需要确定断言和监听器的顺序
后置和断言的顺序,加休眠,5000ms,即是5s
在这里插入图片描述

每一次都是后置后才断言

上面验证了执行的顺序
在这里插入图片描述

8.2、各个组件是两个:

在这里插入图片描述

8.3、关于前置后置的建议

不管是前置还是后置,需要放在对应的取样器下面,这个正则表达式是要提取http请求,就需要放在它的下面,否则就会出现问题

演示(此处需要涉及到foreach)

应用场景:把参数取到后循环的给后面请求用,就需要用到逻辑控制器foreach

第一步:添加后置处理器正则(需要提取东西))
有多个name,将name提取出来

在这里插入图片描述

在这里插入图片描述

第二步:再加一个调式取样器,再运行,看一下调式取样器是否能获取到
总共获取17个

在这里插入图片描述

第三步:添加foreach
结束循环字段,循环多少个,从1-17,将17个都获取到
在这里插入图片描述

第四步:再加一个取样器
为了方便看,名称这里显示变量,就直接可以在查看结果树看到
在这里插入图片描述

获取到17个值
在这里插入图片描述

9、作用域:

1)取样器(sampler)

不和其它元件相互作用,因此不存在作用域的问题

2)逻辑控制器(LogicController)

只对其子节点中的取样器和逻辑控制器作用

3)6大组件

可以在测试计划、线程组、事务控制器、取样器下添加
总结:如果是某个sampler 的子节点(放在取样器下面),则该元件对其父子节点起作用(这个父节点就是取样器)
如果其父节点不是sampler(比如是:测试计划、线程组、逻辑控制器、取样器),则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
和java变量作用域类似:局部没有,就用全局的
全部放局部,但是会耗费很多客户端资源
公共的:放全局,比如断言的内容相同
特有的:放局部,就是放对应的组件(线程组)或者取样器下面,比如取样器的断言内容不一样

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值