web_submit_form web_submit_data

上一篇 / 下一篇  2013-06-11 08:17:29 / 个人分类:LR

首先,从工具的角度来说,厂商推荐使用Web_submit_form函数,因为这个函数看起来更易用,需要关注的东西较少。但是,从个人的角度来说,我推荐使用Web_submit_data函数。因为这个函数提供更多技术细节。在测试的过程中可控性更高。下面我就详细解释一下两个函数的工作机制:

首先看一下下面这段HTML代码

Html代码

  1. <Form Action=login.asp Method=“POST”>  
  2. <input name=user value=“”>  
  3. <input name=password value=“”>  
  4. <input type=hidden name=sessionID value=15379>  
  5. </Form>  

<Form. Action=login.asp Method=“POST”>

<input name=user value=“”>

<input name=password value=“”>

<input type=hidden name=sessionID value=15379>

</Form>

在录制的过程中,当打开这个页面的时候,这个页面会放在LR的Cache中,之后当我们输入了用户名、口令之后,点了一下提交。Browser会向LR Record Proxy发送一个提交请求,提交内容应该是这样的:

Loadrunner代码

  1. POST login.asp HTTP/1.1  
  2. user=steve password=buba   
  3. sessionID=15379  

POST login.asp HTTP/1.1

user=steve password=buba

sessionID=15379

这时候,LR会自动比较提交的内容和Cache的内容,首先它会比较提交的数据项和Cache中的数据项是否一致。页面中有三个输入域user、password、sessionID,而提交的内容也有这三项数据,所以它认为提交数据使用了Cache中的页面,之后它会继续比较具体数据的值。它会发现sessionID的值和Cache中的值是一样的。但是user和password的值不一样。

这时候,Web_submit_form和Web_submit_data的区别就出现了:

Loadrunner代码

  1. web_submit_form(”start",   
  2. ITEMDATA,   
  3. "name=user", "value=steve", ENDITEM,   
  4. "name=password", "value=bean", ENDITEM,   
  5. LAST);  

web_submit_form(”start",

ITEMDATA,

"name=user", "value=steve", ENDITEM,

"name=password", "value=bean", ENDITEM,

LAST);

Loadrunner代码

  1. web_submit_data(”start",   
  2. “Action=login.asp”,   
  3. “Method=POST”   
  4. ITEMDATA,   
  5. "name=user", "value=steve", ENDITEM,   
  6. "name=password", "value=bean", ENDITEM,   
  7. "name=sessionID", "value=15379", ENDITEM,   
  8. LAST);  

web_submit_data(”start",

“Action=login.asp”,

“Method=POST”

ITEMDATA,

"name=user", "value=steve", ENDITEM,

"name=password", "value=bean", ENDITEM,

"name=sessionID", "value=15379", ENDITEM,

LAST);

可以看到,Web_submit_form只提供了和Cache中有差别的数据,其余的数据会自动从Cache中取。而Web_submit_data则提供了所有的数据,不管Cache存在不存在Web_submit_data都是可以工作的。

所以厂商会推荐使用Web_submit_form,因为它看起来更易用,甚至关联都不需要作,就能直接回放。但是这种情况只能对于简单系统适用。对于一些银行或者移动的复杂系统来说,有时侯会对Cache作特殊操作,Web_submit_form有时侯就会报一些莫名其妙的错出来。而Web_submit_data则跟Cache内容无关。稳定性和可控性都要比Web_submit_form要高很多。所以个人推荐尽量使用Web_submit_data函数。

   但是之前遇到过一个录制上传文件的脚本问题起初用了web_submit_data提交表单怎么都不成功(脚本回访通过,但是时间文件没有上传),改用web_submit_form后直接就成功了,到现在还没有分析出具体原因,慢慢学习吧!


###############################################################

web_submit_data函数处理无状态或者上下文无关的表单提交。它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的。发送这些请求时不需要表单上下文。

函数语法:Int web_submit_data ( const char *StepName, , ITEMDATA, , [ EXTRARES, ,] LAST );

返回值:LR_PASS(0)代表成功,LR_FAIL(1)代表失败。

 

函数参数
List of Attributes:支持以下属性:
1. Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL。
2. Method:表单提交方法:POST或GET(默认是POST)。
3. EncType:编码方式。
4. EncodeAtSign:是否使用ASCII值对符号“@”编码。Yes或者 No。
5. TargetFrame:包含当前链接或资源的Frame。参见List of Attributes的同名参数。
6. Referer、Mode:参见List of Attributes的同名参数。
ITEMDATA:数据域和属性的分隔符。
List of Data:
数据域列表定义了表单提交的内容。由于此请求是上下文无关的,因此数据域包含了所有的隐含域。使用Form的编码规则组织数据域。
数据域列表可以使用下面任意一种格式:
"name=n1", "value=v1", ENDITEM,
"name=n2", "EncryptedValue=qwerty", ENDITEM,
EXTRARES:分隔符,标记下一个参数将是资源属性的列表。
List of Resource Attributes:参见List of Resource Attributes。
LAST:结束标记符。

通常情况下,如果录制了web_submit_data 函数,VuGen会把“name”和“value”一起录制到ITEMDATA一节中。如果不想在脚本中以明文显示“value”,可以对它进行加密。把“Value”改为“EncryptedValue”,然后把录制到的值改为加密后的值。请参考web_submit_form中相关的内容


TAG:

 

评分:0

我来说两句

Open Toolbar