WebLoad 对于模拟一个HTTP 请求,一般都是 由以下三部分组成,并把这三部分包在一个Transaction里(从BeginTransation 到 EndTransaction 为止):
1. request header or cookie
a) request header, 即发送HTTP请求时所附带的头部,一般Post请求需要头部为多,由以下方法构成
wlHttp.Header["key"] = "value"
例子,RPS2 项目的请求都需要添加一个 特殊头部 "When calling RPS2, for each call, you must also include a http header with x-product-code:retail_phoenix", 所以这个请求头部的是:
wlHttp.Header["x-product-code"] = "retail_phoenix"
b) cookie,有时候发送HTTP 请求需要包含一个登陆或者是用户信息的cookie,而当带有cookie的请求时WL 不能录制,需要自己手动添加代码, 添加cookie的方法是wlCookie.Set(name, value, domain, path [, expire])
例子,RPS 需要的请求需要包含一个 mstar=V63LP207K0564O7267263N3512P365O6KOL18OL2L034KL02820 的cookie,则调用cookie的方法是:
wlCookie.Set("mstar", "V63LP207K0564O7267263N3512P365O6KOL18OL2L034KL02820", "http://scdispqaweb.morningstar.com","/", ""),
其中cookie可以放在一个txt的文件中,然后参数化,则有
wlCookie.Set("mstar", dataMap_cookie.getValue(), "http://scdispqaweb.morningstar.com","/", "")
Note: 曾经犯过一个错,就是把cookie放在request header里,即使用wlHttp.Header["cookie"] = "mstar=...."
2. request content ( and content type )
发送HTTP 请求,特别是Post请求,一般都要发送一些请求内容或者提交一些表单。WL 提供三种提交表单或发送请求体的方法
a). FormData
FormData 属于wlHttp对象的属性,使用的格式可以有两种,wlHttp.FormData["key"] = "value" or wlHttp.FormData.key = "value"
例子,wlHttp.FormData["Login"] = "tom.weng@morningstar.com"
wlHttp.FormData["Password"] = "Mstar123"
or
wlHttp.FormData.Login = "tom.weng@morningstar.com"
wlHttp.FormData.Password = "Mstar123"
Note: the difference is that The wlHttp.FormData["key"] notation also supports spaces in the name,
for example, wlHttp.FormData["First Name"].
b). Data
This method is used to submit a string that is not a standard HTML form and cannot be represented by
FormData. It has two subfields:
Data.Type – The MIME type for the submission
Data.Value – The string to submit
和 FormData 一样,它也可以有两种表达方式:
wlHttp.Data.Type = "value";
wlHttp.Data.Value = "value";
或者
wlHttp.Data["Type"] = "value"
wlHttp.Data["Value"] = "value"
例子:wlHttp.Data.Type = "application/x-www-form-urlencoded"
wlHttp.Data.Value = "email=pms.advisor9@morningstar.com&strPassword=Mstar123&Login=1&rbtn=btnEmail&rnd=(new Random()).NextDouble().ToString()&ProductCode=AWSOE&ProductID=AWSOE"
或者
wlHttp.Data["Type"] = "application/json; charset=UTF-8"
wlHttp.Data["Value"] = "{\"Name\": \"tom weng\", \"Number\": 1024, \"Title\": \"QA Engineer\" }"
注意: 当用Data 方面时,Value 属性是必须的,即必须有 Data["Value"] 或 Data.Value
c). DataFile
DataFile 的作用主要是: 当Post 请求的 请求体内容太大的话,为方便脚本的维护,把请求内容放到一个外部文件中,然后通过DataFile 这个方法导入外部文件。而不需把整一大段Post请求内容放到脚本里。
同样的,DataFile也支持两种表达方式:
wlHttp.DataFile.Type = "value";
wlHttp.DataFile.Filename = "value"
or
wlHttp.DataFile["Type"] = "value"; wlHttp.DataFile["Filename"] = "value"
例子:
wlHttp.Header["X-API-UserId"] = "d5b04f19-e16b-4963-a6c1-faac4624fb48"
wlHttp.Header["X-API-ProductId"] = "Direct"
//wlHttp.DataFile.Type = "application/json; charset=UTF-8"
//wlHttp.DataFile.Filename = "D:\\Load Test\\Tom\\DataFileTest\\datafile.txt"
wlHttp.DataFile["Type"] = "application/json; charset=UTF-8"
wlHttp.DataFile["Filename"] = "D:\\Load Test\\Tom\\DataFileTest\\datafile.txt"
wlHttp.Post("http://api-data-stg.morningstar.com/v2/lists")
上面的例子,我把Post的请求内容(Json格式)放到了一个叫 datafile 的 txt 文件里,然后通过 wlHttp.DataFile.Filename 这个方法把该文件引进来。
ContentType:
Description : Specifies the content type of the HTTP request.
Note: content type 可做作为 request header field, 也可以作为wlHttp的属性单独来使用
wlHttp.Header["Content-type"] = "application/x-amf"
wlHttp.ContentType = "application/x-www-form-urlencoded"
3. request
一般HTTP 请求为:Get,Post,Put, Delete.... WL 相应提供了这几种方法,也是属于wlHttp 对象
wlHttp.Get("URL");
wlHttp.Post("URL");
wlHttp.Put("URL");
wlHttp.Delete("URL")
例子:
wlHttp.Get("http://www.baidu.com")
wlHttp.Post("http://mcsvqaap-cloud.morningstar.com/DataService/api/v2/entity/columnsets")
wlHttp.Put("http://api-data-stg.morningstar.com/v2/columnSets/" + IDMap_ColumnSet_ID.getValue())
wlHttp.Delete("http://api-data-stg.morningstar.com/v2/columnSets/" + corr_Morningstar_columnsetID_3)
validation
最后是验证
- Shell脚本exit用法与区别
在Shell脚本中,往往会遇到一些判断类型为某个值不符合预期值的时候就退出主脚本/当前脚本/当前函数,那么Exit与return的用法与区别是什么呢? 下面先使用Exit举个简单例子,脚本内容如下 # ...
- shell脚本基本用法
下面是一些简单常用的脚本,工作中可能会用到,记录一下. #!/usr/bin/env bash #变量[=两边不要有空格], 在使用的时候需要用${变量名} 或者是$变量名 name="sa ...
- 一个WebLoad 脚本范例
//initial the Agenda function InitAgenda(){ wlGlobals.SaveHeaders = true; wlGlobals.SaveSour ...
- php类似shell脚本的用法
参考: http://www.cnblogs.com/myjavawork/articles/1869205.html php还可以用于类似于shell脚本,哈哈,对编程语言和对整个计算机系统的认识又 ...
- expect脚本语言用法示例
#!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...
- SQL约束脚本的用法
1.主键约束:要对一个列加主键约束的话,这列就必须要满足的条件就是分空因为主键约束:就是对一个列进行了约束,约束为(非空.不重复)以下是代码 要对一个列加主键,列名为id,表名为emp 格式为:a ...
- paramiko远程控制host执行脚本的用法
import paramiko ssh = paramiko.SSHClient() print ssh.get_host_keys() ssh.set_missing_host_key_policy ...
- Bash 脚本进阶,经典用法及其案例
前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神.虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加 ...
- mysql+keepalived主从切换脚本 转
Keepalived MySQL故障自动切换脚本 MySQL架构为master-slave(主从),master故障自动切换到slave上.当然也可以设置为双master,但这里有个弊端:就是当主 ...
随机推荐
- 洛谷 P2824 [HEOI2016/TJOI2016]排序 (线段树合并)
(另外:题解中有一种思路很高妙而且看上去可以适用一些其他情况的离线方法) 线段树合并&复杂度的简单说明:https://blog.csdn.net/zawedx/article/details ...
- 字符串处理 BestCoder Round #43 1001 pog loves szh I
题目传送门 /* 字符串处理:是一道水题,但是WA了3次,要注意是没有加'\0'的字符串不要用%s输出,否则在多组测试时输出多余的字符 */ #include <cstdio> #incl ...
- 虚拟机下安装 CentOS 7 的几个小问题
※ 网络问题(Destination Host Unreachable) 安装时网络选择的"桥接"模式, 安装完毕,并配置IP地址后,发现只能ping通自己,局域网内的其他IP无法 ...
- Elasticsearch--集群管理_时光机&监控
目录 Elasticsearch时光机 创建快照存储库 清理:删除旧的快照 监控集群状态和健康度 集群健康度API 索引统计API 状态API 节点信息API 节点统计API 集群状态API 挂起任务 ...
- 聊5块钱P2V
上一秒还在写代码,下一秒就跑机房干活. 这台机器产制石器时代,重启一次后再就启动不了了.这个故障处理的方式我们以后再谈. 今天聊聊啥是P2V,国人总喜欢弄些稀奇古怪的定义来证明自己技术很牛X,就跟当年 ...
- Mac下部署与启动STF
一.stf在Mac下的部署1.安装Java及jdk可自己谷歌(如果不能自建云梯)2.安装nodejs包(我是直接在官网下载的LTS版本) • Node.js v8.12.0 to /usr/local ...
- iOS Programming Views :Redrawing and UIScrollView
iOS Programming Views :Redrawing and UIScrollView 1.1 event You are going to see how views are red ...
- Node.js——请求头
var http = require('http') var server = http.createServer(); server.on('request', function (req, res ...
- Relational Algebra 关系代数
Relational Algebra Relational Algebra is the mathematical basis for the query language SQL Introduct ...
- org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [********] will not be managed by Spring
如下图,查看层次是否正确.