性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )

1 Jmeter 工作区介绍

jmeter工作区分为3个部分:目录树、测试计划编辑区域、菜单栏

2 Jmeter 执行顺序规则

Jmeter执行顺序规则如下:

  • 配置元件
  • 前置处理器
  • 定时器
  • 采样器sampler
  • 后置处理器(除非服务器响应为空)
  • 断言(除非服务器响应为空)
  • 监听器(除非服务器响应为空)

PS:前提是存在采样器,定时器、断言、前置/后置处理器才会被执行。逻辑控制器和采样器按照在测试树中出现的顺序执行。

3作用域规则

配置元件(config elements):会影响其作用范围内的所有元件。

前置处理器(Per-processors):在其作用范围内的每一个Sampler元件之前执行。

定时器(timers):对其作用范围内的每一个sampler有效

后置处理器(Post-processors):在其作用范围内的每一个sampler元件之后执行。

断言(Assertions):对其作用范围内的每一个sampler元件执行后的结果执行校验。

监听器(Listeners):收集其作用范围的每一个sampler元件的信息并呈现。

Sampler:不和其他元件相互作用,因此不存在作用域的作用。

作用域的规则:

Jmeter测试树中既包括分层规则的测试元件,又包含遵循顺序规则的测试元件。

分层规则(监听器、配置元件、后置处理器、前置处理器、断言、定时器)、顺序规则(逻辑控制器、采样器)

图一,执行顺序为One、Two、Three、Four

 

图二,分层规则,Assertion#1 只对One生效;Assertion#2对Two、Three生效

 

如图三,分层规则中Time#1 对请求Two、Three、Four生效;Time#2对所有的生效。

 

 

4 Jmeter 关联

Jmeter是一种动态行为,用以后续的请求(比如HTTP请求)从之前的请求(比如JDBC Request)的查看结果器->响应数据(服务器返回的数据)中直接使用指定的数据。

常见场景一:1、HTTP请求->HTTP请求。调用登录接口,成功登陆后,会返回一个登录凭证比如防止csrf攻击而生成的app_token,之后的操作比如修改密码接口、支付接口和购买接口都需要此凭证。此时都是在登陆后才能操作的接口,可用关联。

注册接口中有个参数input_code(短信验证码)也可以通过

Jmeter中关联的两种方式:正则、XPATH(一般xml的时候用得多)

前提条件:

脚本已经录制好

关联步骤:

找到需要关联的请求(数字+字母混合组合)

该请求->后置处理器->正则->填写内容

增加断言

增加断言结果

运行查看

Jmeter中关联函数是要写在要获取变量值的页面的后面。

Jmeter中我们使用正则表达式提取器来关联,如图

引用名称:即下一个要引用的参数名称 
正则表达式:填写要提取的正则表达式,()就是要提取的内容,.代表任意字符,*代表出现任意次数 
模板:$$引用起来,如果在正则表达式中有多个正则表达式(含有多个括号括起来的),则可以是用$数字$表示解析到的第几个值给引用名称,例如,$2$标识吧解析到的第二个值给title 
匹配数字:0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个匹配的内容提取出来,此处我们把第一个匹配的内容提取出来,故此处设置为1 
缺省值:表示参数没有取到的话,默认给它的值。一般不填写

5 Jmeter参数化

3种方式参数化

一、配置元件->CSV DATA Set Config

二、前置处理器->用户参数

三、函数助手

5.1 CSV DATA Set Config

Add->Config Element->CSV Data Set Config 。目前实际操作来看,filename只能使用txt文件,后缀名为csv文件不行。如图:

FileName:即同目录下csv文件的名称

File Encoding: 默认为ANSI

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

Allow Quoated data: 双引号相关

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

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

Sharing Mode: 设置是否线程共享

5.2 用户参数

前置处理器->用户参数,如图:

 

5.3 函数助手

选择->函数助手,如图:

函数助手第一个写路径

6 Jmeter检查点(断言)

检查点在jmeter中,就是断言。

对相应请求添加响应断言

对相应请求添加断言结果

一般成功就只会显示一行,否则会多显示一行

如图:响应断言可以进行断言持续时间、响应断言、size assertion.

 

响应断言:对服务器的响应进行断言校验

响应字段响应文本,Document(Text),url样本,响应代码,响应信息,Response Header,ignore status

响应文本服务器响应文本,一般普通http响应,都勾选这个

Document(Text):一切Apache Tika支持服务器响应,包括文本响应,还支持PDF、audio等。Jmeter会用Apache Tika去解析服务器响应的内容,会很耗内存,而且容易解析失败,所以一般普通的,不需要选择这个。

