三分钟带你掌握Jmeter集合点和检查点(常用断言),赶快来领略一下吧

一、添加集合点

1、右击“添加-定时器-Synchronizing Timer”如下图所示

  注意集合点的位置,要放在集合的操作之前

jihedian1

2、设置集合点数和线程数

jihedian2

名词解释:

Number of Simulated Users to Group by:多少用户进行集合点的并发

3、调整集合点的位置,添加监听器,保存测试计划,点击运行

二、添加检查点(断言)

1、需要添加断言的请求,右击“添加-断言-响应断言”

jihedian3

2、输入要测试的模式,格式为${参数名}

jihedian4

3、对相应请求添加“断言结果”,右击“添加 -监听器-断言结果”

jihedian5

4、如需求是响应时间不超过150ms,这时候就可以添加断言持续时间来进行判断,右击“添加-断言-断言持续时间”

jihedian6

5、如果需要对请求的字节大小进行判断,则可以添加Size Assertion来判断,右击“添加-断言-Size Assertion”

jihedian7

6、运行,成功通过,断言结果就会显示一行,失败则会显示多行

一、用户参数方法

1、添加“前置处理器-用户参数”,如下图所示

jmetercanshu

2、添加参数信息,点击下方添加即可,“用户”即为变量值,勾选“每次迭代更新一次”

jmetercanshu2

3、HTTP请求中,将设置的参数名称以${参数名}格式写进去

或者直接在路径path下写

jmetercanshu3

4、如果添加“响应断言”,则格式也为${参数名},添加“断言结果”

jmetercanshu4

5、在线程组里设置线程数,好读取变量值

6、保存计划,运行即可

二、通过CSV Data提取(文件)

1、右击→添加→配置元件→CSV Data Set Config,如下图所示

2、准备数据文件,输入对应设置

jmetercanshu5

名词解释:

Filename:文件名,即参数化要引用的文件名,一般以.csv,.dat等结尾的文件。

File encoding:文件编码,可以不填,如果有乱码,可输入“utf-8”或“gbk”。默认是ANSI

Variable Names(comma-delimited):变量名(用逗号分割),多个变量可以引用同一个文件,用逗号分割。

