Jmeter基础(工具认识)(一)

写在前面

本文主要是自己学习Jmeter工具的一个大纲,参考整理了很多网上的知识以及《Jmeter实战》这本书,部分信息未验证,也有些信息为自己理解,如有错误,请指正,共同提升,相关的工具、文件脚本会打包,方便大家下载。

一JMeter 介绍和安装

Jmeter是一款应用很广的开源性能测试工具,用来模拟虚拟用户完成性能测试工作,可以对Web应用进行测试同时提供了Web的录制功能,另外支持了多种请求,另外也支持Socket协议的测试。

安装:

安装配置JDK1.8,配置JDk运行环境

安装Jmeter4.0,配置Jmeter运行环境

Badboy2.2.5

JMeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过临听器来记录测试结果。如果取样器中有参数化的需求,可以通过配置元件或者前置处理器来完成。如果有关联需求,可以通过后置处理器来完成。如果我们想要设置运行场景,比如模拟多少用户,运行多长时间,就设置线程组。如果我们想要模拟并发场景,可以利用定时器来设置; 如果我们想要控制业务的执行逻辑,比如登录只运行一次,我们可以用控制器来完成。

二、Jmeter初步认识

JMeter工具和其他性能工具在原理上完全一致,工具包含四个部分:

1)负载发生器(发送请求):用于产生负载,通常以多线程或是多进程的方式模拟用户行为。(取样器)

2)用户运行器(请求规则):通常是一个脚本运行引擎 ,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为。(用户组)

3)资源生成器(资源数据):用于生成测试过程中服务器、负载机的资源数据。

4)报表生成器(数据报表):根据测试中获得的数据生成报表,提供可视化的数据显示方式。

2.1主要结构介绍

取样器

取样器Sampler(发送请求):性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,模拟用户的操作,向服务器发送的请求,提供的23个取样器原件支持绝大多数的请求

断言

验证结果是否正确,相当与loadrunner的检查点,用来验证返回结果是否正确,断言原件有13个

监听器

监听器Listener用来对测试结果数据进行处理和可视化展示的一系列元件。对测试结果的收集,有两个作用,一个是对结果的监听,另外一个是展示结果,如在调试等过程

前置处理器

前置处理器Pre Processors用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符 ,可以实现URL重写,当URL中含有sessionID一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID。

处理在请求之前的一些设置,比如连接数据库时的配置,在前置处理器完成

配置原件

两个作用,比如在参数化中,可能需要很多的测试数据,使用配置原件从文件中读取测试数据或者提供的函数生成动态数据,另外配置元件还能记录服务器的的返回数据,比如Http Catch Manager自动记录服务器返回的Catch数据,为取样器提供预备数据,提供给取样器下次请求使用

后置处理器

后置处理器放在取样器之后,对响应数据处理的原件,比如说关联就是通过该原件处理的

控制器

也叫逻辑控制器,控制执行的次数,执行的逻辑,多个控制器的组合可以完成大多数的业务需求

逻辑控制器Logic controller:有两类

(1)用于控制Sampler节点发送请求的逻辑顺序,常用:如果(If)控制器、switch Controller、Runtime Controller、循环控制器等 

(2)用来组织可控制Sampler节点的,如事务控制器Transaction Controller、吞吐量控制器

定时器

定时器比如设置集合点等信息,不仅仅这一个功能,定时器种类很多,可以满足各种时间的需求

线程组

 比如设置并发的虚拟用户数,还可以设置运行时长以及定时运行。

Test Fregment

         两个作用:一个是用来备份原件

         另外一作用就是TestFregment下的元件可以被逻辑控制器调用,相当于是开发中把某一业务封装在某一个模块里,然后在其他的位置调用。

工作台

         工作台

         可以用来用来设置代理服务器,录制脚本

         设置服务器监控(不建议,会对jemeter造成压力)

         脚本备份和显示jmeter信息。

2.2学习环境搭建

1、安装tomcat,网上找资料

2、安装数据库

3、新建对应名称的数据库

4、将下载的包解压放到tomcat的webapps目录下

