初学性能测试时候,第一步必学脚本录制,但一路下来各种录制失败、回放脚本失败的问题层出不穷,究其原因一是LR本身存在对测试环境的兼容性问题导致录制失败,更深层次的原因是录制者不清楚LR录制脚本的原理,或者不清楚客户端与服务器端之间的请求和应答内容及通信方式,导致一旦出现脚本执行失败便无从下手。最近在做项目的一个接口测试时候,因请求是合作第3方发起的且不容易让第3方提供他们的平台给我们做测试,所以这种情况是没办法取录制脚本的,只能选择手动编写脚本实现。得知接口是使用http协议的post方法,想到了web_submit_form()和web_submit_data()两个函数,它们实现了http请求中的post方法,问题来了,它们都提交表单到某个页面,但现在被测试的仅是个http接口,显然这两个函数都无法满足需要。
于是想到了web_custom_request(),这个函数的作用是自定义http请求规则,一看不由地暗喜原来web_custom_request()函数是一个可以用于自定义http请求的“万能”函数,具有web_link()、web_url()、web_submit_data()函数的功能,可以自由定义需要的http的get和post请求。网上看到一篇介绍web_custom_requst,写的非常详细,分享一下(当然英文好的直接看LR自带的帮助文档会感觉更原味)
=================
一、以下是HTTPWATCH录制的HTTPRequest数据
POST /member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1 HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, ……
Referer: http://bbs.gfan.com/forum.php
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; ……)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: bbs.gfan.com
Content-Length: 109
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: pgv_si=s6847084544; Hm_lpvt_6790309a725fc338d4fe3efb72d4a6ea=1370165750;……
fastloginfield=username&username=abcd&password=e2fc714c4727ee9395f324cd2e7f331f&quickforward=yes&handlekey=ls
二、用web_custom_request()函数实现提交数据:
web_custom_request("gfan",
"Method=POST",
"URL=http://bbs.gfan.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes",
"body=fastloginfield=username&username=abcd&password=e2fc714c4727ee9395f324cd2e7f331f&quickforward=yes&handlekey=ls",
LAST);
==============================
web_custom_request方法可以发送POST和GET类型的请求
web_submit_data只能发送POST类型的请求
所有web_submit_data方法发送的请求都可以使用web_custom_request来实现
web_custom_request可以实现web_submit_data无法实现的请求,
比如“查询所有邮件并删除”这个案例中,查询时我们使用关联把所有邮件对应的标识抓取成一个数组,如果使用web_submit_data来完成这个删除的请求,需要很多个web_submit_data请求才能完成,但使用web_custom_request就可以通过一个请求完成,方法是自己写代码拼一个web_custom_request
web_submit_data请求中提交的数据是以这样的方式存在的
“Name=属性名称,”,“Value=属性值”
“Body=属性名称=属性值&属性名称=属性值&……”
通过我的观察,发现有两种情况下的POST请求会被LoadRunner录制为web_custom_request,
1.
2.
这两种实现请求的方法还有一个需要注意的地方就是web_custom_request中body中的属性值如果包含一些特殊字符,必须通过URL编码,否则Web服务器会返回500错误,一个典型的例子是如果Body中包含ViewState,ViewState中常常有“=”之类的特殊字符,此时必须通过URL编码,LoadRuner中提供了一个这样的编码转换函数
除LoadRunner外,你可以在Fiddler中按Ctrl+E来转换