一文读懂 Jmeter - 你以为Jmeter只能用来做压力测试?

在这里插入图片描述


CSV Data Set Config


在这里插入图片描述


在这里插入图片描述


多个变量参数化与单个变量参数化的区别

单个变量


在这里插入图片描述


多个变量

  • 多个变量的情况下,使用“,”【英文格式】逗号作为分隔符,将关键字进行分隔.

在这里插入图片描述


用户参数与CSV Data Set Config

关于"用户参数""CSV Data Set Config"哪个元件用来做参数化更有优势,没有标 准答案,"两者都可以用",主要看使用者更倾向于哪一个。

一般情况下,参数化数据量不是很大的情况下,使用用户参数更为简便些。

如果参数化数据量比较大的情况下,比如开发导出来的CSV文件,CSV Data Set Config

要比用户参数来说更有优势些。

Jmeter - 集合点


可以理解为“增加并发、模拟并发”

定义:

简单的说,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的, 为了更真实的实现并发这概念,我们可以在需要压力的地方设置集合点,每到输入用户 名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。

如淘宝的秒杀,多个用户同时进行一个操作。

注意:

1、jmeter集合点通过添加定时器来完成。

2、JMeter里面的集合点通过添加定时器来完成。

3、Synchronizing timer仅作用于同一个JVM中的线程。

查看下文“注意点”处的补充。

操作步骤


在这里插入图片描述


在这里插入图片描述


注意:

  • Number of Simulated Users to Group by:

每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。

可理解为集合多少人后再执行请求

  • Timeout in milliseconds:

如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。默认为0。

  • 如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous

Users to Group by” 中设置的值,那么Test将无限等待,除非手动终止。

作用域

如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如下图

定时器仅仅对HTTP请求1起作用,即仅在HTTP请求1执行前执行定时器,和HTTP请 求2无关。


在这里插入图片描述


如果希望synchronizing timer应用于多个sampler.

如下,执行HTTP请求1和HTTP请求2前都会执行同步定时器1、2。当执行一个sampler 之前时,和sampler处于相同作用域的定时器都会被执行;


在这里插入图片描述


注意点

问:集合点的位置一定要在Sample(采样器)之前才能生效吗?

答:在Jmeter中,timer是在sampler之前执行的。不管这个定时器的位置放在sampler之 后,还是之前。当然,如果有多个timer的时候,在相同作用域下,会按上下顺序执行 timer,这个就需要慎重放置timer的顺序;不过,为了更好的可读性,还是建议将timer放在对应的sampler前面 或 子节点中;

关于Synchronizing timer补充: Synchronizing timer 仅作用于同一个JVM中的线程。

  • a.如果分布式测试时

synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm 工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;

  • b.如果分布式测试

并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数

关于集合点,在实际应用中基本上是不用的,或者说非常少非常少用。

其实,仅仅就集合点来说,影响性能么?答案:影响。那么影响大么?答案:其实也不是太大。

因为一个系统能够承受的并发数和压力取决于两点。

  • 取决于业务脚本里的思考时间

同样的并发、同样压力情况下,若思考时间不同,能够承受的压力也是不同的。

  • 取决于系统真正的处理能力,或者说 TPS【系统吞吐量,亦说QPS】,TPS每秒处理的能力越高,那么处理压力的能力相对来说就会多一些。

Jmeter—断言/检查点


按照Jmeter官方的翻译过来叫“断言”,其实功能与LoadRunner的“检查点”是一样 的,叫法不一样罢了(文字游戏)

断言/检查点

对响应的结果做一个判断。

响应断言

注意点

1、模式匹配规则

2、要测试的模式


在这里插入图片描述


在这里插入图片描述


响应断言的参数

Apply to:响应作用范围

1、Main sample and sub-samples:断言应用于主采样器和子采样器。

2、Main sample only:断言仅应用于主采样器。

3、Sub-samples only:断言仅应用于子采样器。

4、Jmeter Variable:断言将被施加到命名变量的内容,变量值进行匹配

要测试的响应字段

1、响应文本:指页面返回的http文本内容 。

2、响应代码:指请求返回的状态,如200 。

3、响应信息:指请求返回的响应信息,如OK、not found 。

4、Response Headers : 响应头信息 。

5、Request Headers :请求头信息。

6、剩余几个还不了解~~

模式匹配规则:

1、包括=返回结果包括你指定的内容,支持正则匹配

2、匹配:

(1)相当于 equals 。当返回值固定时,可以返回值做断言,效果和equals相同

