jmeter工具的常用组件与初阶使用

Jmeter 同时被 2 个专栏收录
4 篇文章 0 订阅
4 篇文章 0 订阅

引言

研发经常有疑问:后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?

回答这个问题,我们直接对比接口测试和app端测试活动的内容

 

通过对比可,两个测试活动中相同的部分有功能测试、边界分析测试和性能测试。其它部分由于各自特性或关注点不同需要进行特殊的测试

关于边界分析测试

前端的输入输出很多是提供固的值让用户选择,测试的边界范围非常有限但接口测试不存在这方面的限制,可以覆盖的范围更广,同样出现问题的概率也更高。

(接口层面的强校验主要是为了提高软件的健壮性、兼容性、安全性)

综述:

1、接口测试和app测试有部分重复的内容,主要集中在业务功能测试方面。

2、接口测试关注于服务器逻辑验证,App测试关注于页面展示逻辑及交互验证

一、环境准备

Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html

Jmeter3.2或以上:http://jmeter.apache.org/download_jmeter.cgi

  BadBoy下载官网:http://www.badboy.com.au/

 

二、常用元件介绍

一)配置元件

1、thread group(线程组)

一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。

 

1)名称:最好有业务意义

2)取样器错误后执行的动作:也就是某一请求出错后的异常处理

继续:如果取样器里的执行出现错误失败的时候,请求不会停止,继续执行。

Start Next Thread Loop : 忽略错误,线程当前循环错误,执行下一个循环。

停止线程 只限当前线程停止,不影响其他线程执行

停止测试 当前执行的线程全部执行完毕后结束

Stop Test Now: 立刻停止

3)线程组属性

线程数:运行的行程数设置,1个线程对应1个模拟用户。

Ramp-up Period (in Seconds):所有线程在多长时间内开始运行。默认值是1。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每秒启动N/T个线程。

循环次数:就是决定一个线程要跑多少次测试。

4)调度器配置

启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时也会覆盖它。

结束时间:测试计划什么时候结束,持续时间会覆盖它。

持续时间(秒):测试计划持续多长时间,会覆盖结束时间。

启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。

2、HTTP信息头管理器

用于管理请求头内容

 

常用:

User-Agent:浏览器信息设置

Content-Type:application/json 定义json格式的http请求

3、HTTP请求默认值

当脚本中存在多个HTTP请求使用相同的服务器,端口等值时,设置默认值方便统一管理。

 

1)Protocol协议,HTTP or HTTPS

2)Server:域名或IP

3)Port:端口号

注意:

1)如果某个单独的HTTP请求中设置的值与请求默认值中设置的值不一致,Jmeter会选择使用HTTP请求的设置。

2)注意HTTP请求默认值作用范围,只在同一个线程组内有效,如果有多个线程组的话, 需要分别设置。

3)所有值都是可以为空的,意义与HTTP请求中设置是一样的。

4、HTTP Cookie管理器

存储和管理Cookie

 

接受到的Cookie的值能被存储到JMeter 线程变量中(2.3.2版本后的JMeter不自动做这个事情)要把Cookies保存到线程变量中,要定义属性"CookieManager.save.cookies=true"。

注意:

一个测试计划内最好只有一个cookie manager。并且,一个manager里的 cookie 并不能被其它manager所引用。

5、用户定义的变量

可实现参数化的配置,通常用户定义的变量一般作为全局变量使用

 

引用已定义的变量:${变量名},比如: ${name}

如果变量未定义的话,引用变量会直接返回表达式

注意:如果在其他地方定义了一个同样名称的变量,该变量的值会跟着更新。

6、CSV Data Set Config

从文件中读取数据,并将它们分割存储到变量中,适合处理多变量

 

 

属性

描述

备注

Filename

CSV 文件名称

如果不带路径的话,jmeter会在/bin目录下查找

File encoding

文件编码

当文件中有中文,指定编码可以避免乱码

Variable Names(comma-delimited)

变量名

默认使用逗号分割符

Ignore first line

是否忽略csv文件第一行
False: 不忽略(默认)
True: 忽略
编辑:手动写一个条件,注意结果值必须是true 或 false

第一行可以用来写字段名了。
注意:更早期的版本(比如2.13)是没有这个选项的,意味着csv第一行开始就必须是正式内容了

Delimiter(use ‘\t’ for tab)

csv文件内容分割符,默认是逗号

Csv默认使用逗号分割,一般不需要换其他的吧(虽然是可以的)

Allow quoted data?

是否允许双引号?

如果你的内容本身包括双引号,需要选择true了(注意只针对括起整个字段内容的双引号,内容中间用到的就没所谓了)

Recycle on EOF?

