loadRunner录制脚本原理

来源:互联网 发布:java 多线程列子 编辑:程序博客网 时间:2024/05/16 05:38
~~~~~~~~~~~~~~~~~LR录制脚本原理~~~~~~~~~~~~~~~~~~~~~~
" F8 {& t7 N" Y+ v9 Y( z! B@ LR录制是针对网络通讯协议层面的,它只关心客户端与服务器端的通讯包。. l( D8 a% W6 o, v+ X, u
@ LR的并发测试实际上就是并发客户端与服务器端的通讯过程。" }) |- r3 ?+ a3 P) {, ?
@ 压力是通过多进程/多线程方式实现的,目前流行OS都是支持线程。每个进程/线程向服务器后台发送1个请求脚本数据包。
# R3 h/ N% I# a3 }@ LR录制脚本采用proxy的方式,客户端请求的数据会先发到proxy服务器(录制器),录制器将数据转发给服务器端;服务器端的响应数据先发给录制器,然后由录制器响应给客户端。
/ }: E6 \4 \, S: q0 q. w: {$ |
: U) v+ p h: L* h4 f. ~) T' |
% s8 O6 E% ~" L7 u, s2 H2 S
* L# C- Y: M% x: p N( t& k4 m# S9 w
~~~~~~~~~~~~~~~~LR回放脚本过程~~~~~~~~~~~~~~~~~~~~~~~~
( z6 b: K1 V' P" B5 @6 A. J@ 录制的脚本文件就是一连串请求的通讯命令,发——》收——》发——》收的循环过程。脚本中协议大多采用TCP/IP协议,涉及技术有底层socket技术、buffer技术。4 R. I# [* J5 F9 t
1> 先在内存中新建buffer,用来存储客户端和服务器端的通信信息,然后与服务器端(IP、端口、协议)建立socket连接。. F* L, ~4 A1 ]2 ]1 G, v
2> 将脚本中所录制的请求数据包(指令信息等)从datafile中加载到buffer中! C, _8 P: d+ n1 U
3> 将buffer中的数据包send给服务器端
0 U3 Q3 Z* @$ j. e5 ?& _4 I$ T4> 服务器端收到数据包后,如果合法,服务器将作出响应,服务器取回响应数据receive到buffer中
8 N l) I8 C" g, i8 w( I# ~5> 将第二次脚本中所录制的请求数据包(指令信息等)从datafile中加载到buffer中* V6 Z9 A4 t2 E' |2 C8 v3 n/ X
6> 将buffer中的数据包send给服务器端
- b: S) g- D* ^, v7> 服务器端收到数据包后,如果合法,服务器将作出响应,服务器取回响应数据receive到buffer中: i! L$ R" c0 S( c) `- L$ ~
" ]$ `8 C- v# x0 K- x% ]

! d6 o/ Y$ b( y1 c }依次类推......+ ~ S, X d+ s

# ^1 e7 H; p7 }& Z+ }
2 y' g3 V1 N$ b; r
?) f0 [/ f; l6 k: ?/ Q~~~~~~~~~~~~~~~~~压力测试结果~~~~~~~~~~~~~~~~~~~~~~~~~. U0 D# g% G. t1 X$ H+ W
@ 用户想要看到的压力测试的结果是并发不同用户数据量时系统的反应,以及能够承受的最大极限和优化方案。, C" ?& l+ e1 B7 |- I
@ 用户数分别为50,100,500...时,系统参数、响应时间的变化,才是压力测试有意义的结果. ]' Q7 X$ f" P. |" ^+ K

* F1 S. d* j6 [7 e6 R2 H& C( f4 E# `! \% g4 H. q
【注解】" I3 u. R7 h% {6 H0 d
1> socket(套接字)
4 h; ]- b8 k2 i' Q4 _ @ 4BDS UNIX进程通信机制,是一个通信链的句柄,在Internet上的主机一般运行了多个服 务软件,同时提供几种服务,每个服务都会打开一个socket,并绑定一个端口,不同端口提供不同的服 务。socket相当于一个多孔插座,主机相当于一个房间,每个插座提供不同的服务,客户端软件只要访问 不同插座的插口就可以享受不同一个房间,不同插座的不同插口的服务。4 b# T4 |4 {' F {7 g
@ socket实质上提供进程通信的断点,一个完整的socket会有本地唯一的OS分配的socket号。进程通信前, 客户端随即申请一个socket,系统为只分配一个socket号,服务器拥有全局公认的socket,任何客户端都 可以向它发出连接请求和信息请求。
0 j$ P4 x+ n. a- t& M2 \' [ @ socket的连接过程包括:服务器监听,客户端请求,连接确认
+ Z; n& B, o0 ^; l- k% C 服务器监听:server socket一直处于等待连接状态,实时监控网络中是否有client socket。8 F- t% _+ q6 y* `: q+ d9 i! Z& A
客户端请求:client socket先描述目标server socket(Ip、端口),由client socket向其提供请求。。- V! }' \2 H$ ^# f
连接确认:当server socket监听到或者接收到client socket的请求时,它就响应client socket的请求, 建立一个新的线程,把server socket的描述发给client,当client确认了此描述,连接就建立好了。之后 server socket继续处于监听状态,继续接受其他client socket的连接请求。$ B- z! S. F# W
@ 常用socket类型:流式socket和数据报式socket' D7 R: S. H1 K
流式socket:面向连接的socket,针推面向连接的TCP服务应用。7 _+ N" o, o- ?3 H5 Y4 s
数据报式socket:无连接的socket,针推无连接的UDP服务应用。
0 U( V: `# Q3 g3 X, O. b: j# `8 X

; ]0 O2 Q, _/ N, S2> buffer:缓冲寄存器,分别Input buffer(暂存外设送来的打他,等cpu来取)和output buffer(暂存cpu送给外设的data,等外设来取)7 R2 D* Y! L) I) v# p( e6 j
2 a, A/ e, a% i5 {. }) [8 | r8 i5 z
3> 句柄
/ Y7 ?( A+ s* j1 l9 c1 c@ 用于标识windows应用程序中不同对象和同类对象中不同的实例,如:一个窗口、按钮、图标、滚动条、输出设备、控件或文件等,应用程序可以通过句柄访问相应的对象信息。
* i# i9 }: E# x! q/ |2 [. f@ 应用程序几乎都是通过调用一个windows函数来获得一个句柄,之后其他的windows函数就可以使用该句柄以移动相应的对象。句柄如:hinstance(实例句柄)、hbitmap(位图句柄)、hdc(设备描述句柄)、hicon(图标句柄),handle(通过句柄)1 V, c& N0 ]9 `
@ 句柄实质上时指向指针的指针,指针是一个内存地址。windows是一个以虚拟内存为基础的OS,windows内存管理器经常在内存中来回移动对象,以满足各种应用程序的要求。当windows内存管理器移动了对象在内存的位置后,会及时把该对象的地址告诉应用程序的句柄进行更新。句柄相当于一个索引表,通过句柄就可以间接知道对象在内存中的具体位置。