Jmeter 一些基本操作

为什么要用Jmeter

因为开源 不收费 一般的测试可以覆盖 现成的例子有很多

Jmeter 咋用

1 安装java
无论是在Mac Linux 还是windows 上安装java 网上都有很多现成的教程 其实并不复杂 ,关键是一定要把环境变量配置正确
2 下载 Jmeter
   https://jmeter.apache.org/download_jmeter.cgi
   Linux用户下载 .tgz格式 Mac 和 windows用户下载 .zip格式(Jmeter是夸平台的 )
3 运行 Jmeter
  测试接口稳定性,向一个接口内发送请求
  常用的两种请求: Post和Get Post和Get需要的参数 要了解清楚
4 常用的设置 如下图
这里写图片描述

5 设置断言
如何知道 我们发送的请求是不是返回了正常的数值 这需要设置断言 比如响应代码必须是200才作数.
JMeter中有一个元件就叫做响应断言.这个就可以加在HTTP请求的后面,用来判断结果是否正确.
这里写图片描述
在这里我只增加了一个最简单的通过响应代码来判断请求是否正确.
这里写图片描述

6 设置监听结果
为了我们能查看到请求的结果,我们需要再添加监听器.
在这里我们增加三个结果监听器:察看结果树 图形结果以及聚合报告
查看结果树可以查看到每一次请求的具体情况,包括了请求参数,结果反馈,请求时间等等.
图形结果 可以以图形的方式展现请求的中和结果.
聚合报告会展示本次测试计划所有的请求的一个聚合的结果.
这里写图片描述
这几个结果监听器都不需要什么设置.增加后,即可再执行一次测试计划.里面就会有结果了.
我们先来看查看结果树.
这里写图片描述

它显示了这次请求的所有信息.比如开始时间,线程名字,完成用时,请求大小,反馈大小,反馈代码,采样次数,错误信息,反馈头信息,反馈体等等.
通过这个列表,我们就能很清楚的知道所有请求的大概情况.
然后就是图形结果

这里写图片描述

从这个图上就能很清楚的看出整个请求和响应的趋势.
最后就是聚合报告.
这里写图片描述
它用表格的形式展示了本次测试的总体情况.
这里写图片描述

在Linux上运行Jmeter

无论是Mac还是windows 都不能最大限度的进行压力测试 ,毕竟笔记本或者台式机的性能 都是有限的,在Linux服务器上运行 既不占用 自己的资源 还能一直运行 多开心
但是 考虑到在linux环境下直接手写.jmx配置文件比较繁琐,一般的做法是:
1. 在windows图形界面下制作好脚本,调试通。
2. 测试计划另存为**.jmx,再导入到linux服务器上。
3. linux服务器上执行压测脚本 ./jmeter -n -t .jmx -l .jtl ,跑完压测脚本后,会生产**.jtl文件
5. 把**.jtl文件导入装有jmeter的windows机器。
6.在windows启动jmeter
7. 新建测试计划–》线程组–》结果树/聚合报告/图形结果
在结果树/聚合报告/图形结果 界面,分别导入第一步的**.jtl,生产各类报告。
PS:建议使用相同版本jdk、相同版本jmeter,以防出现莫名其妙的问题
命令参数说明:
· -h 帮助 -> 打印出有用的信息并退出
· -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
· -t 测试文件 -> 要运行的 JMeter 测试脚本文件 (**.jmx文件)
· -l 日志文件 -> 记录结果的文件 (之后生成报告用的数据都保存在**.jtl中)
· -r 远程执行 -> 启动远程服务
· -H 代理主机 -> 设置 JMeter 使用的代理主机
· -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

举个例子:
1 先在windows系统中,使用jmeter创建测试计划
2 保存为Http_Baidu.jmx;
3在/opt/apache-jmeter-2.13目录下创建plans文件夹用于存放测试计划:

  mkdir /opt/apache-jmeter-2.13/plans  

4 复制Http_Baidu.jmx到/opt/apache-jmeter-2.13/plans目录下;
5 如需要修改测试计划,可在Linux上以文本形式打开,编辑诸如线程数,迭代次数等等参数;
6 在JMeter的bin目录下运行命令开始测试:

./jmeter -n -t ../plans/Http_Baidu.jmx -l Http_Baidu_Rst.jtl

7 出现end of run表示测试计划已经运行完毕:
这里写图片描述
8 拷贝Http_Baidu_Rst.jtl到windows系统下;
9 运行JMeter的bin目录下jmeter.bat,打开JMeter图形窗口,并新建或打开一个测试计划,为该计划添加“结果查看树”和“聚合报告”。
10 通过浏览选中windows系统中的Http_Baidu_Rst.jtl,即可看到测试结果

Linux分布式运行JMeter

先来理解下分布式测试原理,看下图:

这里写图片描述
1、Jmeter分布式测试时,选择其中一台作为调度机(master/Controller),其它机器做为执行机(slave/Agent)。

2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,应该是通过命令行模式执行的。

3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

注意:

(1)每一台jmeter远程服务器(slave机器)都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划;

(2)采用JMeter远程模式并不会比独立运行相同数目的非GUI测试更耗费资源。但是,如果使用大量的JMeter远程服务器,可能会导致客户端过载,或者网络连接发生拥塞;

(3)默认情况下,master机器是不执行参与生成并发数据的;

(4)调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

首先,在其他linux上安装jdk和jmeter(jdk和jmeter的版本以及安装路径要保持一致,不然可能会出错,无法成功执行)

确保环境搭建完成以后,进入jmeter的安装目录,进入bin下,启动jmeter-server(如果没有可执行权限,要先添加权限,root用户没有权限限制)
所有的slave机器都要启动jmeter-server,默认端口是1099,可以通过修改jmeter.properties文件进行修改。

回到master机器上,修改jmeter.properties文件中的remote_hosts,将slave机器的ip地址添加上去,多个ip之间用逗号隔开。其中127.0.0.1表示master机器本身,为了独立开master,可以将其去掉,这样就不会在master上执行测试。

然后在master机器上执行下面的命令:

jmeter -n -t test.jmx -R ip1,ip2,ip3 -l testReport.jtl
其中 -R 指定远程连接的slave机器的ip地址,多个ip之间用逗号隔开。

至此,分布式jmeter测试也完成了。

下面列举出一些我在这个过程中出现的一些错误,以及后来的解决办法。

问题1:

在slava机器上执行jmeter-server的时候,会出现以下的问题:(以下为本人遇到的问题)

1、出现 XII DISPLAY 这样的错误,可以先执行下面命令:

echo $DISPLAY
如果内容为空(我就是内容为空),那么,就继续执行下面的命令:

DISPLAY=:0
DISPLAY=localhost:0.0
上面两个都可以

问题2:

jmeter-server启动失败。通常有以下两个错误:

1、Unable to get local host IP address
2、xxx is a loopback address

一般上面的两个问题,都是由host文件引起的,我们需要修改host文件,可以执行下面的命令:
vi /etc/hosts
127.0.0.1替换成本机ip地址的。

问题3:

jmeter-server启动成功,但是在master上无法执行分布式测试。

我这边抛出的错误是:”No route to host“

这个问题是由防火墙引起的,也就是说,slave上的防火墙没有关闭,此时,我们需要到slave上关掉防火墙。之后就可以正常运行了。关闭防火墙的方法多种,我这里特别记录下我自己红帽子7虚拟机的命令:

查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld

猜你喜欢

转载自blog.csdn.net/weixin_39757068/article/details/81562564