性能测试学习之路 (二)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关联:
- 后置处理器
- Regular ExpressionExtractor
4.1 后置处理器
后置处理器就是JMeter的关联元件,可以帮助我们从服务器响应数据中查找到我们需要的数据。
4.2 Regular Expression Extractor
eg:
Jmeter中关联的两种方式[后置处理器和Regular ExpressionExtractor]:正则、XPATH(一般xml的时候用得多)。
前提条件:
- 脚本已经录制好
关联步骤:
- 找到需要关联的请求(数字+字母混合组合)
- 该请求->后置处理器->正则->填写内容
- 增加断言
- 增加断言结果
- 运行查看
- Jmeter中关联函数是要写在要获取变量值的页面的后面。
- Jmeter中我们使用正则表达式提取器来关联,如图
正则表达式提取器:
引用名称:即下一个要引用的参数名称
正则表达式:填写要提取的正则表达式,()就是要提取的内容,.代表任意字符,*代表出现任意次数
模板:用$$引用起来,如果在正则表达式中有多个正则表达式(含有多个括号括起来的),则可以是用$数字$表示解析到的第几个值给引用名称,例如,$2$标识吧解析到的第二个值给title
匹配数字:0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个匹配的内容提取出来,此处我们把第一个匹配的内容提取出来,故此处设置为1
缺省值:表示参数没有取到的话,默认给它的值。一般不填写
5 Jmeter参数化
做性能测试需要并发多个用户,为了真实模拟用户行为,我们需要模拟多个不同账号,就需要进行参数化。
5.1 配置元件
Jmeter配置元件不仅可以帮助进行参数化,还可以用来存储服务器的响应信息(比如HTTP信息头管理),同时还可以做初始化设置(比如JDBC Connection Configuration,可以配置与数据库的连接,即用Jmeter测试SQL语句)
5.2 3种方式的参数化
- 配置元件->CSV DATA Set Config
- 前置处理器->用户参数
- 函数助手
1 CSV DATA Set Config
CSV Data Set Config可以从指定的文件(一般是文本文件)中一行一行地提取文本内容,根据分隔符把一行内容与变量名对应上。
取样路径:添加->Config Element[配置元件]->CSV Data Set Config 。目前实际操作来看,filename只能使用txt文件,后缀名为csv文件不行。如图:
CSV Data Config的参数:
FileName:引用文件地址,即同目录下csv文件、txt文件的名称。
File Encoding: 默认为ANSI,建议用UTF-8的格式保存参数文件。
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: 设置是否线程共享
2 用户参数
前置处理器->用户参数,如图:
3 函数助手
选择->函数助手,如图:
函数助手第一个写路径
6 Jmeter检查点(断言)
断言原理:断言组件是通过获取服务器响应数据做验证,然后根据断言规则去匹配这些响应数据,匹配到就表示成功。常见的断言是响应断言,其支持正则表达式。
断言种类:
- Response Assertion
- BeanShell Assertion
- Compare Assertion
- HTML Assertion
- Size Assertion
- XML Schema Assertion
- XPath Assertion
- Duration Assertion
- 其他断言元件
6.1 响应断言
响应断言:对服务器的响应数据进行匹配。
响应断言参数:
- 名称:业务意义的名称
- 注释:可以为空
- apply to:应用范围
- main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器。
- main sample only:匹配范围是当前父取样器。
- sub-samples only :仅匹配子取样器。
- JMeter Variable:支持对JMeter变量值进行匹配。
- 要测试的响应字段:针对响应数据的不同部分进行匹配
- 响应文本:响应服务器返回的文本内容,HTTP协议排除Header部分。
- Document(text):对文档内容进行匹配。
- URL样本:匹配URL链接。
- 响应代码:匹配响应代码,比如HTTP协议返回代码200代表成功。
- 响应信息:匹配响应信息,比如处理成功返回成功字样,或者OK字样。
- Response Headers:匹配响应中的头信息。
- Ignore Status:一个请求有多个响应断言,其中第一个响应断言选中此项,当第一个响应断言失败时可以忽略此响应结果,继续进行下一个断言,如果下一个断言成功则还是可以判定事务成功的。
- 模式匹配规则:
- 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式。
- 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式。
- Equals:响应内容要完全等于需要匹配的内容才代表响应成功,大小写敏感,需要匹配的内容是字符串非正则表达式。
- Substring:响应内容包含需要匹配的内容才代表响应成功,大小写敏感,需要匹配的内容是字符串非正则表达式。
- 否:选择equal与substring时匹配的是字符串,大小写敏感,有时会响应失败,此时可以选择此项,会降低匹配级别,类似降到包括、匹配的级别,这样可以响应成功。
- 要测试的模块:填入你需要匹配的字符串或者正则表达式,注意要与模式匹配规则搭配好。
eg:
如图:响应断言可以进行断言持续时间、响应断言、size assertion.
响应断言参数:
响应断言:对服务器的响应进行断言校验
响应字段:响应文本,Document(Text),url样本,响应代码,响应信息,Response Header,ignore status
响应文本:服务器响应文本,一般普通http响应,都勾选这个
Document(Text):一切Apache Tika支持服务器响应,包括文本响应,还支持PDF、audio等。Jmeter会用Apache Tika去解析服务器响应的内容,会很耗内存,而且容易解析失败,所以一般普通的,不需要选择这个。
Url样本:是对sample的url进行断言。
响应信息:http响应代码对应的响应信息。
断言结果(Assertion Result):
7 Jmeter事务
性能测试结果统计时关注的TPS(每秒事务数),每个事务对应的是我们的请求,有时候场景需要把多个操作统计成一个事务,这时就需要逻辑控制器中的事务控制器来完成。
逻辑控制器:控制程序逻辑,比如循环控制器、随机控制器。
逻辑控制器如图:
事务控制器:
事务控制器如图:
事务控制器参数:
名称:可以随意设置
注释:可以随意设置
Generate parent sample:如果有多个取样器(请求),勾选它,可以在察看结果树种不仅可以查看事务控制器,还可以看到每个取样器,并且事务控制器定义的是否成功取决于子事务是否都成功的,其中任何一个失败即代表整个事务失败。
Include duration of timer and pre-post processors in generated sample:是否包括定时器、预处理和后期处理延迟的时间。
8 Jmeter 集合点
目的:性能测试需要模拟大量用户并发,集合点能够尽量让虚拟用户同一时刻发送请求,在jmeter中集合点是通过定时器来完成的。
定时器:用来控制取样器的执行时机,有固定定时器、随机定时器等。
集合点位置:定时器放在操作之前。
同步定时器:用来保证我们的取样器在同一时刻向服务器发起负载,同时提供了同步线程数量的设置,固定器->Synchronizing Timer,如图:
同步定时器:
名称:可以随意设置,最好有业务意义。
注释:可以随意设置,可以为空。
Number of Simulated Users to Group by:设置同步的线程数量,在运行测试时,每一个线程的运行时间可能不一样,想要让所有线程都集合在一起可能会等待较长时间,这种情况就可以让一部分集合完毕的线程运行起来。
Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数。
9 Jmeter用户自定义变量
添加->配置元件->用户定义的变量。
用户定义的变量:
名称:用户定义变量的描述性名称,显示在左边节点上,并用于命名事务
注释:用户定义变量的注释信息,非必填项
变量名称:定义变量引用的名称,如:设置变量名为IPAdress 在HTTP请求内引用:${IPAdress}
值:给变量赋值比例IP地址值可以设置:127.0.0.1
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运行
- 本地运行(用得很普遍,鼠标点击就可以控制启停),运行一台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远程运行特性
- 保存测试采样数据到本地机器
- 通过单台机器管理多个Jmeter执行引擎
- Jmeter GUI客户端会将它发往每一台Jmeter服务器
PS:Jmeter远程服务器都执行相同的测试计划,不会做负载均衡。
性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )的更多相关文章
- 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)
性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...
- JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型
JDBC 有四种驱动类型,分别是: JDBC-ODBC 桥(JDBC-ODBC bridge driver plus ODBC driver) 本地 API 驱动(Native-API partly ...
- Python学习一:序列基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- 【模型推理】量化实现分享二:详解 KL 对称量化算法实现
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下 K ...
- Java学习-007-Log4J 日志记录配置文件详解及实例源代码
此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...
- ViewPager 详解(二)---详解四大函数
前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)
转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...
随机推荐
- 探索RocketMQ的重复消费和乱序问题
前言 在之前的MQ专题中,我们已经解决了消息中间件的一大难题,消息丢失问题. 但MQ在实际应用中不是说保证消息不丢失就万无一失了,它还有两个令人头疼的问题:重复消费和乱序. 今天我们就来聊一聊这两个常 ...
- Pandas_工资集处理
import numpy as np import pandas as pd from pandas import Series,DataFrame # 1--读取数据文件 file_obj=open ...
- lua调用dll demo
使用的是lua5.3 DllMain.cpp 1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" { 4 #in ...
- 异步FIFO学习笔记
- ceph的pg平衡插件balancer
前言 ceph比较老的版本使用的reweight或者osd weight来调整平衡的,本篇介绍的是ceph新的自带的插件balancer的使用,官网有比较详细的操作手册可以查询 使用方法 查询插件的开 ...
- Cephfs的快照功能
前言 Cephfs的快照功能在官网都很少提及,因为即使开发了很多年,但是由于cephfs的复杂性,功能一直没能达到稳定,这里,只是介绍一下这个功能,怎么使用,并且建议不要在生产中使用,因为搞不好是会丢 ...
- javaScript高级程序设计.pdf && 你不知道的JavaScript
转: JavaScript高级程序设计 链接:https://pan.baidu.com/s/1iRQ8FjpJqutZJzgdJ8ZBKA 提取码:ndnp 你不知道的JavaScript 链接:h ...
- NO.A.0004——Git私有服务器部署/makefile方式/本地与Git服务器代码交换
一.在linux服务器上搭建私有Git服务程序:make编译方式 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某 ...
- Spring-Boot项目中配置redis注解缓存
Spring-Boot项目中配置redis注解缓存 在pom中添加redis缓存支持依赖 <dependency> <groupId>org.springframework.b ...
- web自动化测试难点 滚动条操作、日期框处理、上传文件
如何把页面滑到最低部? 一般来说,做web自动化测试时,不需要单独写代码,把页面滑到可见,因为click操作,只要是元素存在并且加载出来了,就可以点击到,无需另外写滑动元素的代码. 如果特殊情况需要滑 ...