Jemeter组件

一、性能测试

为什么性能测试

1.评估当前系统的能力

2.寻找性能瓶颈,优化系统性能

3.评估软件是否满足未来的需要

4.招聘需要

什么是性能

时间:系统处理用户请求的响应时间

资源:系统运行过程中,系统资源的消耗情况

性能测试是什么

广义定义

基于协议模拟用户发出请求,对服务器形成一定负载,来测试服务器的性能指标是否满足要求

性能指标关注点:时间性能、空间性能与页面无关

狭义定义:

指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

功能和性能测试:

不同

功能测试验证系统的功能需求规格,聚焦功能。

性能测试验证系统的业务性需求场景,聚焦时间和资源。

关系:一般项目中,先功能测试通过后,后进行性能测试。

性能测试的分类

 基准测试:

狭义:单用户测试

广义:建立基准线,当系统软硬件环境发生变化之后再进行一次基准测试以确定变化对性能的影响。

负载测试:

概念

通过逐步增加系统负载,确定在满足性能指标的情况下,找出系统所能承受最大负载量的测试。

作用

系统最大负载量达到用户要求时,系统才能正式上线使用。

注意

通过负载测试,可以确定系统的最大负载量和极限负载量

系统对外宣称的最大负载量

负载测试的时间一般为1-2小时

稳定性测试:

概念:

①在服务器稳定运行(用户正常业务负载下)的情况进行长时间测试(1天-一周等),并最终保证服务器能满足线上业务需求。

②系统在用户需求的业务负载下运行达到规定的时间时,系统才能正式上线使用。

压力测试:

概念:

在强负载下的测试,查看系统在峰值下是否功能隐患、系统是否具有良好的容错能力和可恢复的能力

①测试场景:

高负载下的长时间稳定性压力测试,极限负载下的破坏性压力测试

②并发测试;

概念:在极短时间内,发送多个请求,来验证服务器对并发的处理能力

③应用场景

特定的活动场景:抢红包、秒杀、抢购

④与负载测试对比:

负载测试:主要目的是测试高负载情况下,对系统资源的消耗,是否会耗尽的问题

并发测试:主要目的是测试极短时间内,并发请求时,系统资源争抢的问题

性能测试的指标

①响应时间

指从客户端发起请求开始,到客户端接收到结果的总时间

包括:服务器处理时间+网络传输时间

②并发用户数

某一时刻同时向服务器发送请求的用户数

③吞吐量

概念:单位时间内处理客户端的请求数量,直接体现软件系统能承载能力

吞吐量单位分类

QPS(Query Per Second)每秒查询数,即控制服务器每秒处理的指定请求的数量。

TPS(Transaction Per Second)每秒事务数,即控制服务器每秒处理事务请求的数量。

如:支付请求事务=查询用户余额请求+校验支付安全请求+发送支付请求

每秒处理查询用户余额15请求,每秒处理校验支付安全15个请求,每秒处理发送支付15个请求

支付tsp为15

点击数:所有的页面元素(如:图片、链接、框架等)的请求总数

注意:

点击数是请求数,不是页面上的一次点击

错误率

指系统在负载情况下,失败业务的概率

注意:错误率是性能指标,是高负载下的失败业务的概率

随机bug是功能bug,先解决随机bug才能进行性能测试

资源利用率

概念:系统各种资源的使用情况,率=资源使用量/总资源可用量x100%

常见资源指标

CPU使用率:不高于75%-85%

内存大小使用率:不高于80%

磁盘IO(速率):不高于90%

网路(速率):不高于80%

性能测试工具

二、Jmeter简介

为什么使用Jmeter

开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件支持接口测试,压力(负载和压力)测试等多种功能,支持录制回放,入门简单相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试多平台支持,可在Linux,Windows,Mac上运行,支持多协议

/bin 目录常用文件介绍:

三、使用Jmeter测试快速入门

线程组是什么:

测试计划—线程组—线程组属性中的线程数

