LoadRunner接口函数web_custom_request
在我们录制脚本时,正常情况下一般都是使用HTML记录的方式来录制脚本。生成的脚本中绝大部分都是使用web_submit_data或web_submit_form函数来提交请求。但是如果请求不能使用web_submit_data或web_submit_form函数提交时,那么LoadRunner会生成自动定义请求函数来提交请求。自定义请求函数为web_custom_request。
对于使用HTML方式录制好的脚本也可以通过重新生成脚本的方式,将脚本变成以自定义请求函数提交请求的脚本。其步骤如下:
- 选择重新生成脚本
对于使用HTML方式录制好的脚本也可以通过重新生成脚本的方式,将脚本变成以自定义请求函数提交请求的脚本。其步骤如下:
单击Tools菜单,在弹出的下拉菜单中选择Regenerate Script,如图所示。
2) 在弹出的对话框中单击“选项”按钮,如图所示。
3) 设置录制方式。
在弹出的Regenerate Options对话框中,选择Recording选项,然后再选择URL-based script选项,单击“URL Advanced”。
在弹出的Advanced URL对话框中,选中“Use web_custom_request only”选择项。如图所示。
完成后脚本会修改为都是以自动定义请求的方式发送请求。
web_custom_request函数语法如下:
int web_custom_request( const char *RequestName, ,
[EXTRARES, ,] LAST );
web_custom_request函数主要包括以下属性选项:
- URL
提交请求的地址
- Method
表单提交的方法,一般有两种:GET或POST。
- TargetFrame
表示当前链接或资源的Frame名称。除了Frame的名字,还可以设置以下参数:
_BLANK:打开一个新的窗口。
_PARENT:使用最新的Frame代替上级的Frame。
_SELF:替换最新更改过的Frame。
_TOP:替换整个页面。
- EncType
使用的编码方法的类型,指定内容类型(Content-Type),指定其做为回放脚本时“Content-Type”请求头的值,例如“text/html”。Web_custom_request函数不会处理未编码过的请求体,请求体参数将会使用已经指定的编码方式。因此,如果指定了不匹配HTTP请求体的“EncType”,会引起服务端产生错误。通常建议不要手动修改录制时的“EncType”值,因为任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当指定了“EncType=”(空值)时,不会产生“Content-Type” 请求头。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函数,且“Method=POST”,“application/x-www-form-urlencoded”会做为默认值来使用。其他情况下,不会产生Content-Type请求头。
- RecContentType
表示响应头的内容类型。录制脚本时响应头的内容类型。例如text/html、 application/x-javascript等。如果没有设置Resource属性,那么可以用它来确定目标URL是否是可记录的资源。此属性包含主要的和次要的资源。最频繁使用的类型是 text、application、image。次要的类型根据资源不同变化很多。例如:“RecContentType=text/html”:表示html文本,“RecContentType=application/msword”:表示当前使用的是Msword。
- Referer
表示当前页面关联的页面,如果当前的位置是一个明确的,那么此项可以省略。
- Body
表示请求体的内容。即请求时所用到的相关参数。
8) Raw Body
表示请求体是以指针的方式进行传递。Raw Body的语法格式如下:
RAW_BODY_START,
缓存数据指针
(int) length,
RAW_BODY_END
如以下实例:
char *test=“helloworld”
web_custom_request(“StepName”,
"URL= http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php ",
“Method=POST”,
RAW_BODY_START,
" test ",
5,
RAW_BODY_END,
LAST);
9) BodyFilePath
作为请求体传送的文件的路径。它不能与下面的属性一起使用:Body或者其他Body属性或Raw Body属性包括BodyBinary、BodyUnicode、RAW_BODY_START或Binary=1
10) Mode
表示两种录制方式:HTML或HTTP。
关于Body中数据传输的方式有三种:一是表单格式的数据;二是JSON格式的数据;三是二进制格式的数据。
下面是一个登录的脚本,录制使用的是web_submit_data函数提交请求的。
web_submit_data(“user.php”,
“Action=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php”,
“Method=POST”,
“RecContentType=text/html”,
“Referer=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php”,
“Snapshot=t40.inf”,
“Mode=HTTP”,
ITEMDATA,
“Name=username”, “Value=test”, ENDITEM,
“Name=password”, “Value=111111”, ENDITEM,
“Name=act”, “Value=act_login”, ENDITEM,
“Name=back_act”, “Value=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/”, ENDITEM,
“Name=submit”, “Value=”, ENDITEM,
LAST);
下面将使用web_custom_request函数以表单的方式进行提交请求。
web_custom_request(“user.php”,
“URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php”,
“Method=POST”,
“RecContentType=text/html”,
“Mode=HTTP”,
“Body=username=test&password=111111&act=act_login&submit=”,
LAST);
为了让代码看上去再直观可以将代码修改成以下格式:
web_custom_request(“user.php”,
“URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php”,
“Method=POST”,
“RecContentType=text/html”,
“Mode=HTTP”,
“Body=username=test&”
“password=111111&”
“act=act_login&submit=”
,
LAST);
下面将使用web_custom_request函数以JSON的方式进行提交请求。
web_custom_request(“user.php”,
“URL=http://192.168.40.128:8091/ECShop_V2.7.3_UTF8_release0411/upload/user.php”,
“Method=POST”,
“RecContentType=text/html”,
“Mode=HTTP”,
“Body=username=test&password=111111&act=act_login&submit=”,
“Body= {“username”:test,“password”:111111,“act”:act_login,“submit”:}”,
LAST);
也可以使用Body发送二进制格式的数据,如以下代码:
web_custom_request(“test”,
“URL=http://www.bing.com”,
“Method=POST”,
“TargetFrame=”,
“Resource=0”,
“Mode=HTTP”,
“Body=\x68\x65\x6C\x6C\x6F”,
LAST);