(2)正则匹配 。 用正则表达式匹配返回结果,但必须全部匹配。 即正则表达式 必须能匹配整个返回值,而不是返回值的一部分。

3、Equals ::返回结果与指定断言完全一致

4、SubString:与 “包括”差不多,都是指返回结果包括你指定的内容,但是SubString不支持正则字符串。

断言结果

对“响应断言”的“断言结果”进行再次的判断

增加"断言结果"

在这里插入图片描述


断言结果判定
  • 成功

如果成功,“断言”一栏显示请求地址


在这里插入图片描述


  • 失败

如果失败,“断言”一栏请求地址下方显示报错原因。


在这里插入图片描述


Jmeter—关联/动态关联


1、和LoadRunner中的关联差不多

2、Jmeter中关联的两种方式:正则、xpath(一般xml的时候用的多)

正则:一般用的比较多的是正则

XML:返回的数据是XML格式的情况,用XML居多

3、以webtours登录威力进行演示 webtours.jmx

webtours:LoadRunner自带的

步骤

1、webtours开启关联

2、badboy录制

3、导入Jmeter

4、找出需要关联的请求(nav.pl)

5、该请求 --> 后置处理器 --> 正则 --> 填入内容

6、增加断言

7、增加断言结果

8、运行查看


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 模板:如果前面的正则表达式取了不止一个参数,那么这里需要制定参数的组别,如果该参数为 1 1 1,则表示取得第一个值, 2 2 2表示取得第二个值

  • 匹配数字:0随机; -1取所有值,以数组形式存储; 1; 2…

  • 缺省值:一般默认即可(为空)

Jmeter—web程序


项目背景

  • XX网站

  • 环境:Windows

需求

  • 并发登录的性能

场景

  • 1s增加2个线程;运行2000次。

  • 分别查看20、40、60并发下的表现

监控

  • 成功率、响应时间、标准差、CPU、MEM、IO等

  • 资源监控需要在Windows / Linux下部署监控agent (server agent)

步骤

  • badboy录制

  • 导入jmeter

  • 参数化、检查点、集合点

  • 指标监控,资源监控

  • 报告(可导出到xls,然后自行生成报表)

  • 演示login.jmx


在这里插入图片描述


注意点

关于 “聚合报告 --> 响应数据” 中文乱码解决方法

监控内存及CPU等(jconsole)

最近逛论坛的时候,发现了一个比较好的监控内存CPU等的小工具,本着开源小工具多 多益善的原则,记录一下。

打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就 不用去做其他的配置,直接 点击:开始——》运行——》输入cmd——》然后在出现的 命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】


在这里插入图片描述


在这里插入图片描述


Jmeter–FTP程序


需求

  • 上传一个文件到服务器(put)

  • 下载一个文件到本地(get)


在这里插入图片描述


步骤

  • 打开Jmeter

  • 线程组

  • ftp请求缺省值(可有可无)

  • ftp请求(get和put两种)

  • 如果有用户名和密码填上即可

Jmeter—jdbc测试mysql数据库


JDBC Connection Configuration

测试计划需加载Jar包


在这里插入图片描述


参考链接:https://blog.csdn.net/u012167045/article/details/72638507

参考链接:https://jingyan.baidu.com/article/f96699bbf5d092894e3c1b87.html


这张图好像有点失帧了,凑合吧…

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


关于jdbc中文乱码的说明

第一步:请确认你在数据库中写sql出来的中文是正常显示的,并没有出现问号或乱码, 如果出现那是数据库编码的问题,和jmeter无关;

第二步:在第一步确认的前提下,修改jmeter jdbc databaseurl

jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true,前面的链接地址和端口以及数据库名根据实际情况修改,后面的参数固定,这样就可以解决问号乱码的问题了。

Jmeter—分布式性能测试


Jmeter由java开发,耗内存、cpu,所以大并发下还是需要分布式的。

原理

其实和LoadRunner的agent差不多,如下图所示。


在这里插入图片描述


  • 调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试 结果收集汇总,报告产出。

  • 执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面), 并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及 详细断言信息。

步骤

  • 关闭防火墙

  • 在所要运行Jmeter并作为负载生成器的机器上安装Jmeter,并确定其中一台机器作

为主的controller,其他的机器作为agent。然后运行所有的agent机器上的

jmeter-server文件.【Win系统运行“jmeter-server.bat”、Linux运行“jmeter-server”】

  • 在controller机器的jmeter的bin目录下,找到jmeter.properties文件