并发执行:多个线程同时执行,特点:执行结束的顺序与开始的顺序不一致

顺序执行:按照线程的启动顺序挨个执行

默认情况下,线程组中的线程是并发执行

每一个线程都要执行组内的http请求

设置线程组顺序执行:勾选测试计划中的(独立运行每个线程组)

线程组用来模拟用户的并发访问

创建线程组

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

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

线程数:

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

准备时长(秒):

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

循环次数:

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

调度器:

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

持续时间(秒)

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

启动延迟(秒)

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

启动时间

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

 结束时间

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

创建http请求

指定请求域名、请求路径

设置对应的查看内容

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

查看表格信息

查看结果树

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

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

聚合报告参数说明

四、Jmeter主要组件介绍

①测试计划:使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

②线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。

③取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。

④监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。

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

⑥逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

⑦定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。

⑧配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

⑨前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

测试计划

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

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

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

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

线程组

(1)thread group(线程组)

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

(2)setup thread group

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

(3)teardown thread group

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

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

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

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

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

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

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

6)方法:发送http请求的方法(链接:http://www.cnblogs.com/imyalost/p/5630940.html)

7)Contentencoding:内容的编码方式(Content-Type=application/json;charset=utf-8)

8)路径:目标的URL路径(不包括服务器地址和端口)

9)自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面

10)Usekeep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)

11)Usemultipart/from-dataforHTTPPOST :当发送HTTPPOST 请求时,使用

12)Parameters、BodyData以及FilesUpload的区别:

1.parameter是指函数定义中参数,而argument指的是函数调用时的实际参数

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

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

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

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

监听器

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

循环控制器

事务控制器

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

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

参数:

· Generate parent sample:(选中这个参数结果展示如下图红框,否则显示为下图蓝框)

· Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间

生成聚合报告

勾选

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

断言---检查点

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

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

响应断言:

JSON断言:

定时器

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

Jmeter组件参数化

参数化是什么

动态的获取并设置数据

为什么使用参数化

执行批量操作,批量添加批量删除,人工效率太低

运用程序代替人工获取并设置数据,安全高效

比如:对被测系统的用户名和密码进行参数化,来模拟多个用户同时登录系统

参数化实现之用户自定义变量

通过这个功能,能实现多接口共享数据,修改一条即可修改全部

参数化实现之CSV Data Set Config

添加CSV Data Set Config:

添加界面:

通过这个组件可以动态获取并设置数据,实现批量添加操作

引用:

线程数改为某个值

查看结果树:

其他:

1.线程组线程数改为大于文件中数据的处理:

遇到结束符在循环

遇到结束符停止线程

2.如果数据来自数据库

数据库导出txt文件

 使用Jmeter函数助手(文件中不要出现中文):

 Jmeter正则表达式提取

使用正则提取

运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下一个请求需要回传回去的数据

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

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

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

案例:api接口

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一. 性能测试 1.0 为什么要进行性能测试? 评估当前系统的能力 寻找性能瓶颈,优化系统性能 评估软件是否满足未...
    kalye阅读 2,688评论 0 0
  • 一. 性能测试 1.0 为什么要进行性能测试? 评估当前系统的能力 寻找性能瓶颈,优化系统性能 评估软件是否满足...
    纯良少年枫烨_feye阅读 4,413评论 0 0
  • Jmeter组件参数化 5.1. 参数化是什么 动态的获取并设置数据 5.2. 为什么使用参数化 执行批量操作,批...
    boke阅读 1,612评论 0 0
  • 一. 性能测试 1.0 为什么要进行性能测试? 评估当前系统的能力 寻找性能瓶颈,优化系统性能 评估软件是否满足...
    zflain阅读 1,522评论 0 0
  • 一. 性能测试 1.0 为什么要进行性能测试? 评估当前系统的能力 寻找性能瓶颈,优化系统性能 评估软件是否满足...
    745aacb67869阅读 1,666评论 0 0

友情链接更多精彩内容