1 Jmeter 工作区介绍

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

2 Jmeter 执行顺序规则

Jmeter执行顺序规则如下:

  1. 配置元件
  2. 前置处理器
  3. 定时器
  4. 采样器sampler[一定存在,其他才会执行]
  5. 后置处理器(除非服务器响应为空)
  6. 断言(除非服务器响应为空)
  7. 监听器(除非服务器响应为空)

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种方式的参数化

  1. 配置元件->CSV DATA Set Config
  2. 前置处理器->用户参数
  3. 函数助手

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检查点(断言)

断言原理:断言组件是通过获取服务器响应数据做验证,然后根据断言规则去匹配这些响应数据,匹配到就表示成功。常见的断言是响应断言,其支持正则表达式。

断言种类:

  1. Response Assertion
  2. BeanShell Assertion
  3. Compare Assertion
  4. HTML Assertion
  5. Size Assertion
  6. XML Schema Assertion
  7. XPath Assertion
  8. Duration Assertion
  9. 其他断言元件

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运行

  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远程服务器都执行相同的测试计划,不会做负载均衡。

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

  1. 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)

    性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...

  2. JDBC 学习笔记(二)—— 详解 JDBC 的四种驱动类型

    JDBC 有四种驱动类型,分别是: JDBC-ODBC 桥(JDBC-ODBC bridge driver plus ODBC driver) 本地 API 驱动(Native-API partly ...

  3. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

  4. IP2——IP地址和子网划分学习笔记之《子网掩码详解》

    2018-05-04 16:21:21   在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...

  5. 【模型推理】量化实现分享二:详解 KL 对称量化算法实现

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本文剖析一下 K ...

  6. Java学习-007-Log4J 日志记录配置文件详解及实例源代码

    此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...

  7. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  8. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  9. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

随机推荐

  1. /etc/resolv.conf文件自动恢复的解决方法

    /etc/resolv.conf文件自动恢复的解决方法: service NetworkManager stop #后台进程关闭 chkconfig NetworkManager off #配置关闭, ...

  2. 1. Spark的安装及介绍

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第一部分是记录如何安装Spark?同时,简单介绍下Spark. 一.Spark安装 二.Spark介绍 一.Spark安装 如 ...

  3. 主动关闭 time wait结构体

    /* * This is a TIME_WAIT sock. It works around the memory consumption * problems of sockets in such ...

  4. rgw使用boto3生成可以访问的预签名url

    前言 如果想访问一个ceph里面的s3地址,但是又不想直接提供secrect key的时候,可以通过预签名的方式生成url 生成方法 下载boto3 脚本如下 cat s3.py import bot ...

  5. 使用iptables做端口转发

    通过iptables可以做转发 #!/bin/sh IPT="/sbin/iptables" /bin/echo "1" > /proc/sys/net/ ...

  6. [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))) - skipping

    C:\Users>pip listPackage Version------------ -------behave 1.2.6configparser 3.7.4ddt 1.2.1parse ...

  7. 多线程实现socketserver练习

    1.server import socket from threading import Thread def my_socketserver(conn, addr): conn.send(b'hel ...

  8. 洛谷 P2101 命运石之门的选择 (分治)

    P2101 命运石之门的选择 (分治) 介绍 El Psy Congroo 题目链接 没错,作为石头门厨,怎么能不做石头门的题呢?(在搜石头门的时 候搜到了本题) 本题作为一道分治基础练习题还是不错的 ...

  9. Java(7)泛型

    目录 一.泛型概述 1.什么是泛型 2.为什么用泛型 3.在集合中使用泛型 二.自定义泛型结构 1.泛型类.接口 2.泛型方法 三.举例泛型类和泛型方法的使用场景 1.泛型类举例: 2.泛型方法举例 ...

  10. python菜鸟教程学习5: python运算符

    算术运算符: 整除符号//:向下取接近商的整数 加+ 减- 乘* 除/ 取余% 幂** 比较运算符: 等于== 不等于!= 大于> 小于< 大于等于>= 小于等于<= 赋值运算 ...