目录

1 背景介绍... 1

1.1 平台自动处理协议参数... 1

2 在响应界面手动添加参数关联... 1

2.1 响应界面... 1

2.1.1 HTTP响应界面... 1

2.1.2 HTTP外的其他业务响应界面... 1

3 关联参数方式... 1

3.1 JSon方式... 1

3.1.1 参数名... 1

3.1.2 匹配文本... 1

3.2 左右方式(默认)... 1

3.2.1 从响应内容提取... 1

3.2.2 HTTP响应头域提取... 1

3.2.3 获取全部... 1

3.2.4 Scripter脚本编辑器的文本协议... 1

3.2.5 Scripter脚本编辑器的二进制协议... 1

3.3 XML 查找... 1

3.3.1 参数名... 1

3.3.2 获取全部... 1

3.3.3 匹配文本... 1

3.4 XML xpath. 1

3.4.1 参数名... 1

3.4.2 获取全部... 1

3.4.3 xpath. 1

3.5 Scripter自定义方式... 1

3.5.1 界面参数说明... 1

3.5.2 例子... 1

4 录制与回放日志比较关联... 1

4.1 浏览器页面操作关联参数... 1

4.2 Scripter编辑器操作关联参数... 1

5 Scripter实现HTTP协议两次录制比较关联... 1

5.1 弹出未找到的URL窗口... 1

5.2 关联过滤... 1

5.3 添加关联... 1

5.3.1 批量添加关联... 1

5.3.2 添加单个关联... 1

6 通过自己实现JAVA代码关联参数... 1

 

 

 

1 背景介绍

正常业务场景时,通常存在发送的请求消息需要带上前面服务器回复的动态数据,如验证码、会话ID之类,否则业务将失败。因此需要平台支持从响应消息获取参数值,即关联参数。例如:

上图是一个HTTP请求消息,里面存在多个“{}”符号,即存在多个需要替换为实际值的参数: usernamepasswordvalidateCode,平台在发送数据前会自动将这些参数替换为对应的参数值。

上面参数对应的实际参数值来源方式不同,包括:参数列表配置、从服务器收到的响应消息提取(即关联参数,如validateCode)、平台自动处理(如http头域的Content-Length);

1.1 平台自动处理协议参数

平台自动处理的参数每种协议都不同,如HTTP支持:HostCookieContent-Length等等;SIP支持:Content-LengthCall-ID等等;这些不需要设置参数值。

2 在响应界面手动添加参数关联

2.1 响应界面

2.1.1 HTTP响应界面

选择对应的URL资源,再选择下边的“响应消息”选项卡:

2.1.2 HTTP外的其他业务响应界面

SIP协议,双击Receive按钮弹出响应界面:

3 关联参数方式

默认包括:JSON方式、左右方式(默认)、XML xpathXML格式

1)     浏览器页面

2)     Scripter编辑器(非BS页面)的界面

3.1 JSon方式

响应内容必须是JSon格式

3.1.1 参数名

保存获取到的值为名称getPara

3.1.2 匹配文本

/parent/child, /parent[0]/child, /parent/child[1], parentchildkey名,多级以'/'分隔,[]代表数组,里面是下标。下面举例:

1)     例子1

响应消息内容为{"parent":{"child":"abc"}},需要提取child节点的内容值,则匹配文本可以配置如下:

/parent/child

上面都得到参数内容abc,并将abc保存到参数名getPara

2)     提取的参数值的父是一个数组

响应消息内容为{"parent":[{"child":"abc","test":1},{"child":"efg","test":2}]},需要提取child节点的内容值abc,则匹配文本可以配置: /parent[0]/child

如果需要提取内容值efg,则匹配文本可以配置: /parent[1]/child

3)     提取的参数值是一个数组

可以通过属性过滤特定的节点

响应消息内容为{"parent":{"child":["abc","efg"]}},需要提取child节点的内容值abc,则匹配文本可以配置:/parent/child[0]

如果需要提取内容值efg,则匹配文本可以配置: /parent/child[1]

3.2 左右方式(默认)

通过查找左边文本和右边文本,然后提取中间部分内容

3.2.1 从响应内容提取

响应消息内容:abcd <ip>1.1.1.1</ip> <b>456</b>,获取参数{getIp}的值1.1.1.1

即查找值得左边文本<ip>,和右边结束文本</ip>

注:字符串crlf代表回车

3.2.2 HTTP响应头域提取

例子:获取cookieabc值;右边文本是分号“;

3.2.3 获取全部

