jmeter使用分享

Jmeter使用介绍

  1. Jmeter安装启动

1.1     Jdk安装和环境变量配置

1.2     启动jmeter.bat或者直接运行安装目录bin下面的ApacheJMeter.jar

1.3     一个最简单的jmeter请求:添加一个线程组,一个http请求,一个查看结果树查看结果。填好http请求相关参数,直接运行就可查看结果。

  1. Jmeter基础元件

添加线程组后,右击线程组,可以看到jmeter的八大基础元件,如下所示:

  1. 控制器使用

3.1     if控制器

判断子取样器是否执行,${test1}==100 && ${test1}==99

3.2     循环控制器

控制其下的子节点运行次数,可以指定运行次数,也可以勾选永远,持续执行。

3.3     吞吐量控制器

控制其下子节点执行的次数或者百分比

3.4     仅一次控制器

线程组执行期间,该控制器的子节点取样器只运行一次。例如在登陆时,如果线程组循环时不清除cookie,那么把登陆请求放到该控制器下,除了线程启动第一次循环时会执行该请求,后续的循环不会再执行。

  1. Samper

4.1     http请求

常规模式的http请求,包括请求域名,方法,请求体参数,信息头字符格式等。

图中post请求的可以通过parameters或者body data来传值。

Parameter:参数可以直接写在url后面,如http://xxxx.xxxx/test?test = 123&test1 = 123, 也可以在parameter里面的表格中填写

Body data:请求附带请求体,请求体的格式需要在配置元件中的http信息头管理器中指定,如添加:Content-Type:application/json。当添加了这个信息头后,body,data里的参数就需要填写josn格式。

4.2     java请求

实际上是对jar包进行测试,具体步骤:

1) 将jmeter的lib\ext下的ApacheJMeter_core.jar和 ApacheJMeter_java.jar两个jar包导入目标工程的扩展类库中

2) 创建一个类Test继承 JavaSamplerClient,复写getDefaultParameters和runTest方法

getDefaultParameters:定义jmeter界面可以传入的参数

runTest:目标测试代码,需要测试的功能或者调用全部写在这里

public class Test extends AbstractJavaSamplerClient{

public Arguments getDefaultParameters() {

Arguments args = new Arguments();

args.addArgument("userName", "test ");

args.addArgument("password", "testing");

return args;

}

@Override

public void setupTest(JavaSamplerContext context) {

}

@Override

/**

* 性能测试时的线程运行体,执行的业务方法放在这里。

*/

public SampleResult runTest(JavaSamplerContext context) {

// 创建SampleResult对象,用于记录执行结果的状态,并返回

SampleResult sampleResult = new SampleResult();

// 获取JMeter中输入的用户参数

String userName = context.getParameter("userName");

String password = context.getParameter("password");

// 开始

sampleResult.sampleStart();

//此处是要执行的目标代码

// 暂停

// sampleResult.samplePause();

// 重启

// sampleResult.sampleResume();

// 结束

sampleResult.sampleEnd();

sampleResult.setSuccessful(accountResult.isSuccess());

// 返回

return sampleResult;

}

}

3) 导出工程jar包到jmeter目录lib\ext下,重启jmeter可以选择刚才导入的jar包,以及自己写的对应的方法,写入希望传入的参数就可以正常进行测试了:

4.3     ftp请求

主要提供文件的上传和下载功能

服务器名称或ip:远程服务器的域名或者ip

Remote File:需要上传到服务器或者从服务器下载到本地的文件路径和文件名

Local File: 本地需要上传到服务器或者从服务器下载到本地文件路径和文件名

Local File Contents: 选择get下载,put上传

4.4     jdbc request

jdbc主要提供对数据库的增删改查操作,需要配合配置元件里的JDBC Connection Configuration使用

配置好链接信息,添加jdbc request,Variable Name里填写上面在配置里填写变量名,query type里可以选select,update等不同的选项来支持不同的sql语句

如果语句太多,也可以使用下面的parameter values和parameter types来参数化,

parameter values:参数值

parameter types:参数类型

Result variable name:保存查询结果,线程组执行过程中可以随时通过vars.getObject(“result name”)去读取这个查询结果。

  1. Beanshell

常用的内置变量:

log: 写入log相关信息,log.info(“xxxxxxx”);

vars: 操作脚本中的变量,vars.get(String key)获取指定变量,vars.put(String key,String value), 保存修改变量值。

Prev: 调用SampleResult类相关方法:

prev.getContentType():获取完整的content-type信息

prev. getResponseDataAsString(). 获取前置请求的返回并且转化成字符串

5.1     BeanShell PreProcessor