在这里插入图片描述


  • 启动controller机器上的Jmeter应用,选择菜单“运行” —> “远程启动”,来

分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。

Jmeter 中的监听器以及测试结果分析


监听器

  • 种类繁多…看界面

  • 常用的几个

  • 断言结果

  • 查看结果树

  • 聚合报告

  • 用表格查看结果

  • 图形结果

  • aggregate graph

  • 等等…

指标分析

  • Samples:表示本次场景中一共发出了多少个请求。

  • Average:平均响应时间—默认情况下是单个Request的平均响应时长,当使用了

Transaction Controller时,也可以以Transaction为单位显示平均响应时长。

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

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

  • Min:访问页面的最小响应时间。

  • Max:访问页面的最大响应时间。

  • 以上时间单位为毫秒…不要弄错了

  • Error%:出错率;错误请求的数量/请求的总数

  • Throughput:吞吐量。默认情况下表示每秒完成的请求数(Request per Second),当使用了Transaction Controller 时,也可以表示类似 LoadRunner 的Tranaction per Second数。

  • KB/Sec:流量。每秒从服务器端接收到的数据量。

jtl文件分析 —> 见test.jtl

  • 在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保

存测试结果,也可以为日后的性能测试报告提供更多的素材。

  • Jmeter中,结果都存放在“.jtl”文件。这个“.jtl”文件可以提供多种格式的编写,

而一般我们都是将其以CSV文件格式记录。

  • 只需要选择某个监听器,点击页面中的configure按钮。此时,一个设置页面就会弹

出来,建议都勾选如下项:Save Field Name , Save Assertion Failure Message

  • 经过了以上设置,此时保存下来的“.jtl”文件会有如下项:

  • timeStamp,elapsed,lable,responseCode,responseMessage,threadName,

dataType,success,failureMessage,bytes,Latency

  • 请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属 的线程,数据类型,是否成功,失败信息,字节,延迟。

Jmeter 调用第三方jar包


  • 有时候我们在测试接口的时候需要调用第三方Jar包来完成。比如,某些数据的加密需要调用加密的Jar包,在Jmeter里可以很方便的完成。

  • Jar包 找开发要!找开发要!找开发要!

  • “测试计划”一栏下方调用Jar包


  • 大致步骤如下:

  • 获取需要调用的Jar包

  • Jmeter的测试计划中天加Jar包

  • 通过beanshell sample 进行调用并保存结果

  • 在Jmeter中需要用到该值的地方直接使用即可

参考链接:jmeter完成md5加密的接口请求参数


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


Jmeter - 测试webservice


附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行 webservice接口的测试。(了解即可)

概念


  • 官方解释:Web Service是一种可以接收从Internet上的其他系统传递过来的请求,轻量级的独立的通讯技术。通过SOAP协议完成,使用WSDL文件进行描述内容。

  • 粗暴解释:当作一个接口,和HTTP没区别。完成请求,请求的时候完成入参,响应的时候完成出参,响应的时候有返回及返回的参数。

  • 接口请求中的一种。

  • 接口的本质其实就是发送请求和响应的一个过程。

Jmeter3.x测试webservice接口

附:jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


生成唯一数UUID


在这里插入图片描述


四、常见逻辑控制器

============================================================================

简单控制器


无任何实际作用,也不参与脚本运行,可以理解为就是一个分组或者打标签用的。


在这里插入图片描述


ForEach控制器


ForEach控制器在用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控 制器都会被执行一次或多次,每次读取不同的变量值。

所以ForEach总是和(用户定义的变量)一起使用的。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


switch控制器



在这里插入图片描述


在这里插入图片描述


如果if控制器


根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行 判断。当满足一定的条件,运行指定的请求。


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


  • 名称:IF逻辑控制器的简述。

  • 注释:对逻辑控制器的详细描述。

  • 条件:判断条件,可以引用变量。当为 true 时,执行响应的操作。


在这里插入图片描述


在这里插入图片描述


事务控制器


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

2、会生成一个额外的采样器来测量其下测试元素的总体时间。值得注意的是,这个时间包含该控制

器范围内的所有处理时间,而不仅仅是采样器的。

3、统计事务控制器底下的子节点运行的时间


在这里插入图片描述


Generate Parent Sample不选中情况下,用表格察看结果显示为[下图]


在这里插入图片描述


其中事务采样器采集的数据排在子采样器数据之后,同时各列数据略大于子采样器数据之和。

