赞
踩
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在linux/windows/macos上都可以使用。jmeter可以做接口测试和压力测试。其中接口测试的简单操作
jmeter官网:https://jmeter.apache.org/
示例:post考试预约接口并发测试
测试计划右键——>添加——>线程(用户)——>线程组
线程组右键——>添加——>取样器——>HTTP请求
线程组右键——>添加——>配置元件——>HTTP信息头管理器
线程组右键——>添加——>配置元件——>HTTP请求默认值
协议:http/https
服务器名称或者ip:就是测试服务器的地址
端口:就是服务器的端口
内容编码:就是编码格式
如果测试的接口都是这个服务器,那这里配置http请求默认值会简化一些操作,如果都不一样,就不需要这个http请求默认值
我这里只需要一个参数,如果需要参数化的变量就用${变量名}的形式代替
黄色区域:咱们在http请求默认值已经写了,这里就可以不用写
红色部分:就是调用接口的请求方式和路径还有编码格式
这里是一个登录接口,需要取值账号密码,验证码我把校验取消了,用的消息体传参,也可以用参数传参
参数化的变量就用${变量名}的形式代替
登录-HTTP请求右键——>添加——>断言——>响应断言
响应断言:简单理解就是判断响应是否成功
这个模块,指的是我们使用哪一块的返回信息做断言。
【响应文本】指返回的文本信息。
【响应代码】指Http响应码,如200、500等。
【响应信息】指的是http的response message。
【响应头】指http响应头信息。
注意:响应文本不等于响应信息。
如下图所示,响应数据是有值的,但是响应信息显示为空,此时如果【测试字段】选择【响应信息】,断言会失败。
分为【包括】【匹配】【相等】【字符串】
【包括】与【字符串】:断言的内容,比如响应信息为{"status":"0","message":"success"}
,选择【包括】或者【字符串】时,断言内容为【“status”:“0”】,则可以通过。二者的区别是,【包括】支持正则,【字符串】不支持正则。
【匹配】与【相等】:响应信息必须完全等于断言内容才可以通过,否则均为失败。其中【相等】是通过正则表达式匹配。(内容必须完全匹配)
【否】:挂钩之后,断言结果true为false,false为true,很奇妙的旅程。
【或者】:当有多个断言时,只要有一个断言成功,那么最终结果就是成功的。
断言的内容。如果有多个,按照顺序执行,没有选择【或者】的情况下,所有的断言通过之后,取样器结果才是成功的。
顾名思义,当失败是,可以定义个性化信息。
响应文本要自己看接口返回的信息,才能决定
登录-HTTP请求右键——>添加——>配置元件——>CVS Date Set Config
文件名:csv文件存储全路径
● 文件编码:默认的编码是UTF-8。
● 变量名称:和csv文件第一行的字段相对应,名称自定义,多个字段用逗号分隔
● 忽略首行:通常情况下csv的文件首行标注数据的含义,不是具体的数据,所以要设置忽略(设为true),前提是设置了变量名称才生效。
● 分割符:默认英文逗号分隔。
● 是否允许带引号:如果csv文件中有json数据,或者带有引号的数据,建议设为True
● 遇到文件结束符再次循环:如果文件执行结束了想重复执行数据,可以设置为True,多次循环。
● 遇到文件结束符停止线程:配置文件读取完毕之后,就结束当前线程。
● 线程共享模式:标示这个CSV数据文件作用范围是:所以线程/当前线程组/当前线程/编辑(自定义),默认方式:所有线程。
登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器
线程组右键——>添加——>监听器——>查看结果树
Apply to,该选项是用来控制正则表达式提取器的作用对象,可选对象有三种:
main sample,主请求
sub sample,子请求
JMeter Variable,JMeter的变量
name of variables,变量名称,由用户自定义,用于存储数据
变量名称可以写多个,使用逗号进行分隔
Json Path expressions,JsonPath表达式,即用来提取数据的
该处可以填写多个JsonPath表达式,要求数量和变量名称的数量保持一致,每个表达式提取到的值将会按照位置传给变量
匹配数字,该处可以填写的数字有3种:
0,是默认值,表示随机,即将多次找到的结果随机抽取一个赋值给变量
正整数N,表示将第N次找到的结果赋值给变量
负数,一般填写-1,表示将所有找到的值以类似数组的方式存入变量数组,效果为varName_1=value1, varName_2=value2,并且同时会自动生成一个变量varName_matchNr=N用来存储值得个数
default values,默认值,如果变量名称只有一个,则该处可以省略,如果变量名称有多个,则该处必须有值。值的数量必须要和变量名称的数量保持一致,使用逗号分隔,一般建议填写1,1,1,…
基本操作符
$ 根节点
@ 当前节点,一般来说用于子表达式或者过滤表达式
. or [] 用于连接父子节点
. Dot-notated方式,获取子节点
[‘’(, ‘’)] Bracket-notated,获取一个或者多个子节点
… 深层扫描,用于获取当前节点下的所有指定对象,表示从当前节点开始搜索所有的子节点
* 通配符
[(, )] 数组索引,如果有多个用逗号分隔
[start:end] 数组切片操作
[?()] 过滤表达式
. k e y . k e y . k e y 要求 k e y 的值都是 j s o n 对象,才可以继续使用点号连接 [ ] 是用来筛选子节点,构成一个新的 j s o n 对象。 .key.key.key要求key的值都是json对象,才可以继续使用点号连接 []是用来筛选子节点,构成一个新的json对象。 .key.key.key要求key的值都是json对象,才可以继续使用点号连接[]是用来筛选子节点,构成一个新的json对象。[“data”]等价于 . d a t a ,它最主要的作用在于 .data,它最主要的作用在于 .data,它最主要的作用在于[“data”,“name”],这个表达式返回2个同级节点构成的新json对象。
JSON提取器相关文章:https://blog.csdn.net/u010378984/article/details/128547767
JSON提取器操作文章:https://www.cnblogs.com/panpanda/p/15855149.html
作用:将局部变量变成全局变量–BeanShell 后置处理程序
登录-HTTP请求右键——>添加——>后置处理器——>BeanShell PostProcessor
${__setProperty(token,${token})};// 2个_ 将局部变量token转换为全局变量token
线程组右键——>添加——>取样器——>HTTP请求
红色区域:接口信息
绿色区域:获取token
登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器
获取id,通过id查看考试信息
线程组右键——>添加——>取样器——>HTTP请求
红色区域:接口信息
绿色区域:获取考试id和token,通过考试id来查询场次信息
登录-HTTP请求右键——>添加——>后置处理器——>JSON提取器
线程组右键——>添加——>取样器——>HTTP请求
红色区域:接口信息
绿色区域:传递的参数信息
考试预约-HTTP请求右键——>添加——>配置元件——>HTTP信息头管理器
考试预约-HTTP请求右键——>添加——>定时器——>Synchronizing Timer
模拟用户组的数量:每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。如果设置为10,即集合10个线程等待,同时发送请求。设置此数量不能超过线程组中的线程数量
超时时间以毫秒为单位:如果设置为0,Timer将会等待线程数达到了"模拟用户组的数量"中设置的值才释放。如果一直没有达到,则会一直等待,除非手动关闭执行。如果大于0,那么如果超过“超时时间以毫秒为单位”中设置的最大等待时间(毫秒为单位)后还没达到"模拟用户组的数量"中设置的值,Timer将不再等待,释放已到达的线程。默认为0
模拟用户组的数量不能超过线程组的数量
线程组右键——>添加——>监听器——>聚合报告
线程组右键——>添加——>监听器——>用表格查看结果(可以也添加上)
Label:每个JMeter的element的Name值,例如HTTP Request的Name;
样本:发出请求数量;模拟20个用户,循环100次,所以显示了2000;
平均值:平均响应时间(单位:ms);默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间;
中位数:50%的用户响应时间小于这个值;
95%百分位:95%的用户响应时间小于这个值;
99%百分位:99%的用户响应时间小于这个值;
最小值:用户响应时间最小值;
最大值:用户响应时间最大值;
异常%:测试出现的错误请求数量百分比;请求的错误率 = 错误请求的数量/请求的总数;若出现错误就要看服务端的日志查找定位原因;
吞吐量:Throughput简称TPS,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,TPS越高说明服务器处理能力越好;
KB/sec:每秒从服务器端接收到的数据量;
线程数(即并发数):一个用户占一个线程,200个线程就是模拟200个用户;
Ramp-Up 时间(秒):设置线程需要多长时间全部启动;如果线程数为200,准备时长为10,那么需要1秒钟启动20个线程;也就是每秒钟启动20个线程;
循环次数:一次场景下来,请求的数量=线程数 * 循环次数;如果线程数为200,循环次数为10 ,那么每个线程发送10次请求;总请求数为200*10=2000 ;如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本;
第一步:执行程序之前:新建一个文件夹,再建一个后缀为.jtl的文件。在聚合报告页面,选择刚建的文件夹进行保存
第二步:选择工具-Generate HTML report
第三步:按下图填写
Results file(csv or jtl):刚才新建的jtl文件
user.properties file:jmeter安装目录下的bin文件里面的jmeter.properties
Output directory:选择一个新建的空的文件夹
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。