0
点赞
收藏
分享

微信扫一扫

四、jmeter关联(将返回值给下一个接口用)


1、关联定义

将某一个请求返回结果的动态返回值,保存成一个变量,供后面需要用到该值的请求的使用

2、关联原因

服务器或者数据库校验该值的合法性

3、哪些值要关联&分析关联的字段

先分析这个接口请求,是哪个类型的操作。

1、与数据库交互的接口(读或者写)

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.登陆 ------参数化 手机号 关联

4、jmeter关联方式

前提:访问 ​​WeatherWS Web 服务​​

我们可以获取天气预报的web服务的接口,且没有加密。这些接口都是可以用的,以下场景举例。

 

四、jmeter关联(将返回值给下一个接口用)_xml

给这个请求添加后置处理器。

4.1边界提取器

注:边界提取器与http请求,可以同目录,也可以在子目录。我们优先在子目录吧。

如下图,这都是可以的

四、jmeter关联(将返回值给下一个接口用)_xml_02

在你要关联的请求下右键点击添加-后置处理器-边界提取器

四、jmeter关联(将返回值给下一个接口用)_数据库_03

 Apply to:

Main sample and sub-samples: 主请求 和子 请求

Main sample only:主请求

Sub-samples only:子请求

Jmeter Variable Name to use:自定义

默认勾选的是Main sample only:主请求,边界提取器,作用范围在主请求的返回值上。

Jmeter Variable Name to use:自定义,可以忽略,不用关心。

当你不知道要提取的返回值在主请求还是子请求的返回值上是,可以选择Main sample and sub-samples: 主请求 和子 请求

要检查的响应字段:

我这里描述一个使用场景

以下是 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>

四、jmeter关联(将返回值给下一个接口用)_开发语言_04

编辑边界提取器

case1,我们想提取重庆的城市id

配置如下图:

四、jmeter关联(将返回值给下一个接口用)_数据库_05

Apply to: Main sample only

要检查的响应字段 主体

引用名称: cityid

左边界: <string>重庆,

右边界: </string>

匹配数字(0代表随机)

缺省值

这里讲一下匹配数字和缺省值

匹配数字:当有多个结果时,0-随机取一个结果,1-取结果的列表的第一个,2-取结果列表的第2个,以此类推

缺省值:当娶不到结果时,给你变量返回一个默认值

为了验证我们的提取变量,正确,我们需要加一个【调试取样器】来调试一下我们的脚本

我们最终的脚本结构如下:

四、jmeter关联(将返回值给下一个接口用)_xml_06

jmeter 调试取样器(Debug Sampler)

Debug Sampler

Debug Sampler主要用来看我们设置的变量,是否能正常取到我们设定的值

  JMeter properties和System properties这两个属性我们不用管,默认false即可,他是jmeter的一些自带属性,一般是不会变的,重点要看的是中间那个

  JMeter variables:jmeter中的变量,如果此项为ture,则此元件会打印出其范围内所有的jmeter变量的值,所以我们可以通过他把当前位置变量的值打印出来,从而进行程序的调试。

四、jmeter关联(将返回值给下一个接口用)_正则_07

 添加完Debug Sampler,我们还要添加查看结果树,来查看具体的变量数据。

四、jmeter关联(将返回值给下一个接口用)_java_08

这里就看到了我们刚刚添加的变量

4.2正则表达式处理器

在你要关联的请求下右键点击添加-后置处理器-正则表达式提取器

调试脚本结构如下:

四、jmeter关联(将返回值给下一个接口用)_数据库_09

元字符

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线或汉字

\s

匹配任意的空白符

\d

匹配数字

\b

匹配单词的开始或结束

^

匹配字符串的开始

$

匹配字符串的结束

限定符

*

重复零次或更多次(优先取更多)

+

重复一次或者更多次(优先取更多)

?

重复零次或者一次

{n}

重复n次

{n,}

重复n次或者更多次

{n,m}

重复n到m次

*?

重复任意次,(优先取最少)

+?

重复1次或更多次(优先取最少)

??

 重复0次或1次

{n,m}?

重复n到m次(优先取最少)

{n,}?

重复n次以上(优先取最少)

 举例:

例如,字符串"aaaaaaaa",匹配字符串中所有的a ,

1、正则: "a*" 会出到所有的字符"a"

2、正则: "a+" 会取到字符中所有的a字 符,

"a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次。

正则 : "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"

一些正则,可以使用工具生成,如一些在线的工具等:


一、校验数字的表达式
数字:^[0-9]*$
n位的数字:^\d{n}$
至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
零和非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
非负整数:^\d+$ 或 ^[1-9]\d*|0$
非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

举报

相关推荐

0 条评论