前段时间专门挑了一段时间在准备面试。经过两次面试后,有一些比较深刻的认识。对于企业要求来说,除了对专业理论知识考究之外,对测试工具这块也是看重的。

一、使用JMeter测试快速入门

1、线程组是什么

进程: 一个正在执行的程序对应一个进程

线程: 一个进程有多个执行线程 线

程组: 按照线程性质对线程分组。查看任务管理器(爱奇艺有多个)

三者关系: 一个进程有多个线程组,一个线程组有多个线程

测试计划—线程组—线程组属性中的线程数
并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致
顺序执行:按照线程的启动顺序挨个执行
默认情况下,线程组中的线程是并发执行
每一个线程都要执行组内的http请求
设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组)
线程组用来模拟用户的并发访问

创建线程组

线程组主要包含三个参数:

线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。

线程数:

虚拟用户数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。

准备时长(秒):

设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。

循环次数:

每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本。

调度器

设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)

持续时间(秒)

测试持续时间,会覆盖结束时间

启动延迟(秒)

测试延迟启动时间,会覆盖启动时间

启动时间

测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。

结束时间

测试结束时间,持续时间会覆盖它。

创建http请求

见得最多,所以我们着重讲解:

指定请求域名,请求路径

接口文件讲解

设置对应的查看内容

注意:如果监听器中有jp@gc开头的,都是第三方插件

Sample:每个请求的序号 Start Time:每个请求开始时间 Thread Name:每个线程的名称 Label:Http请求名称 Sample Time:每个请求所花时间,单位毫秒 Status:请求状态,如果为勾则表示成功,如果为叉表示失败。 Bytes:请求的字节数 样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数 平均:每个线程请求的平均时间 最新样本:表示服务器响应最后一个请求的时间 偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。

查看结果树

  • 请求的数据展示(请求头信息,请求参数,)

  • 响应的数据展示(响应码,响应头,)

通过察看结果树,我们可以看到每个请求的结果,其中红色的是出错的请求,绿色的为通过。

Thread Name:线程组名称

Sample Start: 启动开始时间

Load time:加载时长

Latency:等待时长

Size in bytes:发送的数据总大小

Headers size in bytes:发送数据的其余部分大小

Sample Count:发送统计

Error Count:交互错误统计

Response code:返回码

Response message:返回信息

Response headers:返回的头部信息

聚合报告参数说明

lable:对应每一个http请求,显示的是http请求的Name,如百度http请求name为baidu

#Samples:表示这一次的测试中一共发出了多少请求,如上图所示,sougou和baidu的http请求每个都发出30个请求

Average:平均响应时间,指的是所有的请求的平均响应时间,如上图的30个请求的总的响应时间除以30得出的平均响应时间,默认的情况下是单个请求的平均响应时间,但当使用了“事务控制器”时,则以事物为单位显示平均响应时间

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

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

Min:最小响应时间

Max:最大的响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数,如上图所示,本次的测试中,sougou的http请求66.6%的请求出错,而baidu的请求则没有出错的请求

Throughput:吞吐量,默认情况下表示每秒完成的请求数,如上图所示,每秒完成的请求数分别为6.6个每秒,6.2个每秒

Recived KB/Sec:每秒从服务器端接收到的数据量,以kb为计算的单位

掌握:平均时间、错误率、吞吐量。

图形结果

作用: 通过图形展示出本次性能测试数据的分布。 图形结果一般作为聚合报告的分析辅佐

样本数目:总共发送到服务器的请求数。

最新样本:代表时间的数字,是服务器响应最后一个请求的时间。

吞吐量:服务器每分钟处理的请求数。

平均值:总运行时间除以发送到服务器的请求数。

中间值:有一半的服务器响应时间低于该值而另一半高于该值。

偏离:表示服务器响应时间变化、离散程度测量值的大小。

二、JMeter主要组件介绍

测试计划

1.测试计划就是一个完整的场景

2.“独立运行每个线程组” :勾选以后所有的线程组都是顺序执行的了。一般不勾选,让所有 的线程组并发启动。

3.“函数测试模式” :勾选后会有详细的请求记录,消耗资源,影响客户端性能。一般不勾选。

4.用户定义的变量:全局变量,测试计划上可以添加用户定义的变量。一般添加一些系统常用的配置。如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量

线程组

(1)thread group(线程组)

这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。

(2)setup thread group

一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行;类似LoadRunner的init,测试开始时进行初始化的工作。

(3)teardown thread group

一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组;类似LoadRunnner的end,测试结束时进行回收工作。

取样器(Http请求)

关于http请求的的属性参数说明:

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

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

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

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

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

6)方法:发送http请求的方法(链接:http://www.Tester .com//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是指函数定义中参数,而argument指的是函数调用时的实际参数

2.简略描述为:parameter=形参(formal parameter), argument=实参(actual parameter)

3.在不很严格的情况下,现在二者可以混用,一般用argument,而parameter则比较少用 While defining method, variables passed in the method are called parameters. 当定义方法时,传递到方法中的变量称为参数. While using those methods, values passed to those variables are called arguments. 当调用方法时,传给变量的值称为引数.(有时argument被翻译为“引数“)

4、Body Data指的是实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里

5、Files Upload指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML 进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中) 如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载

监听器

监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。

循环控制器

事务控制器

作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。

在线程组下创建事务控制器

参数:

  • Generate parent sample:(选中这个参数结果展示如下图红框,否则显示为下图蓝框)
  • Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间

创建 sample 访问首页和注册页面

生成聚合报告

勾选

聚合报告中只有一项事务报告

断言---检查点

断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

两个重要断言:响应断言和JSONAssertion

响应断言:

JSON断言:

前置处理器和后置处理器

前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。

定时器

