协议分析:
HTTP:hypertext transfer Protocol,HTTP,是WWW网的基础,它是一个属于应用层面向对象的协议,HTTP最初的目的是通过网络实现client和server之间的事务处理。在HTTP中,Client在本地主机向运行于远程主机上的Server请求连接,连接成功后通过GET来访问Server端的对象(可以是网页,也可以是动态页面)。Server端在请求关闭前将请求的对象或者错误消息返回给Client,结束响应过程。
HTTP客户向服务器请求响应时,只需要传送请求方法和路径即可,请求方法主要有GET,HEAD,和POST.其中GET应用最广泛。
它允许传输任意类型的数据对象。
无连接:使用了TCP,限制每次连接只处理一次请求。服务器从接受到客户端的请求,返回请求的信息后,即断开连接。
HTTP报文的结构如下:
请求行
通用头
请求头
实体头
实体主体。
HTTP请求:由三部分组成,分别是:
方法-URI-协议/版本
请求头
请求正文
HTTP请求的例子:
GET/HTTP/1.1 --------请求报文中的方法:get,/请求使用的根目录:HTTP/1.1是协议和具体的版本
Accept:text/html,application/xhtml+xml,*/*
客户端正文所能接受的内容类型,
Accept-Language:zh-CN
客户端的语言
User-Agent:Mozilla/5.0(Compatible;MSIE 9.0:WINDOWS NT 6.1; WOW64; TRIDENT/5.0)
表示客户端的信息。
Accepting-Encodeing:gzip,deflate
表示客户端接受的服务端返回的压缩数据类型(此处为动态压缩,节约网络传输花费的时间)
HOST:BBS.51TESTING.COM
请求的主机地址
Connection:Keep-Alive:
Keep-Alive,是HTTP1.1预设的功能,它使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,此功能可以避免建议或者重新建立连接。对于提供静态内容的网站,这个功能很有用。
HTTP应答
组成也分为三部分:协议—状态代码—描述;应答头;应答正文。
HTTP/1.1 200 OK----使用的协议为HTTP,状态成功
Server: nginx/0.8.15 -----服务器上WWW服务参数
Date:mon,12 sep 2011 07:31:31 GMT---服务器上格林威治时间
Content-type:text/html---返回的正文类型
Transfer-Encoding:chunked
Connection:keep-alive
X-powered-by:PHP/5.2.10
Expires:0
Cache-Control:private,post-check=0,pre-check=0,max-age=0
Pragma:no-cache
Vary:Accept-Encoding
Content-Encoding:gzip
Vary:Acccept-Encoding
录制脚本时的script. type基于HTML两种不同的脚本类型
一种是A script. describing user action
Web_link
是录制脚本选项时,选择a script. describing user action后才有,
用来模拟用户的点击一个超链接的行为。基本语法如下:
WEB_LINK(“在测试结果显示的名称”,“TEXT=需要点击的超链接名”,”SNAPSHOT=T4.INF”,LAST)
Snapshot后的文件表示,点击操作后的内容会被抓图保存到t4.inf中,最后的LAST,表示函数结束。
由于我们使用的中文操作系统默认编码为GB2312,lr对服务器返回的内容自动使用GB2312方式阅读,但几乎所有的中文网站现在都使用UTF-8编码,解码方式不同导致乱码出现。
可用函数Lr_convert_string_encoding(“欲转换的内容”,lr_enc_system_locale,lr_enc_utf8,”欲存储成的变量”)实现编码的转换
如果一个页面有多个两名的链接,web_link函数用ord=ng为分辨。如单击第二个链接,则用:
Web_link(“门户”,”Text=link”,ord=2,Last);
同名的顺序是根据HTML代码的解释顺序:从左到右,先上后下。
另外一种是:A script. containing explicit URLs only
它注重于用户在客户端发送的请求。
Web_link,被web_url替代了,web_url函数的作用是实现地址请求的过程。基本语法是:
Web_url(“在测试结果中显示的名称”,”URL=需要访问的超链接地址”,LAST).
Web_submit_form(),函数会自动检查页面是否有表单,然后将ITEMDATA数据自动传送。
注意:页面有多个表单时无法录制得到,LR自动使用web_submit_data()函数代替
Web_submit_data与web_submit_form,不同,它不需要前面页面的支持,它直接发送对应页面的关键数据。
web_concurrent_start和web_concurrent_end
可以生成并发请求。
这两个函数是在URL中标记一个页面请求的,注意:这里我说的是页面(page),并不是请求。
在LR请求一个页面里,由于使用URL的方式录制,会把一个页面中的元素分成几个web函数做处理。所以,LR中实现了web_concurrent_start和web_concurrent_end。
实现的作用是:从web_concurrent_start开始标记,当脚本运行到web_concurrent_start时,后续的脚本都不会立即被执行,直到web_concurrent_end出现。才把这中间的所有的脚本一起执行。
所谓并发组也是指把这一组函数一起执行起来。
如果用lr_start_transaction和lr_end_transaction来替换,脚本完全可以跑通。中间的脚本是从上到下执行的,而不是一起执行的。
说明web_concurrent_start函数是并发组开始的标记。组中所有的函数是并发执行的。并发组的结束web_concurrent_end函数。在并发组中,可以包含的函数有:web_url、web_submit_data、web_custom_request、web_create_html_param、web_create_html_param_ex、web_reg_save_param、web_add_header。
web_custom_request ()
当请求比较特殊时,这个函数的作用是自定义:HTTP