到文件末时是否重新读取?

值为true的话,当设置的读取次数超过csv文件的行数时,会重新从第一行开始取值。false的话会结束读取。

 

二)定时器

固定定时器

让每个线程在请求之前按相同的指定时间停顿

 

注意:

1、定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);

2、当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;

3、如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;

三)逻辑控制器

简单控制器(Simple Controller)

作用:用来组合取样器和其他逻辑控制器

简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来模块分类

 

 

四)sampler(取样器)

1、HTTP请求

模拟浏览器行为,在HTTP协议层上发送给被测应用的http请求

 

属性参数说明:

1)名称:用于标识一个sample。建议使用一个有意义的名称

2)注释:对于测试没任何影响,仅用来记录用户可读的注释信息

3)服务器名称或IP:http请求发送的目标服务器名称或者IP地址,比如http://www.baidu.com

4)端口号:目标服务器的端口号,默认值为80,可不填

5)协议:向目标服务器发送http请求时的协议,http/https,大小写不敏感,默认http

6)方法:发送http请求的方法(链接:http://www.cnblogs.com/imyalost/p/5630940.html)

7)Content encoding:内容的编码方式(Content-Type=application/json;charset=utf-8)

8)路径:目标的URL路径(不包括服务器地址和端口)

9)自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面

10)Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)

11)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用

12)Parameters、Body Data以及Files Upload的区别:

  (1)parameter是指函数定义中参数,将URL中所有参数设置在本表中,表中的每一行是一个参数值对

  (2)Body Data指的是实体数据,就是请求报文里面主体实体参数,适合传送json格式请求

  (3)Files Upload指的是:在请求中发送文件,通常用来上传文件

2、Debug Sampler

写脚本难免会有bug,Debug Sampler可以查看脚本中的变量或属性,方便调试

 

1)JMeter properties和System properties:通常都选false,这两个就是JMeter和系统的属性,在Jmeter的bin的jmeter.properties中定义,一般都不会变。

2)JMeter variables:这个是我们自已定义的变量,默认为false。

五)前置处理器

1、BeanShell PreProcessor

在发生采样之前,调用自己写的工具类,工具类实现了密码的加、解密功能。

 

 

属性

描述

名称

该元件的描述性名称,用于在测试树中标识元件。

Reset bsh.Interpreter before each call

如果设置该选项,那么就会为每个采样器重新创建解释器。

Parameters to be passed to Bean Shell

传递给BeanShell脚本的参数。参数存在于如下变量表中:
1)String Parameters:包含有参数的字符串,作为单个变量存在
2)String []bsh.args:包含有参数的字符串数组,以空格作为间隔

Script file

一个文件,其中包含有待运行的BeanShell脚本

Script

BeanShell脚本。返回值将被忽略。

 

六)后置处理器

1、BeanShell PostProcessor

在发生采样之后,调用自己写的工具类,工具类实现了密码的加、解密功能。使用方法参照BeanShell PreProcessor。

 

2、正则表达式提取器

允许用户从服务器的响应中通过使用正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。

 

属性

1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。

2)正则表达式:

():括起来的部分就是要提取的。

.:匹配任何字符串。

+:一次或多次。

?:不要太贪婪,在找到第一个匹配项后停止。

 3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值

 4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0

 5)缺省值:如果参数没有取得到值,那默认给一个值让它取。

七)断言

响应断言:用于检查测试中得到的响应数据等是否符合预期

 

 

属性

描述

备注

Apply to

应用范围,设定匹配的范围

选择从哪个Sampler中进行提取

要测试的响应字段

针对响应数据不同部分进行匹配

(1)响应文本:响应服务器返回的文本内容,http协议排除header部分

(2)响应代码:匹配响应代码,比如http请求中‘200’代表成功

(3)响应信息:匹配响应信息,处理成功返回‘成功’或者“ok”字样

(4)Response Header:匹配响应头中的信息

可以参照正则表达式中的要检查的响应字段的说明。
另外要注意,如果有多个断言,选择Ignore Status的断言会影响到排在它前面的其他断言,所以Ignore Status一般只要在第一个断言中设置就可以

模式匹配规则

包括:响应内容包括需要匹配的内容就算成功

匹配:响应内容要完全匹配匹配内容,不区分大小写

equals:完全相等,区分大小写

substring:响应内容包括匹配内容即为成功。

可以通过添加断言结果来查看断言的执行情况。

包括、匹配: 使用Perl5的正则
Equals, Substring:大小写敏感

要测试的模式

添加要测试的内容,可以添加多个。

 

 

“察看结果树”或“断言结果”中可以看到断言成功或失败

察看结果树,断言成功,请求显示为绿色;断言失败,请求显示红色。 