定时器(Timer)负责定义请求之间的延迟间隔

三、JMeter组件参数化

1、CSV Data Set Config:CSV数据控件

使用场景: 适合参数范围比较大的时候,可以方便用户随时修改参数数据。使用最多的就是参数化用户名和密码登录系统。

操作步骤

在指定路径下新建一个文本文档,填写多条内容

2、通过函数助手

使用场景: jmeter自带的函数处理,比如:随机数,可用于固定字符+随机数,修改传入参数的值,函数助手的底层都是java封装的方法。

操作步骤

1、点击 选项–>函数助手 调出函数助手对话框
2、选择 _CSVRead 函数(下图第一个框)
3、函数参数:
1)第一个参数:填写文件路径。
2)第二个参数:文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推,然后点击【生成】按钮,则会自动生成我们需要的参数化函数。
3) 复制生成的参数化函数, copy过程需要使用的地方即可。
4) _Random函数是从某数据段随机读取数据替换参数,当需要添加多条数据记录且某些字段需要唯一性时使用。

3、用户自定义变量

使用场景: 一般可以适用于在测试计划中不经常变化的参数设置,如host、端口号、url等;而且用户自定义变量是在配置元件中的。

操作步骤

(1)添加用户自定义变量功能模块

(2)配置用户自定义变量参数值

这里以配置不同服务器地址和端口为例:

(3)配置HTTP请求中参数值或消息体数据中参数化字段

当发送请求服务器地址发生改变时,只需要更改服务器参数化值即可向不同的服务器发送请求。当然,用户自定义变量也可以来参数化登陆用户、交易金额、账户等场景。

四、JMeter正则表达式提取

运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据
正则表达式(regular expression) 描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式提取的相关设置

说明:

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

(2)正则表达式: ():括起来的部分就是要提取的。 .:匹配任何字符串。 +:一次或多次。 ?:不要太贪婪,在找到第一个匹配项后停止。

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

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

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

案例: api接口

题外话

如果对这部分内容感兴趣,可以持续关注作者的账号,除此之外,还录制了不少这方面的技术视频,如果有需要,可以在我个人打造的微信公众号:程序员一凡看到全部内容。

如何正确使用JMeter性能测试?紧扣面试实际要求的更多相关文章

  1. 一篇文章入门Jmeter性能测试【经典长文】

    孟船长  目录 1.性能测试定义2.为什么要做性能测试3.性能测试指标.性能测试分类4.Jmeter性能测试实战[入门级]5.参考文章链接 1.性能测试定义 百度&知乎 性能测试是通过自动化的 ...

  2. JMeter性能测试的基础知识和个人理解

    JMeter性能测试的基础知识和个人理解 1. JMeter的简介   JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...

  3. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  4. Jmeter性能测试入门(链接收藏)

    Jmeter性能测试入门: http://www.cnblogs.com/TankXiao/p/4045439.html

  5. Jmeter性能测试入门(转)

    出处:http://www.cnblogs.com/by-dream/p/5611555.html Jmeter性能测试步骤 1. 添加线程组之后,先设置这两项: 2. 添加一个http请求 被测的u ...

  6. Jmeter学习一:Jmeter性能测试环境搭建(Windows下)

    最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...

  7. Jmeter性能测试

    Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter搞定的 ...

  8. JMeter性能测试,完整入门篇

    1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,也越来越流行成为了主流的性能测试工具 ...

  9. 【转载】Jmeter 性能测试入门

    [转载]Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmete ...

随机推荐

  1. group by分组查询

    有如下数据: 一个简单的分组查询的案例 按照部门编号deptno分组,统计每个部门的平均工资. select deptno,avg(sal) avgs from emp group by deptno ...

  2. 图神经网络-环境配置与PyG库

    环境配置与PyG中图与图数据集的表示和使用 一.引言 PyTorch Geometric (PyG)是面向几何深度学习的PyTorch的扩展库,几何深度学习指的是应用于图和其他不规则.非结构化数据的深 ...

  3. Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

    在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面.所以, 今天完整的分享Spring Boot读取配置文件的几种方式! S ...

  4. Mysql - You can't specify target table '表名' for update in FROM clause 错误解决办法

    背景 在MySQL中,写SQL语句的时候 ,可能会遇到 You can't specify target table '表名' for update in FROM clause 这样的错误 错误含义 ...

  5. 110_SSM框架

    目录 需求分析->功能设计->数据库设计 环境要求 环境 要求 数据库环境 基本环境搭建 创建maven项目 pom.xml添加依赖,添加资源导出 idea连接数据库 提交项目到Git 创 ...

  6. java 集合特性面试必备

    collection 集合体系 数据结构栈和队列栈结构 :先进后出队列结构 :先进先出 数据结构之数组和链表数组结构:查询快.增删慢队列结构 :查询慢.增删快 List集合概述有序集合(也称为序列), ...

  7. openswan协商流程之(四):main_inI2_outR2()

    主模式第四包:main_inI2_outR2 1. 序言 main_inI2_outR2()函数是ISAKMP协商过程中第四包的核心处理函数的入口,同时在此处理流程中已经获取到足够的隧道信息,可以生成 ...

  8. 硕盟type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  9. .NET5修改配置不重启自动生效

    .NET Core,.NET5默认配置都是只加载一次,修改配置时都需要重启才能生效,如何能修改即时生效呢,下面来演示一遍. 一.设置配置文件实时生效 1.1配置 在Program.cs的CreateH ...

  10. CTFd+ubuntu service搭建等待更新

    CTFd是一款基于Apache2.0的协议的开源CTF平台,最新版本目前为1.20.该平台功能强大,基本上能够满足目前的CTF竞赛需求,同时,该平台提供了强大的插件功能,可以自己进行插件开发实现自己的 ...