将某一个请求返回结果的动态返回值,保存成一个变量,供后面需要用到该值的请求的使用
服务器或者数据库校验该值的合法性
3.1 数据库交互(读写)
insert ---关联--建立关系的那几个字段--这条数据属于谁 谁操作的 啥时候干的(业务校验)
插入数据,一定会返回这条数据的ID
update
update table set x =? where xxid=?? and and
关联 where 后面的条件ID
delete
delete table set x =? where xxid=?? and and
select 。 。。。。
key . xxid . 或者 。 int==数字
关系型数据库,表与表之间,存在网状关系的
非关系型数据库,
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
3.2 非数据库
从哪儿找----上一步交互请求
典型使用场景:时间戳、验证码(图片、手机、邮箱) session token
特征: 奇奇怪怪
举例:淘宝购物流程
1.注册 ------参数化 手机号/邮箱 关联 验证码、token
2.登陆 ------参数化 手机号 关联
前提:访问 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
我们可以获取天气预报的web服务的接口,且没有加密。这些接口都是可以用的,以下场景举例。
注:边界提取器与http请求,可以同目录,也可以在子目录。我们优先在子目录吧。
如下图,这都是可以的
在你要关联的请求下右键点击添加-后置处理器-正则表达式提取器
我这里描述一个使用场景
以下是 HTTP GET 请求和响应示例。所显示的占位符需替换为实际值。
GET /WebServices/WeatherWS.asmx/getRegionProvince? HTTP/1.1 Host: ws.webxml.com.cn
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <ArrayOfString xmlns="http://WebXml.com.cn/"> <string>string</string> <string>string</string> </ArrayOfString>
返回结果:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
<string>黑龙江,3113</string>
<string>吉林,3114</string>
<string>辽宁,3115</string>
<string>内蒙古,3116</string>
<string>河北,3117</string>
<string>河南,3118</string>
<string>山东,3119</string>
<string>山西,31110</string>
<string>江苏,31111</string>
<string>安徽,31112</string>
<string>陕西,31113</string>
<string>宁夏,31114</string>
<string>甘肃,31115</string>
<string>青海,31116</string>
<string>湖北,31117</string>
<string>湖南,31118</string>
<string>浙江,31119</string>
<string>江西,31120</string>
<string>福建,31121</string>
<string>贵州,31122</string>
<string>四川,31123</string>
<string>广东,31124</string>
<string>广西,31125</string>
<string>云南,31126</string>
<string>海南,31127</string>
<string>新疆,31128</string>
<string>西藏,31129</string>
<string>台湾,31130</string>
<string>北京,311101</string>
<string>上海,311102</string>
<string>天津,311103</string>
<string>重庆,311104</string>
<string>香港,311201</string>
<string>澳门,311202</string>
<string>钓鱼岛,311203</string>
</ArrayOfString>
编辑边界提取器
case1,我们想提取重庆的城市id
配置如下图:
Apply to: Main sample only
要检查的响应字段 主体
引用名称: cityid
左边界: <string>重庆,
右边界: </string>
匹配数字(0代表随机)
缺省值
这里讲一下匹配数字和缺省值
匹配数字:当有多个结果时,0-随机取一个结果,1-取结果的列表的第一个,2-取结果列表的第2个,以此类推
缺省值:当娶不到结果时,给你变量返回一个默认值
为了验证我们的提取变量,正确,我们需要加一个【调试取样器】来调试一下我们的脚本
我们最终的脚本结构如下:
jmeter 调试取样器(Debug Sampler)
Debug Sampler
Debug Sampler主要用来看我们设置的变量,是否能正常取到我们设定的值
JMeter properties和System properties这两个属性我们不用管,默认false即可,他是jmeter的一些自带属性,一般是不会变的,重点要看的是中间那个
JMeter variables:jmeter中的变量,如果此项为ture,则此元件会打印出其范围内所有的jmeter变量的值,所以我们可以通过他把当前位置变量的值打印出来,从而进行程序的调试。
添加完Debug Sampler,我们还要添加查看结果树,来查看具体的变量数据。
这里就看到了我们刚刚添加的变量
在你要关联的请求下右键点击添加-后置处理器-正则表达式提取器
调试脚本结构如下:
4、正则表达式
元字符
. 除了换行符之外的任意字符
\w
\d 匹配数字
限定符
* 重复零次或更多次(优先取更多)
+ 重复一次或者更多次(优先取更多)
? 重复零次或者一次
*"(贪婪) 重复零次或更多
例如"aaaaaaaa" 匹配字符串中所有的a 正则: "a*" 会出到所有的字符"a"
"+"(懒惰) 重复一次或更多次
例如"aaaaaaaa" 匹配字符串中所有的a 正则: "a+" 会取到字符中所有的a字 符, "a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次,
"?"(占有) 重复零次或一次
例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个
字符a
"{n}" 重复n次
例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则: "a{3}" 结果就是取到3个a字
符 "aaa";
"{n,m}" 重复n到m次
例如正则 "a{3,4}" 将a重复匹配3次或者4次 所以供匹配的字符可以是三个"aaa"也可以
是四个"aaaa" 正则都可以匹配到
"{n,}" 重复n次或更多次
与{n,m}不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则"a{3,}" a至 少要重复3次
"*?" 重复任意次,但尽可能少重复
如 "acbacb" 正则 "a.*?b" 只会取到第一个"acb" 原本可以全部取到
但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是
"acb"
"+?" 重复1次或更多次,但尽可能少重复
与上面一样,只是至少要重复1次
"??" 重复0次或1次,但尽可能少重复
如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"
"{n,m}?" 重复n到m次,但尽可能少重复
如 "aaaaaaaa" 正则 "a{0,m}" 因为最少是0次所以取到结果为空
"{n,}?" 重复n次以上,但尽可能少重复
如 "aaaaaaa" 正则 "a{1,}" 最少是1次所以取到结果为 "a"