八)监听器

用来显示Sampler运行结果的

1、查看结果树

察看任意一个请求的详细信息,最常用的监控器之一。

 

 

通过这个监听器,我们可以看到很详细的每个请求及所返回的结果,其中红色是指出错的请求,绿色则为通过的。

2、聚合报告

汇总所有请求运行结果到一个表格

 

属性:

Write results to file / Read from file:结果读写路径

Label:每个JMeter的element的Name值。例如HTTP Request的Name

#Samples:发出请求数量。如第三行记录,模拟20个用户,循环100次,所以显示了2000

Average:平均响应时间(单位:)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间

Median:中位数,也就是50%用户的响应时间

90%Line:90%用户的响应时间

95%Line:95%用户的响应时间

99%Line:99%用户的响应时间

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量。默认情况下标示每秒完成的请求数(具体单位如下图)

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

3、jp@gc - PerfMon Metrics Collector

服务器资源监控插件,几乎可以在所有平台 上监控CPU,内存,交换,磁盘I/O和网络I/O。

 

属性

Servers to monitor:要监视的服务器

Host/IP:主机

Port:端口

Metric to collect:需要收集的资源信息

九)函数助手

JMeter函数是可以被任何采样器引用的特殊值。 函数调用如下所示:

${__functionName(var1,var2,var3)}

1、_Random

随机函数返回一个介于给定最小值和最大值之间的随机数。

 

 

函数参数

描述

是否必需

最小值

最小数值

最大值

最大数值

变量名

重用函数计算值的引用名

 

三、脚本编写

Jmeter脚本编写主要有两种方式

1、录制

1)通过bodboy来录制脚本

2)通过JMeter自身设置来录制脚本

2、手动编写

推荐方式,手动编写更加灵活

参照接口文档,自己编写

参考《接口测试工具-Jmeter的使用.pptx》

步骤:

1)添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”。

2)添加“HTTP Cookie管理器”

3)添加“Http请求默认值”组件,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。

4)添加“HTTP Sampler,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数

l 一般请求参数


l Jason格式参数

5)设置检查点:在被测接口对应的“HTTP Sampler”上,添加“响应断言”,设置断言内容

6)添加监听器:添加查看结果树,方便查看运行后的结果

3、常用功能

1)正则表达式

运用Jmeter正则提取器,可以从上一请求的响应结果中取到下一个请求需要的内容,从而实现数据的传递。

例如获取登录后返回数据中的customerID,查询用户个人信息

1)添加正则表达式提取器,获取返回后的登录数据,提取customerID

 

2)引用提取到的值

 

2)参数化:

参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;脚本在运行时就可以根据需要选取不同的参数值作为输入。

1)添加CSV Data Set Config

 

2)配置参数:

 

 

3)使用变量:

 

3)加解密

http请求里的一些参数进行过加解密,为了正常处理带加密参数的请求,需要使用jar包特殊处理。

(1)eclipse写好代码,然后把该类打成jar包;或者研发提供相关jar包

2)把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下

3)打开jmeter,添加一个http sampler(登录接口),在sampler下添加一个BeanShell PreProcessor

4)在beanshell PreProcessor中导入我们的jar包,调用里面的加、解密码方法,把结果保存在jmeter变量中

(5)把加密后的密码存到jmeter变量中,然后在http sampler中就可以通过${encode}进行使用了

 

beanshell脚本

1)引入jar

2)定义变量

3)调用方法

4)存取变量值

四、脚本执行

1、界面执行

 

2、命令行执行

1)进入jmeter安装目录下

2)执行测试

jmeter -n -t E:\file\Autotest\Test.jmx

 

3)指定执行结果、日志路径

jmeter -n -t E:\file\Autotest\Test.jmx -l E:\report\report03\test03.jtl -e -o E:\report\report03 -j E:\report\report03\report03.log

结果:


五、调试

1、JMeter常用的调试工具有如下四种:

1)View Tree:查看结果树。含请求信息、响应信息等,请求头信息中的cookie信息一般默认不会显示,可通过修改JMeter配置参数进行显示。日常大家用的挺多的,在此不再赘述。

2)jmeter.log:查看log日志。

3)Debug Sampler:样本调试工具,含输入输出信息。

4)Debug Pre/PostProcessor:用于查看系统中存在变量等信息。

这边着重介绍jmeter.log和Debug Sampler。

2、Jmeter.log

每次执行都会生成相应的日志信息,通过日志可以查看报错信息

 

3、Debug Sampler

主要用来查看JMeter用户定义变量、JMeter属性变量,以及系统环境变量信息,在查看结果树对应调试器响应结果面板中查看信息。


  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

龙修

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值