功能点:
1.单场景
2.混合场景
3.稳定性场景
jmeter里面的并发是线程数
流量是漏斗原理
为什么要做参数化,原因只有两个
1.为了避免数据库(unique属性)或者业务逻辑对该值的唯一性校验
(写的操作一般是数据库校验,查询操作一般是业务逻辑校验)
2.为了避免命中查询缓存对性能结果带来的失真
不同的缓存形式:redis (服务器缓存), mysql (服务器缓存), 本地缓存
本地缓存一般缓存 cookie,页面的css,js, 图片,框架样式缓存在浏览器里面
服务器缓存一般是查询缓存,从库里查询缓存到内存里面,一般都要做参数化,避免命中查询缓存
mysql去查询的过程:
1.进行语法分析,有没有操作数据库操作表的权限,用户名密码对不对
2.语义分析,sql到底对不对
3.根据sql,生成这条sql的执行计划
4.看这条执行计划在缓存里面在不在,如果命中了查询缓存,直接在缓存里面
把结果返回,如果未命中查询缓存,就打开要操作的表按照你的执行计划从内存
里面找到你的查询结果,如果要找的结果不在查询结果的话,就需要去硬盘里面去
寻址,找到数据后把数据放到内存里面再返回
如何避免参数化
1.去掉数据库或者业务逻辑代码里面的唯一性校验
2.关闭mysql的缓存
一个并发跑十次
十个并发跑一次
什么叫做关联
为什么要做关联
关联:将服务器返回的动态变化的数据保存为一个变量,以供后面需要用到该值的请求进行使用
关联只会在response里面去找动态变化的值,找到之后保存成一个变量
需要做关联的内容:
一,不跟数据库打交道
请求逻辑对该值有合法性校验:
1.验证码(图片验证码,短信验证码,邮箱验证码)
2.用户身份的校验:session, token
3.提交时间校验:时间戳
大多数情况下特征:1、不是从服务器返回的值 2.奇奇怪怪没有任何规则/规律或者含义的字符
二,跟数据库打交道
增 insert :insert是否需要做关联取决于业务场景,关联值就是要建立关联关系的字段
删 delete :关联where里面的id字段的值
改 update :关联where里面的id字段的值
查 select :关联where里面的id字段的值
共同特征:int类型的值(身份证号除外) 大多数参数名称会带id类字样
如果最终请求参数没有用户id之类的参数 不要自己去加 这类uid信息会通过cookie之类自动补全
拿到一个压测需求去分析哪些步骤需要参数化哪些步骤需要关联:
注册用户 参数化:手机,邮箱 关联:手机,验证码
添加收货地址 关联:用户id 可以不用做参数化
修改用户昵称 关联:用户id 参数化:用户昵称(昵称不能重复)
浏览商品 参数化:商品id(避免命中查询缓存) 商家id
添加购物车: 关联:用户id 参数化:商品id(因为上一步商品id做了参数化)
生成订单再支付 关联:用户id 用户id2 参数化:商品id, 商家id
查看订单 关联: 用户id 订单号
查看物流 关联:用户id 物流号
收货 关联 : 用户id 物流号 订单id
退件 关联 : 用户id 物流号 订单id