Generate Parent Sample选中情况下,用表格察看结果显示为[下图]


在这里插入图片描述


其中仅显示事务采样器采集的数据,而不会显示子采样器采集的数据。

循环控制器


循环控制器下子节点的次数


在这里插入图片描述


“循环控制器"的“循环次数”等于子节点的请求次数。

当"线程组"也存在循环次数时,

请求的次数为"线程组-循环次数” *“循环控制器-循环次数”的"积”。


在这里插入图片描述


吞吐量控制器


控制子节点运行的次数


在这里插入图片描述


在这里插入图片描述


Per User选项的用处:

勾选:会按照每个线程单独计算吞吐量,如线程组设置了5个线程,循环次数为2的情 况,吞吐量为1时,吞吐量的子节点每个线程执行一次,总共会执行5次。

不勾选:按照全局的执行数次进行计数,如线程组设置了5个线程,循环次数为2的情 况,吞吐量为1时,吞吐量的子节点仅会执行一次。

随机 / 随机顺序控制器


随机控制器

随机的选择子节点下的请求去运行


在这里插入图片描述


在这里插入图片描述


随机顺序控制器

子节点下的请求都执行,但是执行的请求是随机的。

例:如果“随机顺序控制器”下的请求有两个、循环5次。那么请求共执行10次,顺序随机。


在这里插入图片描述


在这里插入图片描述


五、Jmeter定时器

==============================================================================

可以理解为间隔时间、停留时间、思考时间

规则:

  • 1、定时器执行于每一个sampler(HTTP请求) 之前,如有多个sampler(HTTP请求),在同一层级的情况下,作用于多个sampler。

在这里插入图片描述


  • 2、若定时器作为子节点,则该定时器仅作用于某一个sampler。

在这里插入图片描述


固定定时器


设置一个固定的停顿时间,停顿时间过后,才会执行下一步请求。

单位:毫秒


在这里插入图片描述


设置循环2次,执行过程中能够明显看到两次,请求之间的时间间隔。


在这里插入图片描述


高斯随机定时器


基本同上,只是定时器的延时时间是在指定范围内的正态分布。


在这里插入图片描述


同步定时器 Synchronizing Timer


类似LoadRunner的集合点,和(rendezvous point)差不多的功能。

在该定时器处,使线程等待,一直到指定的线程个数达到后,再一起释放。可以在瞬间 制造出很大的压力。


在这里插入图片描述


在这里插入图片描述


均匀随机定时器(Uniform Random Timer)


同上,延时时间是在指定范围内,并且每个时间取值的概率相同。

固定吞吐量定时器(Constant Throughput Timer)


可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数, 而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程 组,并且计算吞吐量的依据可以是最近一次线程的执行时延。

这种定时器在特定的场景下,还是很有用的。

BeanShell定时器(BeanShell Timer)


这个定时器,平时用不上。但实际上,它是最强大的,因为可以自己编程实现想要干的 任何事。

有复杂需求时,就要靠它了。例如,希望在每个线程执行完等待一下,或者希望在某个 变量达到指定值的时候等待一下。

六、Jmeter配置元件

===============================================================================

HTTP请求默认值


设定一些缺省值、默认值

假如,我们创建一个测试计划有很多个HTTP请求,且都是发送到相同的server,这时 我们只需添加一个 Http request defaults组件(HTTP请求默认值)并设置“Server Name or IP”(服务器名称或IP),然后添加多个HTTP请求且不设置"server name or ip",这些 HTTP请求会默认使用Http request defaults组件(HTTP请求默认值)设置的值。


在这里插入图片描述


作用域


可以设置成全局变量,也可以设置成局部变量,当在线程外设置,线程内也设置了,使 用线程内的默认值。


在这里插入图片描述


HTTP信息头管理器


使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信 息。HTTP信息头中包含有”User-Agent"、“Pragma"、”Referer"等属性。尽可能放在线程 组一级。除非因为某些原因,测试人员希望不同的HTTP请求使用不同的HTTP信息头。

一般请求格式:

1、类似form表单—不填

2、参数json格式—application/json

3、参数是xml—text/xml

Content-Type


在这里插入图片描述


HTTP授权管理器


可以理解为一个用户名、密码的验证过程

在与客户端浏览器、服务器之间发生交互发生请求的时候,提供一个凭证。


在这里插入图片描述


在这里插入图片描述


HTTP Cookie管理器