1)     全部:表示获取匹配的所有值 (即数组),保存参数值的key分别为getIp, getIp_2, getIp_3, ..., getIp_n

2)     第一个: 只获取第一个匹配的值,并保存参数值的keygetIp

3.2.4 Scripter脚本编辑器的文本协议

响应消息内容:abcd <ip>1.1.1.1</ip> <b>456</b>,获取参数{ip}的值1.1.1.1

3.2.5 Scripter脚本编辑器的二进制协议

0xaabb表示查找两字节,第一字节为aa ,第二字节为bb。当内容为aabb01020304ccdd时,提取到的name参数的值为01020304

说明:

1、     16进制方式:一个字节需要用2个字母表示,如aa;必须以0x开头,否则认为检查文本

2、     文本方式:直接输入文本字符串,不以0x开头

3.3 XML 查找

在响应内容里查找节点名字符串

3.3.1 参数名

保存获取到的值为名称getPara

3.3.2 获取全部

1)     全部:表示获取匹配的所有值 (即数组),保存参数值的key分别为getPara, getPara_2, getPara_3, ..., getPara_n

2)     第一个: 只获取第一个匹配的值,并保存参数值的keygetPara

3.3.3 匹配文本

多级节点通过符号“/”分隔,如/parent/child表示获取child节点的内容值,而且它的父必须为parent。下面举例:

1)     例子1

响应消息内容为<root><parent><child>abc</child></parent></root>,需要提取child节点的内容值,则匹配文本可以配置如下:

/root/parent/child

/parent/child

/child

上面都可以得到参数内容abc,并将abc保存到参数名getPara

2)     提取多个同名节点值

响应消息内容为<root><parent><child>abc</child><child>efg</child><</parent></root>,需要提取child节点的内容值,则匹配文本可以配置如下:

/root/parent/child

/parent/child

/child

如果“获取全部”选择NO,则上面都可以得到参数内容abc,并将abc保存到参数名getPara

如果“获取全部”选择Yes,则上面都可以得到参数内容abc,并将abc保存到参数名validateCode;内容efg,并将abc保存到参数名getPara_2

3)     多个节点名相同但属性不同

可以通过属性过滤特定的节点

响应消息内容为<root><parent><child name=1>abc</child><child name=2>efg</child><</parent></root>,需要提取child节点的内容值abc,则匹配文本可以配置如下:

/root/parent/child name=1

/parent/child name=1

/child name=1

即查找的字符串味child name=1,属性与节点名中间符号一定要与内容一样

3.4 XML xpath

Xpath与前面的 xml查找不同之处是,响应内容必须是XML格式,且输入的xpath值必须符合xpath语法,xpath方式比 xml 查找更加消耗性能。

    

3.4.1 参数名

保存获取到的值为名称getPara

3.4.2 获取全部

3)     全部:表示获取匹配的所有值 (即数组),保存参数值的key分别为getPara, getPara_2, getPara_3, ..., getPara_n

4)     第一个: 只获取第一个匹配的值,并保存参数值的keygetPara

3.4.3 xpath

必须符合xpath语法,语法可参照:http://www.w3school.com.cn/xpath/xpath_syntax.asp

多级节点通过符号“/”分隔,如/parent/child表示获取child节点的内容值,而且它的父必须为parent。下面举例:

1)     例子1

响应消息内容为<root><parent><child>abc</child></parent></root>,需要提取child节点的内容值,则匹配文本可以配置如下:

/root/parent/child

上面都可以得到参数内容abc,并将abc保存到参数名getPara

2)     提取多个同名节点值

响应消息内容为<root><parent><child>abc</child><child>efg</child><</parent></root>,需要提取child节点的内容值,则匹配文本可以配置如下:

/root/parent/child

如果“获取全部”选择NO,则上面都可以得到参数内容abc,并将abc保存到参数名getPara

如果“获取全部”选择Yes,则上面都可以得到参数内容abc,并将abc保存到参数名validateCode;内容efg,并将abc保存到参数名getPara_2

3)     多个节点名相同但属性不同

可以通过属性过滤特定的节点

响应消息内容为<root><parent><child name=1>abc</child><child name=2>efg</child><</parent></root>,需要提取child节点的内容值abc,则匹配文本可以配置如下:

/root/parent/child[@name=1]

3.5 Scripter自定义方式

3.5.1 界面参数说明

1)        来源于

HTTPRTSPSIP协议消息格式分为头域与消息体两部分,其中头域部分为两回车前部分,消息体为两回车后部分(如HTTP里的HTML为两回车后,为消息体);其他协议只有响应消息一个选项。