前置处理器,在实际的请求发出前运行,可以预先设定一些参数的值或者对传入的参数做处理,请求时使用beanshell处理过的数值。

上图在编辑模块通过代码获取当前的unix时间戳,使用vars.put(“time”,time)设定变量,在之后即将运行的请求或者相关配置原件中可以通过${time}来动态获取即时的时间戳信息。

5.2     BeanShell PostProcessor

后置处理器,和前置相似。在请求发送后,对相应做处理。

除了对响应做处理,也可以读取脚本配置的变量来重新赋值或者跳出while等循环或者逻辑控制器。

  1. 配置元件

6.1     csv data set config:

FileName: csv文件目录,如果和脚本路径相同,只需要填文件名

File Encoding: 默认为ANSI,有中文的时候可以填utf-8

Varible Names: 定义文本文件中的参数名,参数之间逗号分隔.定义后可在脚本在以Shell变量的同样的方式引用

Delimiter(use “\t” for tab):一般情况下,分隔符为英文逗号

Allow Quoated data: 双引号相关

Recycle on EOF: 设置为True后,允许循环取值

Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行

Sharing Mode: 设置是否线程共享

6.2     http信息头管理器

主要支持一些复杂的信息头,左边填写名称,右边填写对应的值,值域里面支持变量动态获取

6.3     http cookie管理器

6.4     计数器

计数器可以设置一个初始值,每次递增的值,以及增长上限。

启动:初始值

递增:指定每次数值增加多少

最大值:递增的上限值

引用名称:在其他地方通过此处的名称来引用计数器,上图名称填的是test,如果在其他地方想要引用这个计数器可以通过${test}来获取值。

与每用户独立的跟踪计数器:不勾选的话,所有线程共享一个计数器,否则每个线程都独自维护一个计数器。

6.5     用户自定义变量

该配置元件可以事先定义一些变量。

如上所示,填写变量名称和变量值,使用时也时通过${test1}来引用。

6.6     Random Variable

随机变量:按照一定的规则随机生成的变量。

Variable name: 变量名称,可以通过${name}来引用。

Output format:输出格式,生成的变量值会按照该格式来组合成最终的值。上图填写的时139aa,那最终的输出时139aaxxxxxxxxxx。如果为空,则生成的变量就是最终值。

Minimum value:随机值的下限。

Maximum value:随机值的上限。

Per Thread(User): false时,所有线程共享变量。true,每个线程单独维护一个变量。

  1. Jmeter录制

Jmeter脚本除了在UI界面上编写或者直接编写xml文件之外,还可以通过一些工具去生成,下面介绍一个浏览器插件blazemeter录制脚本的流程。

在chrome的扩展程序里搜索并安装blazemeter这个插件,安装好后在chrome的右上角会出现启动按钮

点击启动程序,出现如下界面:

使用blazemeter录制一个jmeter脚本分一下步骤:

1) 启动程序后在最上方的输入框为脚本定义一个名称

2) 下方一排有6个按钮,从左到右依次为,开始录制,停止录制,中止录制,编写录制脚本,导出为.jmx脚本,重置所有选项。

3) 点击开始录制按钮后,这时可以在浏览器上做访问操作,工具图标上会记录操作浏览器的动作次数

4) 浏览器访问结束,点击停止录制。

5) 如果需要编辑可以点击编写录制修改相关参数,最后点击导出为可以被jmeter识别的.jmx文件,直接用jmeter打开,运行调试。

  1. 监听器

Jmeter监听器元件里提供了许多结果检测功能:

8.1     Jmeter自带监听器:

1) 查看结果树:可以详细的查看请求的参数,返回等功能,大量压测的话建议勾选上只查看错误请求的功能,以免界面死掉。

2) 聚合报告:对请求数,响应时间,吞吐量,数据流量做汇总。比较常用的功能

Sample:请求总数

Average:平均响应时间

Median:一半的请求响应时间小于该时间

90% Line : 90%的请求响应时间小于该时间

Min:最小响应时间

Max:最大响应时间

Error %:出错请求占请求总数的百分比

Throughput:吞吐量,服务器每秒处理的请求数

KB/sec:每秒从服务器接收的数据量

8.2     Jmeter插件

8.2.1       jmeter自带的绘图结果不怎么好看,并且jmeter本身并不能监听服务器的内存,cpu等硬件指标,所以利用JMeterPlugins可以辅助生成一些简单明了的图形结果。下面时操作步骤:

1) 下载JMeterPlugins相关jar包放到jmeter安装路径下的lib\ext下面,重启jemter

2) 为线程组添加监听器,如果jar包生效,就发现菜单中多了一些[email protected]开头的新的监听器。