Cookies是什么

  • 储存在用户本地终端上的数据

  • session

  • 相对的session是存储在远程服务器上的数据

  • 通常情况下,当用户结束浏览器会话时,系统将终止所有的Cookie。当Web服务

器创建了Cookie后,只要在其有效期内,当用户访问同一个Web服务器的时,浏

览器首先要检查本地的Cookies,并将其原样发送给Web服务器

  • Cookies 最典型的应用是判断注册用户是否已经登陆网站,用户可能会得到提示,

是否在下一次进入此网站时保留用户信息以便简化登陆手续,这些都是Cookies的

功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同

一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付

款时提取信息。

Cookies的管理

自动管理Cookies
  • 在Jmeter配置文件中找到“jmeter.properties”配置文件

  • 在文件中搜索“#CookieManager.save.cookies=false”,将“false”改为“true”

并将“#”号去掉,否则不会生效,然后重启Jmeter即可。


在这里插入图片描述


在这里插入图片描述


手动管理Cookies
  • 可以利用firefox中的导出cookies之后,再导入Jmeter中,轻松完成。

  • 前提是FireFox浏览器安装好“FirePath”插件,具体安装方法自行百度。

  • 通过FireFox的FirePath插件将Cookies导出,再在Jmeter载入即可。


在这里插入图片描述


在这里插入图片描述


用户定义的变量


类似于公共的元素公共的值。

前期自己定义好一个变量,后续可以直接引用变量的名称。

使用场景:一组API根据业务流程制作成测试脚本,想要移植到其他测试环境时,由于 数据库发生了变更,有些初始化数据也相应发生了变化,例如环境地址、请求路径等等。 甚至可以把服务器地址和接口的部分共同请求路径都做成了自定义变量。


在这里插入图片描述


在这里插入图片描述


实例

jmeter的自定义变量可以让我们随机选取变量,从而达到在性能测试过程中可以随机选 取变量的目的。但是在实际使用中发现一个问题,并不试用于所有场景,比如登录

我的自定义变量如图:


在这里插入图片描述


在登录表单中的随机变量取值方式为:

在这里插入图片描述


运行完后结果为:

在这里插入图片描述


可以看到,两个用户有一个登录成功,有一个失败,这是因为在取值时${__RandomFromMultipleVars(user1|user2)},用户名是随机取一个,而密码 ${__RandomFromMultipleVars(password1|password2)}也是随机取一个,而密码与用户名 取的时候是独立的,有可能取到的用户名与密码不匹配,这是只有两个用户,要是用户 多的话可能会导致大量的登录失败。此种情况有两种解决方案,

第一:

不使用${__RandomFromMultipleVars(password1|password2)}这个方法来取变量, ${__V(user${__threadNum})},换为这个方法,这个方法取的时候是第一个用户的 __threadNum就是1,这样就能取到user1,密码同理也是取到password1,这样就能保证密码与用户名完全匹配了。

第二:

不用用户自定义变量,而是从csv文件中读取,在csv中取值是按行从左到右取值的, 把一个用户名密码写在同一行,这样取值的时候也能保证用户名与密码保持一致。

参考链接:https://blog.csdn.net/shuimengzhen/article/details/54410965

计数器


做数字记录的功能


在这里插入图片描述


在这里插入图片描述

----在这里插入图片描述


七、Jmeter后置处理器

================================================================================

在Sampler运行后执行。

在测试过程中,经常需要从请求的响应数据汇总,找到某些参数,作为下一个请求的参 数,这时候需要用到后置处理器。

Debug Postprocessor


Debug PostProcessor(调试后置处理器)使用前面的采样属性的详细信息创建了一个子 样例,jmeter变量、属性和系统属性。

结果的值可以在监听器—观察结果树中查看返回值。


在这里插入图片描述


在这里插入图片描述


举例



在这里插入图片描述


作用域示例



在这里插入图片描述


  • 请求外(out Debug PostProcessor):

  • 所有请求对Debug PostProcessor都是上一个请求,可获取当前请求之前所有测试计划、 用户定义的变量、参数化变量、 请求产生的变量数据。但无法获取请求内的前、后置 处理器定义生成的变量;

  • 请求内(inner Debug PostProcessor):

  • 当前所属请求为其上一个请求,可获取当前线程之前所有测试计划、用户定义的变量、 参数化变量、 请求产生的变量数据,以及当前 请求产生的变量数据。

Json Extractor


获取Json格式响应数据的


在这里插入图片描述


$.error_code$.result$.result.id

比如某一请求的返回值为:

{"statusCode":200,"data":{"userId":"4a2cbe616eb74f0d99190af072c8dea6","token":"37e7a9e198186f5a443e50e6138a5bd20bd"}}

这里因为返回的是json数据,$.data.token,获取token的值

但是有碰到一个坑

另外一个接口请求返回值为:

{"statusCode":200,"data":[{"code":"407949","id":"aa477ad2085d492a99b877d14343d68d","name":"90一中4545"}]}

同样,使用$.data.id去提取id的值时,发现获取到的数据为空

原来这个responses 的data为数组,故应为 $.data[0].id 提取第1个值

如下:


在这里插入图片描述


备注:

JSON中 data 是一个对象数组,data[0] 代表取的是第一个数组的对象,data[*] 代表取全部对象。

.id 取的是id的值 .name取的是name的值。

例如,返回值为:

{

“status”:0,

“data”:

{

: “resources”:

: [

: : {

: : : “id”:1,

: : : “name”:“广告位”

: : },

: : {

: : : “id”:2,

: : : “name”:“优惠券”

: : },

: : {

: : : “id”:3,

: : : “name”:“实物赞助”

: : }

: ],

: “trades”:

: [

: : {

: : : “id”:546,

: : : “tradeName”:“IT/互联网”

: : },

: : {

: : : “id”:547,

: : : “tradeName”:“游戏/动漫”

: : },

: ]

}

}

这里要分别取resources 和 trades 的所有id值,表达式可以写:$.data.trades[*].id 。(代表trades下所有子集中的id)


在这里插入图片描述


获取XML格式相应数据的

以“Jmeter_webservices.jmx”为例


在这里插入图片描述


APPly to:作用范围(返回内容的断言范围)

Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器

Main sample only:仅作用于父节点的取样器

Sub-samples only:仅作用于子节点的取样器

JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称

XML Parsing Options:要解析的XML参数

Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;

Quiet表示只显示需要的HTML页面,Report errors表示显示响应报错,Show warnings表示显示警告;

Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;

Validate XML:根据页面元素模式进行检查解析;

Ignore Whitespace:忽略空白内容;

Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;

Return entire XPath fragment of text content:返回文本内容的整个XPath片段;

Reference Name:存放提取出的值的参数;

XPath Query:用于提取值的XPath表达式;

Default Value:参数的默认值;

八、Jmeter监听器

==============================================================================

利用监听器监控执行过程中的数据;如执行次数、响应时间、吞吐量、错误率等等…

在jmeter中,通过监听器组件来提供查看、保存、和读取已保存的测试结果功能。

默认情况下,测试结果将被存储为xml格式的文件,文件的后缀: “.jtl”。另外一种存储 格式为CSV文件,该格式的好处就是效率更高,但存储的信息不如xml格式详细。

常用监听器报告


查看结果树

使用Jmeter测试过程中使用最多的监听器

可以在测试过程中可以看到请求的参数、响应的结果,方便对测试脚本的结果做出判断

但是在实际项目过程中,不论是接口自动化测试还是性能测试,在真正运行测试脚本的 时候。一般情况下,查看结果树是需要关闭的。

附:一般只运用于调试脚本。

Summary Report

概要报表;概要信息报告


在这里插入图片描述


所有数据写入一个文件:保存测试结果到本地。

文件名:指定保存结果。

仅日志错误:仅保存日志中报错的部分。

Successes:保存日志中成功的部分。

Configure:设置结果属性,即保存哪些结果字段到文件。一般保存必要的字段 信息即可,保存的越多,对负载机的IO会产生影响。

Label:取样器/监听器名称 [最好改成业务名称]

Samples :事务数量

Average:平均一个完成一个事务消耗的时间(平均响应时间)

Median:所有响应时间的中间值,也就是 50% 用户的响应时间,大概是这个意思

Min:最小响应时间

Max:最大响应时间

以上单位都是ms

Std.Dev:偏离量/标准差,值越小表示越稳定

Error %:错误事务率

Throughtput:每秒事务数,即tps 吞吐量

Received KB/sec:网络吞吐量;接收和发送的网络流量 单位是KB

Avg.Bytes:平均数据流量,单位是Byte。

聚合报告


在这里插入图片描述


Label:请求对应的name属性值。

Samples : 具有相同标号的样本数,总的发出请求数。

Average :请求的平均响应时间。

Median - 50%:50%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第50%的值。

90% Line :90%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第90%的值。

95% Line :95%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第95%的值。

99% Line :99%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第99%的值。

Min : 最小响应时间。