Delimiter(use '\t' for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割。默认是逗号,不需修改

Allow quoted data?:双引号相关,如果参数中需要显示【,】或者【”】等,外层需要双引号显示,且这边修改为“true”

txt中这样书写:

则获取的变量值为【a"b】、【b,c】、【ccc】、【ddd】

Recycle on EOF?:结果后是否循环?默认是True,允许循环取值。如线程设置10个,循环10次,实际只取了前10个的值。改为false后,则取前100个的值。

Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效

Sharing Mode: 设置是否线程共享

  • All threads:所有线程,所有线程循环取值,线程1取第一行,线程二取下一行;
  • Current thread group:当前线程组,各个线程组分别循环取值;
  • Current thread:当前线程,该测试计划内的所有线程都取第一行。

3、txt文本参数书写格式

下面为一个变量名称时的书写方式:

变量值1

变量值2

变量值3

......

下面为两个变量名称时的书写方式:(逗号或者tab,默认是逗号)

变量值1,变量值a

变量值2,变量值b

变量值3,变量值c

       ……

      不需任何符号,换行即可。保存为csv或dat格式(可放入下面的函数对话框)。

4、剩下的步骤与一中的3、4、5、6一样。

三、函数助手对话框

1、选项→函数助手对话框,可以选择你需要使用的函数类型,假设选择函数“_Random”

jmetercanshu6

2、输入最小值为1 ,最大值为100,点击生成

jmetercanshu7

3、将生成的函数字符串复制粘贴到上文提到的3、4步骤中,进行变量替换,保存测试计划,点击运行即可。

也可以自己添加文件(dat文件),设置值,0表示读取第一列,1表示读取第二列。逗号隔开。然后生成,变成被引用的函数。然后按照最上面的3步骤去引用就行。

 以上三种方式都介绍完了,是不是so easy呀,赶紧去试试吧!

 

Badboy是一款免费的web自动化测试工具,一般与JMeter结合使用,下面主要介绍了Badboy的安装和基本功能的使用。

一、下载和安装

下载地址:http://www.badboy.com.au 下载后直接安装即可

二、使用-录制脚本

1、找到安装目录,打开badboy.exe文件,如下图所示:

  • 红色的点表示正在录制中,badboy默认打开即开始录制,可以手动修改,点击【Preferences-General】,取消“Enable Recording on Startup?”的勾选,点击确定即可。
  • Badboy录制分为两种模式,Request和Navigation,其中Request是默认模式,如需切换,点击下面的大写“N”即可。

两种模式的区分:

Request:

  • 优点:如果测试的网页模版修改了,不影响脚本的回放;可以支持badboy导出脚本到jmeter进行性能测试。
  • 缺点:request模式需要添加大量的断点来检查页面上的item。

Navigation:

  • 优点:会记录网站交互过程中browser中的元素的点击动作。
  • 缺点:无法使用navigation脚本进行性能测试,因为性能测试引擎运行时候不显示任何用户界面,所以无法执行navigation中模拟点击等动作。

如界面趋于稳定,还是使用N方式做回归测试比较方便。

2、输入需要访问的地址,点击后面的箭头即开始录制。

我录制的时候会弹出页面脚本报错,找了网上也没找到解决方法,然后将ie从8升级到11就自己好了。

3、录制结束之后,点击小红点就停止录制了。

badboy

三、使用-参数化

1、 如图所示,选择“Variables”,空白处右击,选择“Add Variables”

2、 输入参数名称“Enter a name for the variable”,然后在“Current Value”中填入参数数值,点击右侧【Add】

badboy3

3、选中需要参数化的字段,右击选择“Properties”,在Value下填写“${参数名称}”,如图所示:

badboy4

4、设置循环次数,选中步骤,右击选择“Properties”,选择第二种方式,根据我们设置的参数列表里面的参数个数来执行几次(第一种是直接设置循环几次),如图所示:

badboy6

四、使用-检查点(断言)

如图所示,选择“Checks”,选择需要添加断言的脚本处,选中要添加的断言类型,右击“Add to Script”。

badboy2

添加参数化的断言,选择“Variable Check”,选择已经添加的参数,点击“确定”即可

badboy5

断言参数化的另一种方式,选择有问号图标的断言,右击选择“Properties”,在“The following”下面填写设置的参数,格式:${参数名}

五、使用-断点

选中需要断点的地方,右击“Toggle Break Point”即可

六、使用-回放

1、选中计划右击点击【Clear Responses】,清除响应及其他反馈信息。

2、点击双箭头(play all)即可,暂停回放点击黑色小方块。

七、查看结果

点击【View-Report】,选择不同的报告模式,一般选择“Detail Report”

badboy7

 

 

扩展——JMeter自身录制脚本的功能

1、在工作台右击添加->非测试元件->HTTP代理服务器,如图所示

只要选择必要的目标控制器(你所创建的线程组)和Type(一般会选择httpClient4),点击保存即可

其他概念的解释,可以查看下面的文章:

http://blog.jianjiexuan.com/tools/jmeter/205.html

2、在浏览器中设置代理

3、在浏览器中访问需要测试的项目,代理录制会得到相应的路径。

利用jmeter自身的录制功能,虽然方便,但是会得到很多没有作用的路径,筛选比较麻烦。

另外,这个只能录制http,如果需要录制https,需在bin目录的system.properties中加载证书。

下面主要针对测试mysql的性能,如每秒往数据库插入1000条数据,查看数据库的性能

1、创建一个测试计划,如图所示,导入数据库驱动jar包

下载地址:http://www.mysql.com/downloads/connector/j

111

2、添加线程组,设置线程数、启动时间、循环次数

3、选中线程组,右击->配置元件->JDBC Connection Configuration,设置数据库信息,其他默认

如果Variable Name填写的话,对应的JDBC Request-Variable Name也要填写对应的。

jdbc2

数据库驱动类和URL格式:

Datebase Driver class Database URL
MySQL com.mysql.jdbc.Driver jdbc:mysql://host:port/{dbname}
PostgreSQL org.postgresql.Driver jdbc:postgresql:{dbname}
Oracle oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@//host:port/service OR

jdbc:oracle:thin:@(description=(address=(host={mc-name})

(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))
Ingres (2006) ingres.jdbc.IngresDriver jdbc:ingres://host:port/db[;attr=value]
MSSQL com.microsoft.sqlserver.jdbc.SQLServerDriver

或者

net.sourceforge.jtds.jdbc.Driver
jdbc:sqlserver://IP:port;databaseName=DBname

或者

jdbc:jtds:sqlserver://localhost:1433/"+"library"

4、选中线程组,右击->sampler->JDBC Request,选择更新模式,设置SQL语句及参数数据,写语句时注意前提:数据库已存在该表及字段

jdbc3

Query Type选择

Select Statement:查询语句,下面参数不需要填写

Update Statement:更新语句,下面参数不需要填写

Callable Statement:执行存储过程

Prepared Select Statement:预查询语句,在sql quety中使用“?”作为占位符,并传递参数值和参数类型

Prepared Update Statement:预更新语句,在sql quety中使用“?”作为占位符,并传递参数值和参数类型

Commit:提交

Rollback:回滚

AutoCommit(false):自动提交(否)

Query:输入需要执行的sql语句,末尾不需加";"

Parameter valus:参数值

Parameter types:参数类型

Variable names:保存sql语句返回结果的变量名

Result variable name:创建一个对象变量,保存所有返回的结果

5、查询操作可以添加断言,选中线程组,右击->断言->响应断言,点击添加,输入需要断言的内容(可忽略)

6、添加监听器:选中线程组,右击->监听器->察看结果树、图形结果以及断言结果

7、启动,查看运行结果,也可在命令端查看数据库数据变化及性能响应

查看数据库被插入了多少条数据:select count(*) from tablename;

♥Tips:sql语句的参数化

如果有多条sql语句,把整条sql语句当作参数,然后把多条sql语句放在csv文件中,然后在JDBC Request的Query中使用参数代替sql语句,参数书写的格式:${SQL_Statement}

这篇是安装完成后,进行一个简单的测试环境搭建,主要是方便大家了解大概流程与框架~

首先了解一下测试计划的基本概念♥

gainian1

测试计划是使用JMeter进行测试的起点,它是其他JMeter测试元件的容器。

名词解释:

  • 名称:为当前的测试计划取一个有意义的名字,以便区分于其他计划。
  • 注释对测试计划的注释。
  • 用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。

例:变量名=url,值=http://www.jianjiexuan.com,在需要http://www.jianjiex.com时直接用${url}即可。

  • Add directory or jar to classpath:向类路径即%JMETER-HOME%\lib中添加目录及jar包。

1、添加线程组,设置线程组参数

​线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。线程组是为模拟并发负载而设计。

jmeter1

名词解释:

  • 名称:为线程组起的名字,以便区分。
  • 线程数:虚拟用户数。设置发送请求的用户数目,即并发数。
  • Ramp-Up Period(in seconds)线程间的时间间隔,单位为s。即所有线程在多少时间内启动。如有8个线程,Ramp-Up = 4秒,那么线程的启动时间间隔为4/8=0.5秒(一秒启动2个线程),这样的好处是:一开始不会对服务器有太大的负载。如果Ramp-Up = 0秒,表示同时并发请求。
  • 循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。循环次数不能为0,会一直加压导致崩溃。
  • 调度器:可以设置启动时间和结束时间

2、选中线程组右击添加smapler取样器-HTTP请求
jmeter2  

配置请求参数,最基本是填写web服务器ip及端口号、协议以及路径

jmeter3

名词解释:

  • 名称:HTTP请求的名字,本属性用于标识一个取样器,建议使用一个有意义的名称。
  • 注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
  • 服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。
  • 端口号:目标服务器的端口号,默认值为80 。
  • 协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https,默认值为http 。
  • 方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
  • Content encoding:内容的编码方式,默认值为iso8859
  • 路径:目标URL路径(不包括服务器地址和端口)
  • 自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面。
  • Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
  • Use multipart/from-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/from-data方法发送,默认不选中。
  • 同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的名称1=值1)。
  • 同请求一起发送文件:在请求中发送文件,通常HTTP文件上传行为可以通过这种方式模拟。
  • 从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。(新版中则在Advanced中查看)
  • 用作监视器:此取样器被当成监视器,在Monitor Results Listener中可以直接看到基于该取样器的图形化统计信息。默认为不选中。
  • Save response as MD5 hash:选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销。

3、选中线程组右击添加监听器

添加:一般添加图形结果、聚合报告、用表格察看结果、察看结果树,结果可以保存,.jtl文件可以提供多种格式的编写。

我们可以在右侧点击“Configure”进行一些设置,如图所示,除了默认的,我们一般还选择“Save Field Name,Save Assertion Failure Message”

fenxi1

ps:如果需要保存详细的响应结果,需要选择“Save Response Data(xml)”,然后重新命名为xml格式,用浏览器打开就行

   聚合报告对应名词解释:jmeter4

jmeter中的响应时间都是以ms为单位

4、执行前保存测试计划

5、选择线程组,点击运行

♦Jmeter使用过程中其他注意事项

◊在真正生产环境下尽量不要使用消耗时间与内存的部分组件,如Lisener(监听器)要越少越好。

通常所有web测试都要支持Cookie,一般放在线程组一级,可添加配置元件→HTTP Cookie ManagerHTTP Cookie管理器)

◊为了符合实际情况,http请求中Advanced下面的从HTML文件获取所有内含的资源必须勾选(解析所有的嵌入资源)

♥一些快捷键的使用

〉停止(Ctrl+。):立即停止所有线程,有可能报错。

〉关闭(Ctrl+,):要求线程在当前工作完成后停止,这项操作不会中断任何采样器的工作。(建议使用)

〉关闭(非GUI):shutdown

〉停止(非GUI):stoptestnow

〉清理(Ctrl+e):清理测试结果

〉运行(Ctrl+r):运行测试计划