1、编写jmeter脚本的方式
1) badboy 录制
2)jmeter 自带的录制控制器
3) 手写脚本
2、手动编写jmeter 性能测试脚本
性能测试三要素:接口测试、真实场景、多线程
2.1 使用jmeter 完成接口测试
接口测试的工具:postman、fiddler、python+requests、jmeter
断言:
-
响应断言:相等断言、包含断言、子字符串、匹配断言(正则表达式断言)
-
JSON 断言:返回值是json格式,其中相等断言和正则匹配断言 -----$.[0].unitprice
-
大小断言:用于验证是否有返回值,或者用于文件、图片大小验证
-
断言持续时间:用于验证响应返回的时间是否在一定的范围内,单位ms
-
BeanShell 断言:自定义断言,当现有的断言方式都不能满足要求,使用java 自己编写
HTTP Cookie 管理器—保持登录
1)动态保持—必须添加登录请求并且登录成功
2)静态保持–从浏览器或者接口获取静态cookie信息
使用Jmeter 做接口测试需要用到的元器件有哪些?
-
取样器(采样器)
-
断言
-
查看结果树
-
HTTP Cookie管理器—静态、动态
作业:使用jmeter 完成agileone 系统 公告新增接口的测试,测试用例5条
2.2 使用jmeter 模拟用户真实场景
-
数据真实
性能测试中实现参数离散化(接口测试称为ddt)的三种方式
1)用户参数–前置处理器
只能给某一个请求添加,作用范围-局部范围,能够添加有限数量的数据组,适用于数据量比较少
2)用户定义的变量–配置元件
全局作用,每一只能添加一组数据,适合做配置
3)CSV 文件配置—配置元件,支持.txt 和.csv(excel另存为)
全局作用,可以批量导入数据,数据从数据库导出、爬虫爬取
问题:三种参数化方式,优先级别如何?
用户参数>CSV 数据文件配置>用户定义的变量
练习:蜗牛进销存v1.3 条件查询接口
-
操作逻辑真实-用户的操作顺序、操作链路
场景一:用户去登录蜗牛进销存,首先进入首页–》输用户名密码,点击登录–》进入主页,站在用户的角度,这三个操作是一个整体,三个都成功则用户认为登录成功,否则就是登录失败
解决方案:事务控制器
事务的概念:性能测试工程师站在用户的角度来定义的
场景二:某些场景,比如蜗牛进销存的会员新增接口只有在用户登录成功的基础上才能操作,登录失败操作不了
step1 : login_res = 登录接口响应正文—login-pass -------提取登录的响应正文,保存到jmeter 变量池----正则表达式提取器
step2: if login_res == login-pass: -------判断是否等于login-pass----IF 控制器
do 新增
解决方案:IF 控制器
正则表达式提取器使用:
子表达式的使用:根据字符串左右的字符串来匹配,返回匹配到的值
例子:匹配login-pass中的-----login(.+?)pass
场景三:用户进入某个系统,只需要登录一次,但是却多次其他操作,比如登入淘宝搜索商品
解决方案:仅一次控制器
场景四:用户进入某个系统以后,可能会进行多次不同的操作
例子:用户进入蜗牛进销存,进行5次查询,3次扫码,1次新增;
用户的访问量 为 查询:扫码:新增 =5:3:2
解决方案:吞吐量控制器
其他:随机控制器:用户多选一,每次选一个操作,例子:用户注册选择身份,要么选择称为卖家、要么选择成为买家
随机顺序控制器:控制顺序
-
思考时间真实
固定定时器:固定延时,比如获取验证码
高斯随机定时器:产生时间范围是固定延时±偏移
统一随机定时器:产生的范围是随机值+偏移
同步定时器:集合点-----用来模拟秒杀
模拟并发–狭义的并发
模拟的用户组:模拟多少个用户一起向服务器发出请求
超时时间:0表示死等,一直等,3000表示等3秒,如果3秒内都凑不足3个线程,那3秒后就直接发出请求