5、启动tomcat并访问,按照操作安装

遇到问题:

1、  安装时需要在数据库中新建一个数据库jforum;

2、  访问地址一定要和文件夹的路径一致

3、  安装配置完成后会出现找不到发帖按钮,解决方式将在“jforum\templates\default\images”路径下,有一个文件夹,名字是“en_US”,将这个文件夹复制粘贴一份,将其命名为“zh_CN”,一定要注意文件夹名字必须写正确

环境的搭建参照博客:https://www.cnblogs.com/honeyhome/p/7279585.html

2.3、使用Bodboy调试录制脚本并调试

第一步:点击登录路进入到登录页面,并登录

第二步:选择一个板块进入

第三部:单击发帖按钮,并发帖,发帖成功停止录制,并导出jmeter文件

录制过程参考《全栈性能测试参考宝典》

1、乱码解决

替换jar包里的文件,参考https://blog.csdn.net/u012167045/article/details/70868306,需要的jar包已经提供。

2、请求后无法将提交请求的list转换为字符串格式

使用fiddler抓包,重新编辑请求参数

3、关联时关联无效

重定向的问题,修改自动重定向或者跟踪冲定向调试

4、使用txt文件做为参数数据源时,读入数据异常

使用txt文件作为参数化的数据源时,文件的开头会有不可见的编码,建议使用notepad++编辑文档后重新保存

自动重定向只能重定向get和head请求,但是Jmeter不记录重定向过程,无法进行关联

跟随重定向是可以记录所有的数据,可以重定向

https请求安全,但是效率相对http低一些

Use concurrent pool 并发检索资源,设置并发大小

2.4 基础入门操作

添加测试计划

测试计划的理解相对简单些,相当于一项目建一个测试计划,所有的控件都放到测试计划中。

在测试计划中科设置选项:

测试计划上可以添加用户定义的变量。一般添加一些系统常用的配置。如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用户自定义变量组件独立运行每个线程组:当一个测试计划中存在多个测试计划时是多个线程组同时运行的,当勾选了该选项就会一个线程组执行之后再执行另一个线程组

run teardown thread groups after shutdownof main thread:

如果没有勾选该选项,正常情况下,如果线程组执行失败,组件中包含teardown线程组,就不会执行了,而如果选择该组件还会继续执行该组件。有关teardown后续说明。

如果选中了此选项,监听组件如“查看结果树”配置了保存到一个文件中,那么jmeter会将每次的请求结果服务器返回信息都保存到文件中,比较影响性能,不建议勾选

设置线程组

线程组可以设置启动多少个虚拟用户,并设置在多少时间启动并设置循环次数以及持续运行时间的一个控件

在添加线程组时可以添加三个不同的线程组,只是执行顺序的设置不同,其他功能是一样的。1)setup thread group:预测试(初始化)操作,在另外两个线程组执行之前执行的线程组;2)teardown thread group:在另外两个线程组执行之后执行的线程组;

3)thread group:虚拟用户组。线程组中的每个线程模拟成每个虚拟用户。

在设置线程组中:

在取样器发生错误时的执行:

         继续:当取样器发生错误时,继续执行

         StartNext ThreadLoop:设置了多次循环或者多个虚拟用户,不在向下执行取样器,跳出当前循环

         停止线程:停止当前线程组的运行

         停止测试:停止测试

         StoptTest Now:停止整个测试?还不确定,后续验证

线程数:一个线程数就是一个虚拟用户,即我们的压力测试用户数

Ramp-Up Period(in seconds): 设置线程启动的时间间隔,如果线程数设置为10,这里设置为5秒,那么就是1秒启动2个线程。这里设置就是所有的线程在多少时间内全部启动完成,如果在短时间内启动过多数量时也会造成压力,建议合理时间内启动对应用户。

循环次数:循环执行的次数

