JMeter概念

1. Test Plan  测试计划

Test Plan也就是测试计划,概念有点类似eclipse里面的project(项目、工程)。 
一个JMeter测试计划有很多种测试元素组成。一般至少包含一个Thread Group(线程组),在每个Thread Group里面又可以包含Controller,Listener,Timer等等。 
总结下,大体结构如下 
这里写图片描述 
更细化一点,差不多这样, 
这里写图片描述

2. Thread Group 线程组

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

 (1)Ramp-Up Period (线程总计运行时间 ):告诉Jmerter达到最大线程数据需要多长时间 。默认设置为0,即Jmeter立即启动所有线程。如果设置为5,意味着5秒内发起10条请求,平均1秒发出2条。

(2)循环次数:决定线程循环次数,设置10次,即每个线程循环10次,100个线程要循环:10*100=1000次 。

3. Controllers 控制器

JMeter主要有两种类型的Controllers,Samplers和Logic Controllers (逻辑控制器)。 


Samplers 采样器

Samplers允许JMeter向server发送一系列的请求。她模拟了用户从页面想终端server发送请求的行为,比如新建一个HTTP的Sampler,可执行POST、GET、DELETE等请求。 
一些常用的samplers主要有一下几种, 
这里写图片描述 


- HTTP Request   HTTP请求
- FTP Request 
- JDBC Request 
Java Request 
- SOAP/XML Request 
- RPC Request

  HTTP Request   HTTP请求

参数列表:

Attribute Description Required
Name
组件名 No
Server
域名或IP No
Port 端口 No
Connect Timeout 连接超时时间(单位毫秒) No
Response Timeout 响应超时时间(单位毫秒) No
Implementation 实现方式,默认值为Jmeter属性:jemter.httpsampler No
Protocol 协议,HTTP or HTTPS No
Method 请求方法:HTTP GET or HTTP POST No
Path 请求资源路径 No
Send Parameters With the Request 参数列表 No
Server (proxy) 代理服务器的域名或IP No
Port 代理服务器的端口 No, unless proxy hostname is specified
Username 代理服务器的用户名 No
Password 代理服务器的密码 No
Retrieve All Embedded Resources from HTML Files 告诉Jmeter解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等) No
Use concurrent pool 用一个连接池来获取嵌入的资源 No
Size 用于获取嵌入式资源的并发连接池大小 No
Embedded URLs must match: URL匹配,过滤 No

http 默认端口80

https默认端口443

服务器IP地址和端口号以及接口共同的请求路径部分,作为变量引用时,需要在路径填充表格的最前面添加两个斜杠“//”,不加的话会引用失败。

GET请求

1
http://请求路径/Ecs-duHc0U4E  #该请求参数“Ecs-duHc0U4”以斜杠形式传入

POST请求 

1
http://请求路径?subnetCode=Subnet-tQSPwlp1&imageCode=image-djcgebxfd  #该请求参数subnetCode和imageCode以问号形式传入

区别是:
第一种解析的时候会把后面的字符当做路径或是地址;

第二种解析的时候会把后面的地址当做匹配关键字,“?”起连接作用,表示要带参数,“&”作为不同参数的间隔符。

Logic Controllers  逻辑控制器

Logic Controllers其实最主要的作用就是控制执行顺序。她可以用来控制sampler在一个线程中的执行顺序,也可以改变来自其他elements请求的顺序。典型的代表就是,IF Controller、While Controller等。 
一些常用的Logic Controllers主要有一下几种, 
这里写图片描述

  • Simple Controller
  • Loop Controller
  • Once Only Controller
  • Interleave Controller
  • Random Controller
  • Random Order Controller
  • Throughput Controller
  • Runtime Controller
  • If Controller
  • While Controller
  • Switch Controller
  • ForEach Controller
  • Module Controller
  • Include Controller
  • Transaction Controller
  • Recording Controller

4. Listeners 监听器

