当前位置: 首页 > 后端技术 > Java

JMeter

时间:2023-04-01 20:35:10 Java

@TOC压测工具笔记(二)主流工具:https://blog.csdn.net/weixin_...)压测工具笔记(二)JMeter:https://blog.csdn.net/weixin_...JMeter是Apache下的顶级项目,强大的压力测试工具JMeter是一款纯java编写的开源软件,用于测试变量行为和性能。一开始是为了测试web应用,现在扩展到其他测试.org/down...),下载安装包或者解压包(推荐压缩包)低版本注意:5.4版本支持JDK1.8及更高版本apache-jmeter-5.4.1.tgzapache-jmeter-5.4。1.zip安装/解压及传送目录文件说明bin:可执行脚本文件docs:JMeter提供的API文档extras:附加文件lib:JMeter自身依赖的jar包licenses:JMeter依赖的jar包的licenseprintable_docs:JMeter的简介和用户手册配置环境变量也可以不配置,只是为了方便脚本使用电脑桌面-->右键选择“属性”-->高级系统设置-->高级-->环境变量创建一个新系统变量JMETER_HOME=D:\Tools\apache-jmeter-5.4.1(安装路径)新系统变量CLASS_PATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;(固定路径在CLASS_PATH)配置系统变量PATH,加上%JMETER_HOME%\bincmdconsolecommandjmeter-v启动测试环境cmdconsolecommandjmeter可以直接启动安装目录下的启动程序(推荐桌面快捷方式或jmeter脚本启动,默认是GUI模式)并且启动成功从这个提示中,我们至少可以知道两条信息:没有使用GUI模式进行测试,而是使用CLI模式(命令行,服务器一般不需要GUI)。运行参数可以改,但是不建议修改setHEAP=-Xms1g-Xmx1g-XX:MaxMetaspaceSize=256mOptions->ChooseLanguage->Chinese(Simplified)切换到简体中文HTTP接口测试很多应用/服务/JMeter可以支持测试的协议。目前主要介绍HTTP请求接口测试的主要流程:创建测试Plan,在Plan中创建线程组,在线程组中创建线程HTTP请求,测试测试计划(初始化会创建一个)右键线程组TestPlan->Add->Thread(User)->Threadgroup配置说明:线程数填10,线程数填5ramp-uptime,循环次数填1,表示5秒内执行一次,向HTTP请求发送10个请求,右键ThreadGroup,添加->采样器->HTTP请求,填写请求配置:方式选择GET,路径为url的请求路径。GET请求的参数可以直接带在路径上,也可以写入下面的参数,点击“添加”按钮添加请求参数。**配置请求头:**添加->配置组件->HTTP信息头管理器测试右键HTTP请求,添加->监听器->查看结果树右键HTTP请求,添加->监听器->填写聚合报告以上配置,选择需要的监听器,点击绿色小三角进行测试,测试完成后查看监听器,就会得到我们想要的结果。监听函数:测试报告报告说明:样本:请求数,计算公式为线程数*循环数。如果永远检查线程组配置,那么就是停止测试时实际发送的平均请求数:平均响应时间,单位毫秒。比如这里的平均响应时间是38millisecondsmedian:响应时间的中位数,单位是毫秒。90%百分位数:90%的响应时间小于此值,以毫秒为单位。这里90%的响应时间小于22毫秒95%percentile:意思类似90%99%percentile:意思类似90%最小值:本轮测试的最小响应时间,单位毫秒。最大值:本轮测试的最大响应时间,单位为毫秒。异常百分比:本轮测试中异常请求所占的比例。吞吐量:可以理解为QPS,就是我们测试的接口处理请求的能力。例如,这里是平均每秒2.2个请求。ReceiveKB/Sec:响应数据接收速率SendKB/Sec:请求数据传输速率,刚才只是5秒10个请求。通用接口没有问题。当我们把线程数扩大一百倍到1000时,结果不一定一样。清空数据重测:先点击界面上方的一个齿轮和两个扫帚的按钮清空结果树和聚合报表,然后点击绿色的开始按钮重测,会发现当并发增加时,有会在一些请求中发生异常。然后切换到聚合报表,你会发现原来平均响应时间只有30多毫秒,直接增加到5秒多,异常率也出现了。这个时候我们就需要根据一些报错信息做一些调优,可能是系统层面的,也可能是jvm层面的,也有可能是代码本身的问题。这不是本文要讲的内容,这里就不讲了。JMeter高级自定义变量和postman一样,我们也可以在jmeter中创建测试变量,右击ThreadGroup,Add->ConfigurationComponents->User-definedvariables也可以在testplan或者HTTPrequest下创建,这works域是整个测试计划或HTTP请求。然后选择用户自定义变量,点击右边的Add按钮,添加host和port两个变量:JMeter中使用的变量都是通过${}引用的,比如引用host变量,就是${host},然后我们选择HTTP请求,把IP地址和端口改成引用变量的形式JMeter命令我们的服务器基本上是Linux系统,我们的服务器应该不会安装GUI操作界面,因为它不仅对运行服务,也会消耗大量的cpu和内存资源,还可能导致服务器不稳定。这也是JMeter建议我们不要使用GUI来测试的原因。既然如此,为什么JMeter要提供GUI界面呢?回头看看JMeter的启动控制台,有这么一行信息:jmeter-n-t[jmx文件]-l[结果文件]-e-o[web报告文件夹路径]这里我们重点关注一个参数,是-t,后面是jmx文件。这个文件就是上面保存的jmx文件。保存了JMeter压测所需的线程组、HTTP请求等配置参数。打开可以看到其实是一个xml格式的文件,里面包含了各种参数。如果没有GUI界面,用户手工编写这样的配置文件会很麻烦。jmeter的完整参数可以通过jmeter-?查看。这里只介绍几个常用的参数:-n:非GUI模式,其实就是命令行的模式-t:后面是测试文件(jmx文件)-l:后面是日志文件,输出测试处理到日志文件-e:测试结束后生成报告-o:测试报告存放目录,必须为空index.html,打开,可以看到非常漂亮的图形化报告,可以展示给你的老板。jmeter-n-t"D:\Tools\apache-jmeter-5.4.1\bin\http\TestPlan.jmx"-l"D:\Tools\apache-jmeter-5.4.1\bin\http\TestPlan.log"-e-oE:\Game\jemeter_result分布式测试以上是在一台机器上运行,那么就会出现这样的问题:当你设置线程数为10时,在一个4上执行带有核心cpu的机器。当然,这台机器模拟10个线程是没有问题的,但是如果你把线程数增加到10000个,表面上这台机器也是想给你模拟10000个线程,但是它的核心数只有4个该地区。实际上,操作系统是在不停地切换线程来模拟底层的10000个线程。切换线程需要时间,发送请求也需要时间。这样,测试机的cpu使用率就会飙升到100%。此外,它还可以让你得到一个不准确甚至错误的数据,因为你的机器实际上不能在5秒内发送这10,000个请求。这时候我们就需要使用多台机器同时向接口机发送请求,这就是分布式测试。先说总的原则。我们准备多台机器,其中一台作为master机器,其余作为slave机器。master机用于发送命令,slave机执行命令。示意图如下:这些机器的要求如下:关闭防火墙或者开启响应的端口在同一个子网。JMeter可以访问被测试的接口。JMeter的版本是一样的,JDK的版本也是一样的。否则,可能会发生错误。您必须为RMI设置SSL或关闭它才能满足上述条件。首先在各个slave的jmeter-server的bin目录下执行,然后在master机器上开发JMeter的bin/jmeter.properties文件,找到remote_hosts=127.0.0.1这一行,改成slave的内网地址,分开地址用英文逗号,然后打开主控机JMeter就可以像单机一样测试了。注意:在关闭之前,我们需要保存我们设置的测试计划。问题:保存测试脚本时,只保存了Testplan下的部分节点,导致生成的测试脚本只有“testplan”下的部分元素,不包括运行测试所需的元素。“测试计划”元素。解决方法:保存测试脚本时,通过以下两种方式保存整个测试计划1、点击文件菜单中的“保存测试计划”或“将测试计划另存为”选项;2、鼠标选中测试计划节点,直接点击工具栏上的“保存测试计划”按钮专有名词解释:专有名词描述的是TestPlan测试计划,相当于一个项目。在测试计划中定义了需要测试什么以及如何测试它。ThreadGroup线程组相当于一个模拟的请求数。一个线程相当于一个用户请求查看结果树,在发送请求时监听每个请求的状态聚合报告,汇总一个测试的数据用户体验:使用后的第一感觉是:工具强大,但是GUI真的很低。甚至不适应。相对来说,Windows风格的界面是最友好的。选项-->-外观->Windows参考:https://www.cnblogs.com/spare...

最新推荐
猜你喜欢