JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试。它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回预期的结果。
单节点JMeter在做某些场景的性能测试时,由于网络带宽的限制,很难将压力提高到指标需要的值,为了提高并发量,采用分布式部署方案,一个JMeter节点作为主控节点,另外多个JMeter节点作为测试节点,主控节点可将测试计划同步给测试节点的JMeter,多个测试节点同时向应用服务器发送请求,以达到大量并发的目的
首先,从官网下载jmeter ,地址如下:
https://jmeter.apache.org/download_jmeter.cgi
下载完成后,解压即可,无需安装。
如果没有安装jkd,需要安装jdk,请参考安装jdk的文档,这里不再赘述。
启动jmeter:
双击 bin\jmeter.bat即可。
JMeter的Perfmon插件提供了对服务器资源占用率的采集和监控,可将监控数据以图形化显示,也可将监控数据保存到文件中。可监控的指标为:CPU、内存、磁盘IO、网络IO等。
用例制作-脚本录制-新建测试计划
启动jmeter,在菜单中选择Template
在左侧菜单中选择HTTP(S)Test Script Recorder,如下图所示。
点击“Start”按钮。这样就启动了代理。
浏览器选择配置->选项,在选项窗口中点击“局域网设置”
在弹出框中的“代理服务器”部分,勾选为LAN使用服务器(这写设置不用于拨号或VPN连接)(X)如下图:
录制
接下来,我们要录制Relax登录首页的过程。
启动web系统,打开登录页。
输入用户名、密码,点击登录,进入首页。
需要录制的过程操作完成后,即可在jmeter上停止录制过程,点击stop按钮,如图:
执行测试
性能测试前,先设置线程参数,点击“Thread Group”,根据测试压力设置右侧的参数,比如线程数200,循环1次,如下图:
为了观察运行的结果,可添加一个Listener -> Summary Report。
点击运行按钮,选择Summary Report可观察测试的统计信息。如下图,可看到每一个请求的执行次数、平均执行时间、最小执行时间、最大执行时间、错误率、每秒执行次数、每秒接收数据量、每秒发送数据量、平均数据量等信息。
选择View Results Tree,可查看每个请求的详细信息,如下图:
窗口右侧可查看Sampler result、Request、Response data,分别是结果样例、请求数据、应答数据。
在测试过程中,某些请求信息不能够硬编码在脚本中,比如登录用户的名称和密码,此时可以从本地文件中读取,jmeter支持从CSV文件中读取数据并设置给用户变量。
本地创建文件,如account.dat,内容如下:
有两种方式可将本地文件的内容读取入变量:1.通过函数读取,2.通过CSV Data Set Config获取。
通过函数获取
jmeter提供了函数来读取CSV文件,函数名称为__CSVRead,jmeter提供了方法帮助,可辅助生成方法的调用脚本,点击菜单Option->Function helper Dialog(选项->方法帮助窗口),在方法名称中选择,表格中输入文件路径以及文件中的字段索引,比如获取第一个字段,则填0,第二个字段,则填1,依次类推。
点击Generate & Copy to clipboard,在Function syntax中显示了方法的调用表达式,同时,也会自动将调用表达式保存在剪切板中。
新增用户变量username和password。
name中填入 username,value中将剪切板中的函数调用表达式粘贴在表格中即可,如下:
通过CSV Data Set Config获取
新增CSV Data Set Config
填写文件信息、变量信息,入下图所示:
说明:
文件名:输入或选择需要读取的文件名称,文件格式为CSV
encoding编码:选择文件的正确编码。
变量名:变量列表,和文件中的变量一一对应,逗号分隔。
分隔符:CSV文件中的变量 分隔符。
在文件结束符循环:选择是,则读取到文件结束后循环读取。
在文件结束符停止线程:选择否,读到文件结束符时不停止线程。
共享模式:可选项有All Threads(全部线程)、Current thread group(当前线程组)、Current Thread(当前线程)、Edit(编辑)
下一步,就是将读取的用户名称和密码设置到请求中。
找到负责登录的请求,修改前如图所示:
修改请求语句,使用用户变量的数据,如下:
测试执行,验证是否已经将文件中的变量设置到请求中。
在大多数测试场景中,需要将应答的结果保存到变量中,或将变量保存到文件中。
要将应答保存在变量中,按照如下步骤:
首先要编写代码,代码功能是将传参保存在文件中,我们这里编写java的代码来写入文件。
创建AppendFile.java,内容如下:
package com.relax.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class AppendFile {
public static void appendFile(String fileName, String content) throws IOException{
FileWriter writer = null;
try {
writer = new FileWriter(fileName, false);
content = content + "\n";
writer.write(content);
} catch(IOException e){
e.printStackTrace();
}finally{
if (writer != null){
writer.close();
}
}
}
}
通过javac命令,将其编译成class文件。
如果测试计划中没有"HTTP Cookie 管理器",则需添加一个"HTTP Cookie 管理器"(用来存储cookie)。
在线程组上添加一个Sampler-->“HTTP 请求”(用来登录用的),添加一个Sampler-->“Debug Sampler”和监听器-->“察看结果树”,保存测试计划,关闭Jmeter。
修改jmeter目录下bin/jmeter.properties中的CookieManager.save.cookies=true,然后重新启动Jmeter。
运行测试计划,查看结果树,发现“Debug Sampler”节点中存在“COOKIE_”打头的变量,这个就是Jmeter自动存储的cookie
上面步骤产生cookie之后,整个测试计划周期内"HTTP Cookie 管理器"会自动帮我们保存这些cookie,当然如果想要获取某个cookie的值也可以使用${COOKIE_对应key}方式获取。
cookie的key默认以“COOKIE_”是Jmeter默认提供的,如果想要以别的方式开始,可以给bin/jmeter.properties中的CookieManager.name.prefix=赋值即可(如:CookieManager.name.prefix=test)
新建变量sessionid,如下,value可不设值。
session id是在登陆请求成功后,由服务端返回的,放置在Cookie中。
我们选择登录请求,在登录请求上增加后置处理器。
在其中编写代码,如下:
source("D:\\work\\ruijie\\document\\架构设计\\20180908-性能优化\\性能测试\\com\\relax\\test\\AppendFile.java");
String filename = "";
String sessionid = vars.get("COOKIE_sid");
Append.appendFile();
log.info("sessionid = " + sessionid);
以上就可将sessionid写入本地文件中。
有几种方式可将sessionid传递到不用的线程
一种方式:将sessionId获取出来以后,写入文件,另一个线程从文件中获取
一种方式:在同一个线程组内,先做登录,使用HTTP Cookie Manager保存session,在该线程组内继续录制下一测试场景,就可以和下一个场景共享sessionid了。
第一种方式详述:
在登录请求下,增加后置处理器BeanShell PostProcessor,代码参考上部。
在下一个场景的第一个请求,添加前置处理器,HTTP Cookie Manager,添加session名称,配置从文件中读取,即可。
第二种方式详述:
新建Template 测试计划。
录制登录操作,登录成功后,将脚本中将除登录请求外的请求删除。
在这个线程组下,再录制下一个场景,这样在同一个线程组内就可以共享会话。
添加Perfmon监控服务器性能
插件下载
下载地址https://jmeter-plugins.org/downloads/all/,下载plugins-manager.jar
把给文件放到apache-jmeter/lib/ext目录下
启动jmeter
1.点击选项-plugins Manager
在这里勾选监控内存我们使用的是:jp@gc - PerfMon Metrics Collectot,点击Apply Changes and Restart jmeter(或者双击运行/serverAgent/startAgent.bat )2种方法都可以用。
这样就添加完成了,打开jmeter-添加-监听器-@gc-perfMon Metrice Collector。
欢迎关注技术公众号:架构师成长营