Listeners是我非常喜欢的一个功能,她可以让你看到samplers测试的结果,形式多样,包括表格、图标、树状或者是日志文件中的简单文本。在每次smaplers执行的时候,结果数据都会被收集在多样的Listeners中。 
Listeners可以加在test plan下的任何地方,JMeter提供的Listeners主要包含以下几种, 
这里写图片描述 
- Sample Result Save Configuration 
- Graph Full Results 
- Graph Results 
- Spline Visualizer 
- Assertion Results    断言结果
- View Results Tree     查看结果树
- Aggregate Report    聚合报告
- View Results in Table 
- Simple Data Writer 
- Monitor Results 
- Distribution Graph (alpha) 
- Aggregate Graph 
- Mailer Visualizer 
- BeanShell Listener 
- Summary Report   

  Aggregate Report    聚合报告

(1)Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
(2)#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
(3)Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
(4)Median:中位数,也就是 50% 用户的响应时间
(5)90% Line:90% 用户的响应时间   。即:90%Line 值为N,代表 这个数组中有90%的数将小于等于1
 Note:关于 50% 和 90% 并发用户数的含义,请参考相关文章     
(7)Min:针对同一请求取样器,请求样本的最小响应时间
(8)Max:针对同一请求取样器,请求样本的最大响应时间
(9)Error%:本次测试中出现错误的请求的数量/请求的总数
(10)Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
(11)KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

 ps:  无特别说明,以上时间的单位均为ms

5. Timers 定时器

默认情况下,Jmeter线程在sampler之间发送请求不会暂停。建议为线程组添加某种定时器,以便用来在每个请求之间应该隔多长时间。如果测试人员不设定这种延迟,Jmeter可能会在短时间内产生大量访问请求,导致服务器被大量请求所淹没。 

定时器会让作用域内的每一个采样器都在执行前等待一个固定时长。如果测试人员为线程组添加了多个定时器,那么Jmeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。

默认情况下,一个JMeter线程在sampler之间发送请求是不会暂停的。有时候这可能不是你想要的。这时候你就可以加一个timer元素,你可以用她来在每个请求之间定义一个时间间隔。 
JMeter提供的Timers,如下 
这里写图片描述 
- Constant Timer     固定定时器   :单个用户每次请求的间隔时间(毫秒)
- Gaussian Random Timer   高斯随机定时器
- Uniform Random Timer 
- Constant Throughput Timer  常数吞吐量定时器
- Synchronizing Timer 
- JSR223 Timer 
- BeanShell Timer 
- BSF Timer 
- Poisson Random Timer

 Constant Throughput Timer 常数吞吐量定时器

Constant Throughput Timer常数吞吐量定时器可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组,并且计算吞吐量的依据可以是最近一次线程的执行时延。

6. Assertions 断言

Assertions,有点类似JUNIT里面的断言,可以对请求中返回的结果做一些验证性的处理。使用Assertions可以定制请求正确时返回的成功信息,也可以高亮返回的错误信息。 
JMeter提供的Assertions如下, 
这里写图片描述 
- Beanshell Assertion 
- BSF Assertion 
- Compare Assertion 
- JSR223 Assertion 
- Response Assertion 响应断言
- Duration Assertion 
- Size Assertion 
- XML Assertion 
- BeanShell Assertion 
- MD5Hex Assertion 
- HTML Assertion 
- XPath Assertion 
- XML Schema Assertion

Response Assertion  响应断言

作用:一个HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是,判断任务成功,反之任务失败。

(1)Apply to

关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,可以触发多个服务器请求,就有main sample  和 sub-sample之分了。

(2)要测试的响应字段

勾选“响应文本”,会在响应数据中进行校验。如果要验证健壮性,则需要勾选ignore status(忽略错误)

(3)匹配规则

勾选“包括”,意味着只要相应数据中包含要校验的字段,任务就算成功。

(4)要测试的模式

即需要校验的数据值。 认为返回结果包括 【要测试的模式】内容  就是通过

7. Config Element 配置元件

