JMeter之Http协议接口性能测试
Posted 性能测试之道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter之Http协议接口性能测试相关的知识,希望对你有一定的参考价值。
》》》推荐阅读《《《
1、
2、
3、
4、
1、jemeter是用来进行接口的协议接口和性能,常用的接口协议有下面的类型
2.1,常见的接口协议
1.;2. ;3. ;4.;5.;
3.1,JMeter功能介绍
JMeter的应用领域:1.Browser架构应用的性能;2.Http协议接口功能与性能;3.FTP协议接口功能与性能;4.mysql数据库性能;5.MongoDB数据库性能;6.支持自定义java组件开发
jmeter的简单使用
步骤一:添加线程组
步骤二:添加http请求
步骤三:添加参看数目,参看运行的结果
往Http请求Sampler添加擦看结果树与聚合报告(用于查看Sampler运行结果),如下图所示:
添加结束后,点击运行,运行后,通过察看结果树与聚合报告,分析测试结果,入下图所示(分别是查看结果树结果,聚合报告结果):
一般有两种方法,方法1,通过在中输入utf-8;方法2,修改JMeter安装路径中的jmeter.properties文件,jmeter.properties文件文件的路径如下图:
如果以上两种方法都不能解决乱码的问题,还有下面的方法,输入:prev.setDataEncoding("utf-8")
一般还要再加一个维度:聚合报告
注意:“查看结果树”一般只用来辅助调试测试脚本,但因为它会打印大量的数据,消耗IO、CPU,而且消耗是比较大的,影响聚合报告中的测试结果,所以在真正的测试过程中一般会去掉“查看结果树”
这样,对结果进行分析,就能完成一次简单的测试。
聚合报告的结果,字段代表的含义:
jmeter中线程组的设置
2、线程属性
线程数:当前线程数量,可以简单的理解为用户数量。
Ramp-up Period (in seconds):达到上面指定线程数所花费的时间,单位为秒。举个栗子:假设线程数为100个,花费时间20s,那么每秒启动的线程数 = 线程数/时间,即100/20 = 5。换句话说,就是1秒启动5个线程。
循环次数:勾选“永远”选项,则线程组一直循环。否则,以后面所填数量为准。
Delay Thread creation until needed:当线程需要执行的时候,才会被创建。如果不勾选此选项,所有线程在开始时就全部被创建。
调度器:勾选此选项,才可修改下面的调度器配置。
线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
Delay Thread creation until needed: 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。
Ramp-Up Period:
线程启动的时间,下图的线程配置,5个线程,5秒启动时间,每个线程执行两次循环。那么每秒会启动2个线程,每次循环执行一个请求。
上图中每秒启动一个线程,一个线程执行2次,5个线程中共执行了10次
取样器错误: 当线程执行取样器失败的时候,要执行的策略
选项:
继续:忽略错误,是继续执行
Start Next Thread Loop:忽略错误,线程当前循环终止,执行下一个循环。
停止线程:当前线程停止执行,不影响其他线程正常执行。
停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
立即停止测试:整个测试会立即停止执行,当前正在执行的取样器如果可能会被中断。
那么这几个配置控制了,当遇到错误的时候,测试的执行策略,是否会继续执行。
调度器
如果不想立即执行执行,可以通过调度器控制测试执行的开始时间和结束时间。
启动时间:控制测试在某个时间点启动。这个配置会被“启动延迟(秒)”配置覆盖。
结束时间:控制测试执行的结束时间。这个配置会被“持续时间(秒)”配置覆盖。
持续时间(秒):控制测试执行的时间。
启动延迟(秒):控制测试多久后启动执行。
参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;
这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)。
jmeter的test plan中,支持如下4种参数化方式:
函数助手:_CSVRead
CSV Data Set Config:CSV数据控件
User Defined Variables:用户定义的变量
User Variables:用户参数
首先新建一个测试脚本,可以通过工具(badboy)录制或者自己手动编写
登录请求的界面如下:
这里我们对登录的用户名密码进行参数化,将用户名密码写入txt文档,保存为.dat格式,编码类型选择UTF-8;
因为配置元件——CSV Data Set Config对参数化的格式要求比较严格,用户名密码一一对应,之间用半角英文逗号隔开
然后将保存的.dat文件放入计算机的某个盘里,这里我放入路径为:F:\jmeter\csvtest.dat
下面具体介绍参数化常用的的两种方法:
一、函数助手:_CSVRead
点击jmeter的界面,功能栏选项→ 函数助手对话框→ _CSVRead
CSV file to get values from | *alias:CSV文件取值路径,即这里需要写入之前的需要参数化的参数的文件路径
CSV文件列号| next|*alias:文件起始列号:CSV文件列号是从0开始的,第一列为0,第二列为1,以此类推。。。
函数字符串:即生成的参数化后的参数,可以直接在登陆请求中的参数中引用,第一列为用户名,函数字段号为0,第二列为密码,函数字段号为1,以此类推进行修改使用即可
替换参数化后的参数,然后修改线程数,执行脚本,通过监听器里结果树的请求内容,可以看到请求的参数都是参数化后的数据
二、配置元件——CSV Data Set Config
点击线程组添加配置元件→ CSV Data Set Config:
说明:
Filename:F:\jmeter\csvtest.dat文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径,避免脚本迁移时需要修改路径);
File encoding:UTF-8,F:\jmeter\csvtest.dat文件的编码格式,在保存时保存编码格式为UTF-8即可;
Variable Names(comma-delimited):对对应参数文件每列的变量名,类似excel文件的文件头,起到标示作用,同时也是后续引用的标识符,建议采用有意义的英文标示;
(如:有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,这里的 user,pwd,可以被利用变量名来引用:user,user,{pwd};
Delimitet:参数文件分隔符,用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可;
Allow quote data:是否允许引用数据,默认false,选项选为“true”的时候对全角字符的处理出现乱码 ;
Recycle on EOF?:是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入;
△ Ture:为true时,当已读取完参数文件内的测试用例数据,还需继续获取用例数据时,此时会循环读取参数文件数据(即:读取文件到结尾时,再重头读取文件);
△False:为false时,若已至文件末尾,则不再继续读取测试数据;通常在“线程组线程数* 线程组循环次数>参数文件行数”时,选用false(即:读取文件到结尾时,停止读取文件);
Stop thread on EOF?:当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义;
△若为ture,则在读取到参数文件行末尾时,终止参数文件读取线程;
△若为false,此时线程继续读取,但会请求错误,因此时读取的数据为EOF;
Sharing mode:共享模式,即参数文件的作用域,有以下几种方式:
△All threads:当前测试计划中的所有线程中的所有的线程都有效,默认;
△Current thread group:当前线程组中的线程有效;
△Current thread:当前线程有效;
完成之后,将刚才生成的参数写入参数对应的值里面:
以上两种常见的参数化的方法,推荐使用CSV控件方法(因为函数助手参数化功能相比其较弱)
三、配置元件——User Defined Variables
点击线程组添加配置元件→ User Defined Variables(用户定义的变量):
如上图所示,在该参数组中已经定义了两个参数,通过界面下方的添加、删除按钮可以向参数列表增加和删除参数,Up和Down可以上下移动参数的位置;
PS:User Defined Variables中定义的参数值在test plan执行过程中不能发生取值的改变,因此一般仅将test plan中不需要随迭代发生改变的参数(只取一次的参数)
设置在此处;例如:被测应用的host和port值。
四、前置处理器——User Variables
点击线程组添加前置处理器——User Variables(用户参数):
如上图所示,在该参数组中已经设置了两个参数,username和password分别有2组不同的取值,通过页面下方的四个按钮,可以增加删除参数的可能取值。
PS:User Variables中设置的参数可以在test plan执行过程中发生变化。
以上就是jmeter参数化的四种方式,其中:
1、函数助手_CSVRead的参数化功能相比CSV Data Set Config较弱;
2、CSV Data Set Config适用于参数取值范围较大的时候使用,该方法具有更大的灵活性;
3、User Defined Variables一般用于test plan中不需要随请求迭代的参数设置;
4、User Variables适用于参数取值范围很小的时候使用;
PS:相比于loadrunner来说,jmeter参数化有以下不同:
1.jmeter参数文件第一行没有列名称
2.参数文件的编码,尽量保存为UTF-8(编码问题在使用CSV Data Set Config参数化时要求的比较严格)
3.Jmeter的参数化没有LoadRunner做的出色,它是依赖于线程设置的(只有CSV Data Set Config参数化方法才有)
》》》推荐阅读《《《
1、
2、
3、
4、
6、
7、
8、
9、
10、
11、
12、
13、
14、
15、
16、
17、
18、
19、
20、
22、
23、
24、
25、
26、
27、
28、
以上是关于JMeter之Http协议接口性能测试的主要内容,如果未能解决你的问题,请参考以下文章
JMeter4.0学习之SoapUI创建WebService接口模拟服务端以及JMeter测试SOAP协议性能测试脚本开发