Url样本:是对sample的url进行断言。

响应信息:http响应代码对应的响应信息。

7 Jmeter事务

性能测试结果统计时关注的TPS(每秒事务数),每个事务对应的是我们的请求,有时候场景需要把多个操作统计成一个事务,这时就需要逻辑控制器中的事务控制器来完成。

逻辑控制器如图:

 

事务控制器如图:

 

名称:可以随意设置

注释:可以随意设置

Generate parent sample:勾选,可以查看事务控制器下的每个取样器。

Include duration of timer and pre-post processors in generated sample:是否包括定时器、预处理和后期处理延迟的时间。

8 Jmeter 集合点

目的:性能测试需要模拟大量用户并发,集合点能够尽量让虚拟用户同一时刻发送请求,在jmeter中集合点是通过定时器来完成的。

集合点位置:放在操作之前。

同步定时器,用来保证我们的取样器在同一时刻向服务器发起负载,同时提供了同步线程数量的设置,如图:

 

名称:可以随意设置,最好与业务意义。

注释:可以随意设置,可以为空。

Number of Simulated Users to Group by:设置同步的线程数量,在运行测试时,每一个线程的运行时间可能不一样,想要让所有线程都集合在一起可能会等待较长时间,这种情况就可以让一部分集合完毕的线程运行起来。

实战例子:

9 Jmeter用户自定义变量

添加->配置元件->用户定义的变量

 

:用户定义变量的描述性名称,显示在左边节点上,并用于命名事务

注释:用户定义变量的注释信息,非必填项

变量名称:定义变量引用的名称,如:设置变量名为IPAdress 在HTTP请求内引用:${IPAdress}

:给变量赋值比例IP地址值可以设置:192.168.1.100

Description:变量进行描述,可以不填写

添加:添加变量行;

删除:删除变量行;

10 Jmeter实战(从负载-监听)

10.1场景设计

场景是用来尽量真实模拟用户操作的工作单元,场景设计来源于用户真实操作,Jmeter的场景设计主要通过线程组设置来完成(复杂场景需要与逻辑控制器配合)。

场景设计原则是忠于用户实际操作,组合用户的各种操作到场景中。

10.2场景设置

 

名称:可以给线程组设置一个个性化的命名

注释:可以对线程组添加备注以标记

在取样器错误后要执行的动作:就是在错误之后要如何执行,可选继续执行后续的、停止执行等。

线程数:就是需要设置多少线程执行测试。

Ramp-up Period (in Seconds):用于告知JMeter 要在多长时间内建立全部的线程。多长时间内需要把上面的线程数均匀启动完。 默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

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

Delay Thread creation until needed:直到需要时延迟线程的创建

调度器:选中之后可以配置启动时间,立即或者预定的时间

10.3场景运行

Jmeter的场景运行方式有两种,一种是GUI方式运行(视窗运行),一种是非GUI方式运行(命令窗口)。

10.3.1 GUI运行

  1. 本地运行(用得很普遍,鼠标点击就可以控制启停),运行一台Jmeter机器,所有的请求从一台机器发出。

 

  2. 远程运行

一台Jmeter控制机(Master)控制远程的多台机器(Slave)来产生负载。Jmeter控制机与远程负载机的通信是通过RMI方式来完成的。首先在负载机上运行Agent程序(启动命令是%JAVA_HOME%/bin/jmeter-server.bat),在jmeter控制机上点击运行远程负载机。

其次,远程负载机的IP需要进行配置,打开Jmeter.properties文件,搜索remote_hosts.

 

PS:本机如果作为负载机,也需要把填写IP;远程运行时主要如果有参数化文件,脚本有依赖时,需要手工把这些参数文件、依赖包拷贝到远程机器上。

10.3.2 非GUI运行

命令如下:

 

 

10.4测试监听

性能测试监控的主要任务是获取运行状态收集测试结果,测试结果有事务响应时间、吞吐量及服务器硬件性能(CPU、内存、磁盘等)、JVM使用情况、数据库性能状态等。

附录

GUI远程运行特性

  1. 保存测试采样数据到本地机器
  2. 通过单台机器管理多个Jmeter执行引擎
  3. Jmeter GUI客户端会将它发往每一台Jmeter服务器

PS:Jmeter远程服务器都执行相同的测试计划,不会做负载均衡。

猜你喜欢

转载自www.cnblogs.com/wendyw/p/11626745.html