说明:

分为头域与消息体两部分,缩小查找范围,提高查找效率

2)        获取参数

a)     左右方式:通过查找左边与右边文本方式获取参数值,例如:<a>123</a>,左边文本设置为<a>,右边文本设置为</a>,则获取的参数值为123

b)     自定义:提供复杂方式来获取参数值;包括查找文本使用正则表达式、查找多次、在查找到的参数值再进行查找。

c)     自动参数:协议典型参数,由平台自动获取;如HTTPCookieRTSPSessionSIPCseqCall-ID

3)        参数名

当选择左右方式或自定义时,必须设置参数名,表示提取的内容对应的key

4)        匹配文本

自定义时必须设置,在响应消息里查找的字符串,支持java正则表达式。如设置<a>.*</a>则可以得到内容值为<a>123</a><a>abcd</a>

5)        次数

设置查找的次数。如设置2,则表示需要查找两次,第1次找到的内容不是期望的参数值,第2次找到的内容才是期望的参数值

6)        左边文本

左右方式时必须设置,在响应消息里查找的字符串,该文本的结束位置为参数值的起始位置

7)        右边文本

左右方式时必须设置,在响应消息里查找的字符串,该文本的开始位置为参数值的结束位置

8)        结果来源于

a)     匹配规则的文本:不需要再进行查找,当前查找到的内容即为参数值;

b)     高级规则:在当前查找的基础上再进行一次查找,新查找的内容为参数值;

9)        类型

a)     在匹配文本里面:在当前查找到的内容里再进行查找,一般应用于正则表达式里再查找,如<a>.*</a>找到了<a>123</a>,但参数值为123,因此需要在里面进行第2次查找;

b)     在匹配文本后面:在当前查找到的内容后面再进行查找;

c)     在匹配文本前面:在当前查找到的内容前面再进行查找;

10)     查找文本

再查找字符串,不支持正则表达式;一般不需要配置

11)     开始偏移量

a)     偏移量:整数值。如<a>.*</a>找到了<a>123</a>,但参数值为123,因此可以设置偏移量为3,即为匹配文本的开始相对偏移量。

b)     开始于文本:字符串。如<a>.*</a>找到了<a>abc123</a>,但参数值为abc123,知道会以abc为前缀,因此可以设置开始于文本为abc,即包括文本abc

c)     结束于文本:字符串。如<a>.*</a>找到了<a>123</a>,但参数值为123,因此可以设置结束于文本为<a>,即不包括文本<a>(结束于它);

12)     结束偏移量

a)     偏移量:整数值。如<a>.*</a>找到了<a>123</a>,但参数值为123,因此可以设置偏移量为4,即为匹配文本的结束相对偏移量,</a>4个字符。

b)     开始于文本:字符串。如<a>.*</a>找到了<a>123</a>,但参数值为123,因此可以设置开始于文本为</a>,即不包括文本</a>

c)     结束于文本:字符串。如<a>.*</a>找到了<a>123abc</a>,但参数值为123abc,知道会以abc为后缀,因此可以设置结束于文本为abc,即包括文本abc

3.5.2 例子

响应消息内容:abcd <ip>1.1.1.1</ip> <b>456</b>,获取参数{ip}的值1.1.1.1

1)        正则表达式

IP正则表达式文本:(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)) {3}

2)        高级规则

先得到<ip>1.1.1.1</ip>,再使用高级规则从结果里得到IP地址

或者

4 录制与回放日志比较关联

4.1 浏览器页面操作关联参数

调试回放脚本,然后点击包含动态参数的http请求的日志;

例如登陆请求需要验证码,验证码来自前面的/Example/,则点击Example这个名称查看日志

点击比较“识别关联”,如果有需要关联的内容,将出现在表格,如果没有,则表示平台自动识别无效,需要手工添加关联参数。

4.2 Scripter编辑器操作关联参数

Scripter关联功能比浏览器操作更加强大,如果用户不知道怎么识别关联可以通过脚本编辑器登陆平台,然后打开对应的脚本,调试回放,然后点击工具栏的比较按钮,再点击按钮自动列出两次录制日志的不同地方的表格,选择需要关联的记录,然后添加

可以参照help目录《kylinPET HTTPWEB)业务使用指导》里的调试、关联章节

5 Scripter实现HTTP协议两次录制比较关联

需要使用scripter编辑器

 