JMeter提供的Config Element 配置元件如下,
- CSV Data Set Config
- DNS Cache Manager
- FTP Request Defaults FTP请求缺省值
- HTTP Cache Manager
- HTTP Cookie Manager
- HTTP Header Manage   HTTP信息头管理器 :为了在Headers中传值
- HTTP Authorization Manage HTTP授权管理器
- HTTP Request Defaults  HTTP请求默认值 :为了指定请求的服务器信息
- Java Request Defaults Java请求默认值
- JDBC Connection Configuration
- Keysore Configuration
- LDAP Extended Request Defaults
- LDAP Request Defaults LDAP请求默认值
- Random Variable
- TCP Sample Config TCP取样器配置
- User Defined Variable 用户定义的变量
- Login Config Element 登录配置元件/元素
- Simple Config Element 简单配置元件:可以在采样器中添加或者重载任意值
- Counter 计数器:容许用户创建一个计数器,可在线程组中任何地方被引用

CSV Data Set Config

(1)文件所在的路径即为CSV Data Set Config配置元件中的Filename值;

(2)只传入一个参数,则文件中只有一列。如果有两个参数,会有两列数据,并用英文逗号隔开;引用参数时,CSV Data Set Config配置元件中Variable Names填写两个变量,也用英文逗号隔开即可

(3)若文件有10行数据,意味着10条测试用例,则在http request 中需要 设置线程循环10次。CSV Data Set Config配置元件中Recycle on EOF填写False

User Defined Variables 用户自定义变量

Jmeter可以通过用户自定义将字段参数化。作用范围:当前的线程组内所有取样器(即博主的HTTP请求)都可以引用变量。

“名称”中输入变量名称

“值”中可以直接输入值,也可以通过Jmeter的函数__CSVRead,__StringFromFile从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。

(1)当参数值是某个前缀加一个数字时,可以用前缀名加${__Random(,,)}或${__threadNum}的方法设置参数值。

如进行登录测试之前,先准备了用户名为perf_0到perf_1000的用户,

那么用户名就可以设为perf_{__Random(0,1000,)}。

(2)当参数值没有规律的且量不太大时,可以通过${__CSVRead(,)},${__StringFromFile(,,,)}从文件中读取

如将用户名和密码保存在user.csv文件中,user.csv的内容如下:
oriana,123456
admin,admin
dandan,123456

因为user.csv文件中有两列数据,所以只能用${__CSVRead(,)}函数
username参数后的值设为${__CSVRead(user.csv,0)},
password参数后的值设为${__CSVRead(user.csv,1)}。

8. Post processors后置处理器

(正则表达式提取器是Jmeter关联中的一种)使用场景:有两个HTTP请求,请求A的返回数据中有一个字段“ABCD”,该字段要作为请求B的入参。

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

(2)正则表达式:

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

    .:匹配任何字符串。
    +:一次或多次。
    ?:不要太贪婪,在找到第一个匹配项后停止。

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

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

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

可用的正则表达式校验工具: RegexTester   。基础用法

99. 其他

除了上面几个最重要的概念之外,还有几个概念,大家如果用到可以去官网翻翻文档,比如说Configuration Elements, Pre-processor Elements,Post-processor Elements, Execution Order of Test Elements … …

 以上。来源:  http://blog.csdn.net/shizhiailian/article/details/52443370#     JMeter中非常重要的几个概念

                         http://blog.csdn.net/ydppqh/article/details/46859543     Jmeter 通过用户自定义进行参数化

                         http://blog.csdn.net/shuimengzhen/article/details/57075437   Jmeter之六:定时器 之 常数吞吐量定时器

                        http://www.cnblogs.com/LiangHu/p/6230372.html  接口测试工具-Jmeter使用笔记(五:正则表达式提取器)

小例子:

查看结果树的编码转换(接口返回的是unicode编码,查看不方便)

1,加后置处理器 :正则表达式

2,1处理器用名称任意。输入正则表达式。提取需要的内容

3,加后置处理器:BeanShellPostProcessor

4,3处理器内容中加入 unicode转换为utf8的脚本代码(网上可百度)

原文地址:https://www.cnblogs.com/ericazy/p/7087229.html