1. 定义
关联就是将服务器返回的动态的变化的一个值把它保存为一个参数,以供后面需要用到该值的请求进行使用。
2. 为什么要关联
脚本里把一个值写死,但每次运行时这个值是服务器返回动态动态变化的。
3. 哪些值需要关联
3.1经验判断
1)自己输入的值肯定不需要关联
2)常见的(1,0) (on,off) (yes,no) 空值 都不需要关联
3)90%以上都只会关联value,但有极少数情况下会出现关联key(key看起来不正经)
4)非自己输入的脚本里出现的参数是可能需要关联的
3.2根据关联类型判断
1)服务器校验提交请求的合法性(值的合法性、key的合法性)、正确性
● 验证码要校正确性,常见验证码包括:图片验证码、邮箱验证码、手机验证码
● 时间戳、token(手机)、session(http)要校验合法性
题外话:
● 图片验证码怎么处理:万能验证码、验证码失效、找开发要验证码的实现逻辑(做正则)
● 现在图片识别技术不成熟,有错误率
● token校验比session校验更安全,token更复杂
2)数据库类(值是int的数字,key是id类)
● 插入操作的关联就是把insert这个表的必填字段补全,这个必填字段是跟其他数据的关联关系的字段一般是id,不要让你的数据是垃圾(无根之源的数据)
语法:
insert into 表(字段,字段...) values (值,值...)
举例说明:
例1:insert into 户籍表("id","name","sex","bir","adr","fuid","muid")
------fuid,muid:来源于父母的户籍信息
------猜想:fuid,muid需要关联
例2:insert into 帖子表("自增id","msg","title","time","模块id","谁发的帖")
------猜想谁发的帖要关联,模块id看是否要求,time待定
● delete操作的关联就是补全where后面的条件值并且值是对的,这些条件值可能是一个也可能是多个
语法:
delete from 表 where xx = ??? and xx >= ???
------and/or
------>= ,<=, != ,in ,not in ,between
● update操作的关联就是补全where后面的条件值并且值是对的,这些条件值可能是一个也可能是多个
语法:
update 表 set xx=xxx where xx = ??? and xx >= ???
------and/or
------>= ,<=, != ,in ,not in ,between
● select操作的关联就是补全where后面的条件值并且值是对的,这些条件值可能是一个也可能是多个
语法:
select xx,xx from 表 where xx = ??? and xx >= ???
------and/or
------>= ,<=, != ,in ,not in ,between
题外话:
● 数据库简单定义
DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select
● int类型数字检索比char类型快很多
4. 关联位置放哪
哪个请求response中返回你想要用的那个值,关联函数就放在这个请求的前面。关联位置放哪,需要从应用程序和数据库角度去考虑。关联的值肯定是在触发校验请求之前给。如:seesion是在进入登录页面时给的,token是在登录后给的。
下面以注淘宝注册购物结束精简流程来说明关联的位置,例子比较粗糙,顺带说一下参数化。
● 注册
----参数化(用户名、手机号)
----关联(手机验证码,输入手机号点下一步时给)
● 登录
----参数化(用户名或手机号)
● 查看商铺详情
----参数化or关联都行(商品id,商铺id,避免缓存造成的结果失真)
----可能会记录谁在浏览,若记录就需要关联uid(最早在注册时给,后续登录也会给)
● 收藏商品
----关联(商品id,商铺id,uid),uid同上,商铺id,店铺id由商品列表返回)
● 加入购物车
----关联(商品id,商铺id,uid),uid同上,商铺id,店铺id由商品列表返回)
● 删除购物车
----关联(商品id,商铺id,uid),uid同上,商铺id,店铺id由商品列表返回)
● 结算
----关联(uid,商品id,店铺id)、delete购物车、update库存
● 查询订单
----关联(订单id,uid),订单id结算时返回,uid同上
5. 关联函数怎么写
5.1关联的5种方法
1)tree视图右键关联
2)tree视图获取左右边界,手写关联
3)扩展日志获取到服务器的返回结果,取到左右边界值,手写关联
4)抓包工具获取到服务器的返回结果,取到左右边界值,手写关联
5)通过查看页面源文件,到左右边界,手写关联
5.2关联值如果出现多个不同的关联边界,如何选取边界
1)选择出现次数多的
2)选择正经的(容易区分的)
5.3 tree视图右键关联操作
1)tree视图下选中要关联的值,点击右键-->Create Paramter
2)回到script视图,自动填写好关联函数,需要注意的是右键关联填写的边界值可能不对,需自己根据情况调整
5.4手写关联
知道边界值的情况下可以自己手写关联函数,手写关联可以用web_reg_save_param或者web_reg_save_param_ex函数,当边界值不需要用到正则表达式时,推荐用web_reg_save_param即可。下面演示用web_reg_save_param手写关联。
1)点击【Insert-->New Step】
2)输入web_reg_save_param并选择,点击ok
3)填写匹配规则后点击ok
● Notfound: 当在返回信息中找不到要找的内容时应该怎么处理
Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。
Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执
行下去不会中断。
● LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。
● RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。
● RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质可以是All或是数字,该属性可有可无。
● Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。
● ORD : 说明第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。
● SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。
● SaveLen :当找到匹配项后,偏移量之后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。
4)关联函数写完