一、性能测试脚本编写
6. 断言结果
6.1 不添加断言时的结果
6.2 添加断言方法
在对应接口下面点击添加->断言->响应断言
6.3 响应断言设置
(1) 要测试的响应字段,默认选择响应文本
(2) 模式匹配规则:包括、匹配(相等的意思),如果勾选否后,则是不包括,或不匹配
-
响应数据包含成功
-
响应数据不包含错误
-
断言多个,是且的关系,即多个断言条件同时满足
7. Cookie管理器
场景:只有登录之后才能查看个人动态,所以此时需要使用到cookie
7.1 不添加cookie时
不添加cookie时,即使是同一个用户在请求不同的接口,服务器并不能知道当前发起请求的人是谁。所以,虽然同一个人登录了,再次请求查看个人动态时,服务器会提示用户未登录。
7.2 添加cookie方法
(1) 方法1:在HTTP信息头管理器中添加cookie(不支持多个用户同时登录)
-
添加HTTP信息头管理器
-
添加cookie
-
结果运行
(2) 方法2:添加HTTP cookie管理器(在线程组里面添加,添加位置任意,不需要做任何配置)
Cookie管理器的作用:会获取发起登录请求时的cookie信息,当同一个人再次发起请求(比如查看个人动态)时,cookie信息就会被传入。关联纽带是同一个用户。
注意:登录与其他请求需要在同一个线程组内
8. 线程组的线程属性
(1)线程数
(2)Ramp-up period决定多长时间启动所有线程,如果有5个线程,ramp-up period是10秒,则每隔2(10/5)秒启动一个线程。如果ramp-up period是0秒,则jmeter会立即建立所有线程。
- 构造用户的间隔时间(秒)=Ramp-up period/线程数,用户构造完成后会立马发起请求
(3) 循环次数
Sample time:响应时间
永远循环:谨慎操作!!!操作不当可能会让电脑卡死,最后只能关机重启。
(4) 调度器
调度器一般在循环次数为永远时生效
优先级:启动时间/结束时间的优先级比持续时间/启动延迟低,即如果4个选项均填写了内容,则默认持续时间/启动延迟选项设置生效,启动时间/结束时间设置不生效。
- 情况1:设置启动时间和结束时间
请求过程:1-1先请求多次,直到2秒(设置的是每隔2秒构造一个用户)后1-2加入,此时1-1和1-2同时请求,以此类推,最后1-1,1-2,1-3,1-4一同请求
- 情况2:设置启动延迟和持续时间
9. 并发测试
9.1 假并发
并发的定义不统一:
- 有的认为10个线程1秒内完成算是并发
- 有的认为1000个线程1秒内完成算是并发,但有时候做不到(因为耗费的是电脑资源
- 有的认为设置为0秒认为是并发。
以上3种都是假并发,如果要求不严格也可以,但不建议这样使用。
9.2 真并发
真正的并发需要使用同步定时器,这是最接近真实情况下的并发
- 并发人数:只有用户数构造完后才会一起去请求这个接口,5个人1组,只要5个用户构造好之后就会并发请求
- 超时(毫秒):
- 设置10秒时,如果10秒都还没有构造完5个人,则让已经构造好的人先请求,这个10秒是从这一组人的第一个人产生时开始计时的。
- 如果超时时间设置过短,如设置3秒,实际构造完5个人需要5秒,此时会变成3人一组同时请求
- 设置为0时表示永不超时,会死等第5个人构造完才会开始请求。
每0.1秒构造一个用户,10秒内构造100个用户,构造完成后同时去请求登录接口
10. 接口关联性-正则表达式提取器
有关联的接口:A接口测完后的数据要给B接口使用
举例:考试系统中要删除一个用户,需要先获取查询到的用户id,再根据用户id进行删除操作。
(1) 添加正则表达式提取器
需要在某个接口后面添加正则表达式提取器
-
引用名称:变量名,任意取名称。
-
正则表达式:填写要匹配的正则表达式
-
模板:一般是一个字段使用1个模板,直接使用 1 1 1,支持写多个。
-
匹配数字:1代表取匹配到的第1个,2代表取匹配到的第2个,0代表随机
-
缺省值:默认值,如果取不到时给一个默认值
-
正则表达式的获取
.+? 表示匹配任意符合的字符串,将变量修改成.+?,注意:在填写正则表达式时,应加括号,即(.+?)
(2) 使用正则表达式代替需要的变量,看是否能够成功获取变量值(此处需要使用id)
11. 接口关联性-json表达式提取
如果已经是前后端分离,返回的已经是一个json数组,则可以使用json的方式进行解析,更加精准。
(1) 添加json Extractor
(2) 获取json表达式
把返回的json体看做1个Python的字典,以{}表示,整个json体是一个大字典,以
代
替
,
需
要
字
典
里
的
i
d
,
可
看
到
i
d
在
l
i
s
t
列
表
中
,
l
i
s
t
列
表
在
r
e
s
p
o
n
s
e
字
典
里
面
,
则
使
用
代替,需要字典里的id,可看到id在list列表中,list列表在response字典里面,则使用
代替,需要字典里的id,可看到id在list列表中,list列表在response字典里面,则使用.respons.list[0].id表示,访问列表的元素使用下标,从0开始
(3) 将json表达式填入json extractor
(4) 运行请求