delay thread creation until needed: 与Ramp-UpPeriod配合起来使用,正好解决上面的在短时间内启动较多用户数,服务器过载的问题,类似于loadrunner的思考时时间。如上面的启动线程的例子,如果勾选此项,那么每次启动两个线程运行后启动另外2个线程,而如果没有勾选,按照Ramp-Up Period(in seconds)的方式全部启动10个线程,然后逐次2个的运行开始

调度器:

持续时间:测试计划执行运行多长时间,这个选项需要与循环次数配合起来使用,如果循环次数设置为永远,这里的持续时间设置为300秒,那么在5分钟后线程就停止运行

启动延迟:这里的设置主要是为了延迟运行线程的时间,比如设置为10秒,点击运行按钮后,只执行初始化配置的信息,10秒后在运行线程。

添加取样器

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

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

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

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

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

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

7 Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用

8 Parameters、Body Data以及FilesUpload的区别:

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

   5、FilesUpload指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML

      进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中)

      如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载

配置元件

配置元件Config Element用于提供对静态数据配置的支持。

1)CSV Data Set Config:将本地数据文件形成DataPool,拆分后存储到变量中,适合处理多变量的场景

2)HTTP信息头管理器:可添加或者重载HTTP请求头。

3)HTTP Cookie管理器:两个功能

添加请求的默认管理工具,比如http请求的请求默认值,输入路径和编码,后续的取样器就可以不用填写了,还有如http cookies Manager和Http header Manager,还有一些登录用户的初始参数等

如在badboy录制时产生的脚本,已经自动添加

添加逻辑控制器

在badboy录制的脚本中,每一步其实就是一个逻辑控制器,比如一个场景,用户登录一次后连续发送多个帖子,那么就可以在发帖的一步中,增加一个循环控制器,填写循环次数,就可以完成发送多个帖子的任务。设置如字面意思,一个是一致循环,一个是指定循环次数。

设置关联

在实际有业务中,有时候一个接口使用的数据并不是来自用户输入或者外部文件,来自上一个接口返回的服务器返回的内容,而且是变化的,比如建立会话的SessionID,在我们的发帖中,发现会选择一个板块进行发帖,我们需要每次随机选择一个板块,不是固定一个板块发帖,那么使用关联进行处理。

在发帖中的接口,选择板块时是在请求的地址中http://localhost/jforum-2.1.9/forums/show/1.page的数字代表某一板块,而该数字可以是登录后服务端返回的数据中获得。在登录的后的请求添加后置处理切的正则表达式提取器

正则表达式语法在自主学习,该正则表达式就是在这个接口返回数据中按照上面的规则匹配出对应的数据。在该页面的设置中名称和注释不再解释,

Apple to:指的是应用的范围,这个后置处理器的应用范围

Main sample and sub-samples:匹配范围当前父取样器并覆盖至子取样器

Main sample only:匹配范围当前父取样器

Sub sample only:仅匹配子取样器

Jmeter variable name to use:支持对Jmeter的变量值进行匹配

要检查的响应字段:主要是正则表达式需要匹配的数据来源,分为七个部分,

Body(unescaped):针对替换了转义码的body

Body as Docment:返回内容作为一个文档进行匹配

信息头:只匹配信息头部分

URL:只匹配URL部分

响应代码:匹配响应代码,如匹配HTTP返回码200代表成功

响应信息:比如响应了ok,成功信息字样

引用名称:正则表达式匹配出的内容,通过此信息访问,使用时也是${引用名}的方式

正则表示式输入表达式的语法,括号里指的是取的值,如多个括号指多组匹配数据取值;

模板:如果是使用了多个正则表达式,那么每个正则代表一个模板,表示使用提取到的第几个值$1$:表示取第1组取值,$2$:表示取第二组取值;

匹配数字:0代表随机,1代表全部;

缺省值:是指在没有找到匹配时的默认值;

而在多组情况下使用不同组数据时,在应用时需要使用${引用名_g1}这种样式g1指的是第一组数据,g2指的是第二组数据

如上图在请求页面使用关联引用名称,执行后如果想查看关联的值是否正确在线程组中添加一个Dubug sampler

执行后,在结果树中可以查看到

参数化设置