目前只支持HTTP协议的业务,连续录制两次业务,确保录制两次的操作步骤一样。假设文件名保存为AB,打开A文件,然后点击平台栏的比较按钮,选择B文件;弹出比较窗口,再点击按钮自动列出两次录制日志的不同地方的表格,选择需要关联的记录,然后添加。

说明:

连续录制两次的比较,关联时默认只显示发送请求里出现不同的匹配文本。关联的目的就是在发送时带上参数值,两次录制的脚本的请求内容或参数里,如果出现不一样的文本,基本可以确定该文本是需要关联的,因此从响应消息里得到不一样的文本时,只要是在发送里存在,则可以认为是需要关联的值。

因为可能从响应内容里得到不同的值存在很多,但不一定都需要关联,只有后面请求消息带上它时,才表示需要关联。

界面介绍请参照《kylinPET HTTPWEB)业务使用指导》文档的“2.5录制两次脚本比较实现关联参数”里的“2.5.2”至“2.5.9

5.1 弹出未找到的URL窗口

如果点击“比较”后,弹出如上图的窗口,表示列举属于第二个录制文件的URL在第一个文件里找不到它对应的URL

注意:

1.          如果是URL的参数不一样,平台是能够识别的,但如果是URL参数前面不一样,平台则认为是不一样。

需要用户确定两次录制步骤是否一样,如果第二次录制多了一些步骤或者步骤不一样则将导致找不到的URL;还有如果业务交互过程的HTTP请求存在动态改变URL(不包括参数值)的情况,例如:

第一次录制的URLhttp://www.baidu.com/abc/1/

第一次录制的URLhttp://www.baidu.com/abc/2/

 

解决办法:用户在workspace\url_map目录下创建一个map.txt文件,文件每一行代表一个映射,URL间使用空格分隔;第二个录制文件即窗口提示找不到的URL在前面,如:

5.2 关联过滤

Loadrunner的关联自动搜索响应内容然后自动关联到脚本,但有些场景出现关联出错或关联缺少;kylinPET的关联也是自动搜索响应内容里不同的地方,然后默认(即过滤条件勾选了去掉重复与只在HTTP请求出现)过滤出只在后面的发送内容里找到值得关联项。

如果用户对业务系统比较熟悉,可以查看下关联项是否都需要添加,然后根据业务所需添加;

如果用户对你们的业务系统不熟悉,建议选择勾选过滤条件(默认是勾选)后的全部关联项,然后批量添加(类似loadrunner的自动关联)。

说明:

1)     左文本:过滤表格的记录左文本包含该值的记录,如果为空表示不过滤左文本

2)     右文本:过滤表格的记录右文本包含该值的记录,如果为空表示不过滤右文本

3)     只显示“匹配文本”出现在请求内容里:勾选表示表格的记录里,当匹配文本存在请求里才展示;不勾选表示显示全部

例如关联存在abcdfg,但在后面的请求URL:http://192.168.1.7/a?xx=abc

abc出现在后面请求内容里,很大可能需要关联,而dfg没出现后面的所有请求里,因此很大可能不需要关联,除非需要dfg去进行逻辑运算得到abc

4)     多条“匹配文本”一样只显示第一条:勾选表示表格的记录里,当匹配文本一样的多条记录只显示第一条;不勾选表示显示全部

例如有记录

其中“匹配文本”primary出现多次,勾选则只显示一条,过滤掉后面两条记录。因为如果该值后面几条每次运行都一样,则取一次就够了,后面再取该值只是浪费效率。

5.3 添加关联

5.3.1 批量添加关联

在表格里选择需要关联的项,如果对系统不熟悉,可以勾选过滤条件后,选择全部。

当在关联窗口选择多条时,然后单击“添加”按钮,则为多条记录批量添加关联,提高效率。

如果出现告警:

最下面列出的参数名与参数值表示虽然在脚本里添加成功了,但这些参数值没在后面的发送请求里找到它对应的值,可能不需要关联,需要用户自己判断是否需要。

5.3.2 添加单个关联

可以双击表格某条记录或者选择某条记录,然后点击“添加”按钮来添加。

如果出现告警:

关联虽然在脚本里添加成功了,但该参数值没在后面的发送请求里找到它对应的值,可能不需要关联,需要用户自己判断是否需要。

6 通过自己实现JAVA代码关联参数

当平台提供的管理参数功能不能满足需求时,如需求提取内容解密或者计算,则用户可以自己通过JAVA代码实现关联。操作方式请参照help目录的《kylinPET 调用外部java类实现扩展》文档。

主要是实现receive函数,提取内容值然后放入parameterMap.