Max : 最大响应时间。

Error % :本次测试中,有错误请求的百分比。

Throughput : 吞吐量是以每秒/分钟/小时的请求量来度量的。这里表示每秒完成的请求数。

Received KB/sec : 收到的千字节每秒的吞吐量测试。

Sent KB/sec : 发送的千字节每秒的吞吐量测试。

聚合报告中的90%的理解

90% Line :90% of the samples took no more than this time. The remaining samples at leastt as long as this.

一组数由小到大进行排列,找到他的第90%个数(假如是12),那么这个数组中有90% 的数将小于等于12 ,也就是90%用户响应时间不会超过12 秒。

聚合图表(Aggregate Graph)

一般情况下使用不多,出图表的效率与LoadRunner 还是又一定的差距的。


在这里插入图片描述


Jmeter也有Loadrunner一样的图形监控扩展


Jmeter的痛点

1、图形监控,相比Loadrunner还是是逊色不少的

2、能监控Windows或Linux吗?就想Loadrunner一样。

扩展插件

  • 下载plugins-manager.jar并将其放入lib / ext目录,然后重新启动JMeter

  • 下载地址:https://jmeter-plugins.org/downloads/old/

  • 我们需要将serverAgent目录下面的文件复制到我们的测试的服务器上,然后点击打

开(我这里是本机,直接在本机上面打开这个应用系统即可,它的默认端口:4444)

百度云盘链接:http://pan.baidu.com/s/1skZS0Zb 密码:isu5

其中JMeterPlugins-StandardJMeterPlugins-Extras是客户端的插件,ServerAgent是服务端的插件。

下载成功后,复制JmeterPlugins-Extras.jarJmeterPlugins-Standard.jar两个文件,放到jmeter安装文件中的lib/ext中,重启jmeter,即可看到该监视器插件。如下图:


在这里插入图片描述


在这里插入图片描述


将ServerAgent-2.2.1.jar上传到被测服务器,解压,进入目录,Windows环境,双击

ServerAgent.bat启动;linux环境执ServerAgent.sh启动,默认使用4444端口。

如出现如下图所示情况,即表明服务端配置成功:


在这里插入图片描述


  • 服务端启动校验

  • CMD进入命令框,观察是否有接收到消息,如果有,即表明ServerAgent成功启动。


  • 客户端监听测试

  • 给测试脚本中添加jp@gc - PerfMon Metrics Collector监听器,然后添加需要监控的服务 器资源选项,启动脚本,即可在该监听器界面看到资源使用的曲线变化。如下图所示:


在这里插入图片描述


在脚本启动后,即可从界面看到服务器资源使用的曲线变化,Chart表示主界面显示, Rows表示小界面以及不同资源曲线所代表的颜色,Settings表示设置,可选择自己需要 的配置。

PerfMon Metrics Collector

即服务器性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控 服务器的资源使用情况,比如CPU、memory、I/O等。该插件可以在性能测试中实时监 控服务器的各项资源使用。

使用方法参照上述的 “客户端监听测试”

Response Times Over Time

即TRT:事务响应时间,性能测试中,最重要的两个指标的另外一个。该插件的主要作 用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

使用方法如上,下载安装配置好插件之后,重启jmeter,添加该监视器,即可实时看到 实时的TRT数值及整体表现。

某次压力测试TRT变化展示图:


在这里插入图片描述


Transactions per Second

即TPS:每秒事务数,性能测试中,最重要的2个指标之一。该插件的作用是在测试脚 本执行过程中,监控查看服务器的TPS表现————比如 JU


在这里插入图片描述


某次压力测试TPS变化展示图:

在这里插入图片描述


Hits per Second

点击率

在做性能测试的时候,不建议添加太多的监听器,在并发量高得情况下

会出现问题,毕竟Jmeter 是需要读取文件的。

邮件观察仪


在QQ/163邮箱中开启pop3/smtp服务,并生成授权码,备用


在这里插入图片描述


在jmeter中添加邮件观察仪,并配置如下


在这里插入图片描述


在这里插入图片描述


说明信息:

1、文件名:只需要给出路径和保存的文件名称即可,给定之后将会把测试结果的数据写入到文件中

注:它不会将此文件已附件的形式在邮件中,只是将测试结果写入到了定的此目录文件中,如果你运行完脚本,

直接在此路径下打开此文件就可以看到运行结果

2、Address(s):收件人,添加多个收件人邮箱时,中间用逗号隔开,

如:lucky@iberhk.com,bob@iberhk.com