例如在模拟登录操作时,可能需要多个用户,那么在发送的请求时,登录的用户名和密码可能需要多个,那么这些数据就可以进行参数化设置

首先给测试计划添加数据的来源,需要配置元件,增加存放.dat文件的路径,文件首行是参数名,中间的分割符在配置元件页面设置,文件需要无bom,建议使用notepad++进行编辑,txt自带了bom头,读取异常

然后在请求参数的位置设置参数化,参数的使用格式和关联很像,也是用${参数名}方式

添加断言

在我们执行测试计划时,主要用于测试结果和预期一致,如验证是否的登录成功,我们在请求后增加了一个响应断言,如果在响应文本中,找到用户名就是登录成功

响应断言页面元素详解:

Applay to:参考设置关联的正则表达式

要测试的响应字段:

针对响应数据的不同部分进行匹配,如

响应文本:响应服务器的响应的文本内容,http协议排除Header信息

响应代码:匹配响应代码,如http返回200成功

响应信息:匹配响应信息,如Http返回的“成功”、ok等信息

Response Headers:匹配响应头信息

Request Headers:匹配请求头信息

URL 样本:url

Docment(text):对文档内容进行匹配

Ingnore Status:如果一个请求里有多个断言,其中一个断言响应断言选中此选项,当第一个断言失败时,可以忽略第一个断言结果,继续进行下一个断言,如果下一个断言的成功还是能判断断言成功的(应用:如一个借口返回的数据是随机的几个数据,那么只要有一个匹配成功,都能算该接口是成功的)

Request Data:请求的data数据

模式匹配规则:

包括:响应的内容需要包括匹配的内容,支持正则表达式

匹配:响应内容要完全匹配需要匹配的内容,大小写不敏感,支持正则表达式

Equals:响应内容需要完全匹配需要匹配的内容,大小敏感,需要的内容是字符串非正则表达式

Substring:响应的内容包含需要匹配的内容才代表响应成功,大小写敏感,需要匹配的内容是字符串非正则表达式;

要测试的模式:需要匹配的内容

Custom failure message:添加些断言不成功时的提示信息,便于查看

使用事务控制器

在性能测试时,我们需要关注TPS,也就是每秒事务数,Jmeter将每个请求看做一个事务,我们可以添加事务控制器,将一个操作里的多个请求看做一个事务,事务控制器在逻辑控制器中,逻辑控制器主要是循环、分支等,满足各种场景的设计,如图

将登录的结果请求放到了“登录”事务中,如果勾选了,在结果树中还能查看事务下各个取样器,事务的成功取决于事务下的各个取样器是否成功。并且在结果树中事务的总时间可能会大于各个子取样器的时间和。

另一个选项“include duration…….”主要就是的是否包括定时器、处理、和后期延迟的时间

设置集合点

集合点让虚拟用户同一时刻发送请求,在Jmeter中集合点通过定时器完成,我们在登录时,需要加一个同步定时器

Number of simulated User to Group by:集合用户数

Timeout in milliseconds:超时时间,默认为0,没有超时限制

场景设计与监控

场景的设计通常线程组的设计,参照线程组,不同的业务场景,添加逻辑控制器,以及为了达到并发等需要使用到定时器信息,具体业务场景的需求设计一个具体的场景,有关监控首先是测试结果的观察,在测试计划点击添加,添加监听器的元件,常用的查看结果树,另外在做性能测试过程中需要对CPU、内存、网络带宽等资源进行监控,后续压测时说明。以下选择测试计划添加监听->Aggregate Report

Samples:执行了多少次取样

Average:平均响应时间

Median:响应时间中间值

90%Line:90%事务响应时间

Min:最小响应时间

Max:最大响应时间

Error%:出错率

Throughput:吞吐量,可以理解为Tps

KB/sec:数据传输量,单位KB

测试片段元素Test Fragment

是控制器上一种特殊的线程组。与thread group不同,只有当它是一个模块控制器或者是被控制器所引用时才会被执行。


    

猜你喜欢

转载自blog.csdn.net/qq_24126893/article/details/80108896