3) 新的监听器监听服务器需要部署agent到目标机器上,下载ServerAgent到目标服务器上,运行bat启动文件,如下图所示就启动成功了。此时运行压测脚本就可以看到监听器开始工作。

4) 常用监听器介绍:

Transactions per Second:每秒处理的事物数

Hits per Second:每秒点击率

PerfMon Metrics Collector:性能表现指标收集,该图表需要手动添加目标服务器的ip和端口(对应之前启动agent的端口),选择需要收集的指标,cpu,io,内存等。该监听器中,所有可监听的机器ip和想要的性能指标都可以通过在监听器界面上通过下拉框来选择(红线部分所示)。

Active Threads Over Time:活动用户数量,脚本执行期间,正在运行的线程数。

8.2.2       除了通过jmeter去监听指标外,也可以通过nmon等工具直接在服务器上收集数据。

  1. 分布式部署测试

由于单台机器所能开启的线程数受机器本身的硬件相关配置限制,当有高并发的需求时可以开启分布式部署,将压力分布到到多执行节点上,一台master server负责收集各个节点的运行结果并进行汇总。

下面是分布式部署流程:

9.1     节点机器配置:

安装jmeter并且配置环境变量,JMETER_HOME=jmeter安装路径。

打开jmeter bin目录下的jmeter.properties文件,修改如下参数值:

server.rmi.localport=1099

server_port=1099

命令行起启动bin目录下jmeter-server.bat脚本,效果如下所示:

后续在server上远程启动该节点的信息都会显示在此处。

9.2     Server配置:

打开jmeter bin目录下的jmeter.properties文件,修改其中的值,

remote_hosts=172.17.3.11:1099(对应各个节点机器的ip和端口配置)

9.3     在server上打开jmeter客户端,选择远程启动的方式,

此时可以看到之前配置的远程服务器已经在可选的列表中,可以有选择的启动某几台远程服务器,或者全部启动,此时在主控server的jmeter界面上可以看到所以远程服务器的运行情况汇总。

10.  线程组

线程属性配置

线程数:用来发送请求的线程数

Ramp-Up Period(in seconds): 指定的线程数在多少时间内完成启动,如果线程组是多次循环的,该参数只对首次线程启动的时候起作用,第二次循环开始线程运行不在受此参数影响。

循环次数:勾选永远会一直跑,填写次数用来设定单个线程的循环次数

调度器:可以让脚本在一个指定的时间段内运行

11.Jmeter和jenkins集成

  11.1   Jmeter命令行运行

在jenkins中运行jmeter脚本需要用到jmeter的nonGUI模式,相关参数如下:

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-l 日志文件 -> 记录结果的文件

-r 远程执行 -> 启动远程服务

-H 代理主机 -> 设置 JMeter 使用的代理主机

-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

       使用示例: jmeter -n -t testplan.jmx -l test.jtl。生成的jtl文件可以在jmeter的聚合报告或者查看结果书界面直接打开查看,如下所示。


 
11.2   Jmeter,jenkens,ant持续集成。
写好的jmeter脚本可以结合ant,配置到Jenkins持续集成。基本思路是Jenkins构建后执行ant命令,通过ant去调用jmeter脚本,而后把生成的jtl报告转化成可视化的html报告输出:
1) 下载ant:http://ant.apache.org/bindownload.cgi,解压到本地
2) 将jmeter extras目录下的ant-jmeter-1.1.1.jar文件复制到ant的lib目录下
3) 修改jmeter bin目录下的jmeter.properties文件选项的值:


上图中值原先都是被注释的,使用时去掉前面的注释符号“
第一条红线处,反注释后修改其值为xml,意思时输出文件为xml。
下面一部分是要report中想要保存的结果选项,反注释后修改false为true。
4) 复制jmeter extras目录下的build.xml,collapse.png,expand.png,jmeter-results-detail-report.xsl,jmeter-results-report.xsl文件到jmeter bin目录下。
5) 修改build.xml值如下图所示,如果没有就新增一条:



6) 配置ant环境变量:
ANT_HOME = ant安装路径;
CLASSPATH = %ANT_HOME%\lib;
PATH =  %ANT_HOME%\bin;
 
7) 打开一个cmd命令,切换到jmeter bin下面运行命令:ant,出现如下界面则运行成功:


8) 在Jenkins界面新建 一个项目或者打开一个已经存在的项目,打开配置界面
9) 点击增加构建步骤如下图所示:


 
在出来的界面中填写ant执行命令:


保存项目,开始构建,成功后可以查看HTML报告。


在Jenkins的项目配置里,选择增加构建后操作步骤:


在下拉列表中也可以选择一些其他控件对生成的报告作解析并且输出到Jenkins界面上。
时间: 2024-08-24 01:57:37

jmeter使用分享的相关文章

Jmeter系列培训(1)--开山篇

?       一直以来,我们不断分享,有的人喜欢,也有的人不喜欢,这都没什么,喜欢的点个赞,留个言,不喜欢的就不看好了,今天我们继续,关于jmeter我们分享了很多工作遇到的问题的解决方案,但是很多朋友想听个系列,刚好我们自己也在做,总共5课,今天带来第一课,纯属个人观点,可能有不正确的,自己辨别,看课件还是看视频自己选择: 视频地址: https://v.qq.com/x/page/p0517phv1un.html 视频ppt课件: 好了, 本次到此, 坚持的是分享,搬运的是知识,图的是大家

Fiddler录制jmeter脚本,干货分享

?     我们知道以前jmeter的脚本来源有三个,手动书写.badboy录制.自带的录制功能(jmeter3.0该功能还比较好),目前我们又多了一个fiddler生成,自上次分享出来fiddler导出jmx格式V4.0版本对外公开后,收到一些反馈,我们利用工作之余时间继续优化,现在一个比较稳定的版本出炉,分享给大伙,我们一起来看看,选择哪一个,大家根据自己的情况来,工具是死的,我们需灵活运用,适合自己的才是最好的,详细的操作,视频中介绍. 视频地址:http://v.qq.com/x/pag

JMeter中BeanShell Sampler调试分享

BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.put("result2",result); 通过查看结果树,BeanShell脚本报错 通过有道在线翻译,意思是方法调用错误 那是哪个方法调用错误呢? 通过异常发现,Error in method invocation: Method put( java.lang.String, bool

jmeter性能测试—登录百度进行搜索(图解)(二)

6. 继续,我们点击了登录按钮,百度为了防止csrf攻击,会给我们一个token(这个token在我们提交密码时一起提交过去),我们要在jmeter中再新建一个http请求,来获取这个token,get方法.相应参数如图: 我们仍旧需要一个正则表达式来获取这个token,注意这个token并没有放在返回消息的http头中,而是在响应消息中的js代码中,故firefox中我们无法看到,这里我用的是burp suite这个工具(具体使用方法参见:http://www.yeetrack.com/?p=

那些年,追寻JMeter的足迹,免费送……

?我们测试技术部武汉团队自16年引入jmeter以来,利用jmeter做了很多事情.首先运用jmeter进行接口测试,后续实现jmeter自动化冒烟测试,顺带也实现了线上环境的巡检,节省了大量人力.jmeter在项目的推广中也遇到过很多问题,例如:自动化冒烟测试可靠性差,脚本移植性差等.由于jmeter可以快速实现大量接口脚本,但是脚本的可读性可维护性就很差,因此我们制定一些规范.另外,我们也做了一些其他的尝试,直接使用自动化测试脚本对性能问题进行初步排查:对脚本进行微调后进行性能压力测试:当然

转载:一步一步和我学Apache JMeter

声明:非原创,在一个技术群里分享到的文件,在这里copy一下,以便长久用. 一.       Apache JMeter介绍 1.  Apache JMeter是什么? Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域.最拉的版本是2.2,大家可以到http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

Jmeter常用功能详解

[Test plan(测试计划)界面]                                                      [线程组界面] 右键点击 测试计划--->添加--->Threads(users)--->线程组,就可以成功添加一个线程组了. Jmeter中最重要的就是线程组了,线程组就相当于用户活动,一个线程组就相当于有一个用户活动,添加多个线程组就相当于模拟多个用户活动对服务器进行测试. [循环控制器界面] 右键点击线程组--->添加---->

zhuan:Jmeter基础之---jmeter基础概念

JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: (1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为. (2)用户运行器:通常是一个脚本运行引擎,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为. (3)资源生成器:用于生成测试过程中服务器.负载机的资源数据. (4)报表生成器:根据测试中霍地的数据生

基于Jmeter和Jenkins搭建性能测试框架

搭建这个性能测试框架是希望能够让每个人(开发人员.测试人员)都能快速的进行性能测试,而不需要关注性能测试环境搭建过程.因为,往往配置一个性能环境可能需要很长的时间. 1.性能测试流程 该性能测试框架工作的流程主要有:触发测试–>部署测试脚本–>部署被测系统–>Jmeter打压–>被测系统日志分析,5个阶段. 体现在Jenkins上,就是下面这个jenkins 的MultiJob Project--Performance-test-jobs: 注意:在选择Performance-te