3、Success Limit与Failure Limit:当成功数与失败数为几时进行邮件的发送,我写的1,则失败1次后将发送邮件通知我

4、SMTP的配置见下文


SMTP的配置

重要信息:

HOST:smtp.exmail.qq.com

Port:465

Login:登录的邮箱,填写自己的邮箱即可

Password:16位的授权密码

Connection Security:一定要选SSL

如何获取授权码自行百度。


点击test mail则会在对应邮箱中收到邮件

在测试过程,需要配置success limit failure limit的值


在这里插入图片描述


九、什么是接口?

===========================================================================

官方定义:

接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作 分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。

人类与电脑等信息机器或人类与程序之间的接口称为用户界面。电脑等信息机器硬件组 件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。

在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换 可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。

白话文理解:

通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文

做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一过程(request(请

求)→response(响应));

类似我们的黑盒共嗯那个测试,即内部具体结构你不知道,但你需要知道我输入的什么,

之后输出什么才是对的,什么才是错的。这就是白话解释的接口。

接口类型以及特点



在这里插入图片描述


HTTP

1、基于HTTP协议,通过post和get得到想要的东西

2、处理数据效率较高

3、当你需要调用一个你本服务的内容的时候,不涉及到跨域的问题,使用HttpService的方式

WebService

1、使用soap协议得到想要的东西

2、能处理比较复杂的数据类型 (一般都是xml)

3、如果,你需要在后台调用一个其他应用的服务,这时候用WebService的方式来调用。

报文介绍

以访问 http://xqtesting.blog.51cto.com/4626073/1669386 为例

妈蛋 真不想写这玩意儿!


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


接口测试文档规范


文档重要性

没有文档就没有根据,就好比没有需求的产品最后做出来的都是垃圾一样。

接口文档规范

以 微博API/获取当前登录用户及其所关注用户的最新微博 为例

微博APIhttp://open.weibo.com/wiki/微博API

获取当前登录用户及其所关注用户的最新微博http://open.weibo.com/wiki/2/statuses/home_timeline

接口名:接口的解释

请求类型:get/post

数据传递格式:json/xml

前置条件:是否登陆

请求参数:多少参数;可选还是必选;类型/含义;

返回参数:返回参数有哪些;类型/含义;

错误代码解释:不同的错误代码,不同的解释。

十、各类接口测试实战

=============================================================================

讲道理这一小章节着实有点水,真心不想写了!完全可以忽略!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换 可以发生在计算机软、硬件,外部设备或进行操作的人之间,也可以是它们的结合。

白话文理解:

通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文

做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一过程(request(请

求)→response(响应));

类似我们的黑盒共嗯那个测试,即内部具体结构你不知道,但你需要知道我输入的什么,

之后输出什么才是对的,什么才是错的。这就是白话解释的接口。

接口类型以及特点



在这里插入图片描述


HTTP

1、基于HTTP协议,通过post和get得到想要的东西

2、处理数据效率较高

3、当你需要调用一个你本服务的内容的时候,不涉及到跨域的问题,使用HttpService的方式

WebService

1、使用soap协议得到想要的东西

2、能处理比较复杂的数据类型 (一般都是xml)

3、如果,你需要在后台调用一个其他应用的服务,这时候用WebService的方式来调用。

报文介绍

以访问 http://xqtesting.blog.51cto.com/4626073/1669386 为例

妈蛋 真不想写这玩意儿!


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


接口测试文档规范


文档重要性

没有文档就没有根据,就好比没有需求的产品最后做出来的都是垃圾一样。

接口文档规范

以 微博API/获取当前登录用户及其所关注用户的最新微博 为例

微博APIhttp://open.weibo.com/wiki/微博API

获取当前登录用户及其所关注用户的最新微博http://open.weibo.com/wiki/2/statuses/home_timeline

接口名:接口的解释

请求类型:get/post

数据传递格式:json/xml

前置条件:是否登陆

请求参数:多少参数;可选还是必选;类型/含义;

返回参数:返回参数有哪些;类型/含义;

错误代码解释:不同的错误代码,不同的解释。

十、各类接口测试实战

=============================================================================

讲道理这一小章节着实有点水,真心不想写了!完全可以忽略!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-VHR8GWOb-1713729685722)]

[外链图片转存中…(img-hz5ncDGM-1713729685723)]

[外链图片转存中…(img-izJOJhGn-1713729685723)]

[外链图片转存中…(img-OLEtCu6S-1713729685724)]

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值