学习 IBM Rational Robot VU 脚本是如何处理 HTTP 连接的。本文讨论了在编辑 VU(虚拟用户)脚本时需要牢记的一些重要的注意事项,以防止出现 HTTP 连接漏洞和避免每一个虚拟用户占用较大的内存空间。本文还描述了如何权衡是否在 VU 脚本中保留打开的 HTTP 连接。
IBM® Rational® Robot提供了两种录制脚本的机制:
- GUI 模式:用于功能自动化的 SQA basic 脚本
- VU 模式: 用于性能自动化的 VU 脚本
在这里,我们的重点是如何处理 Rational Robot VU 脚本中的HTTP连接。如果你正在录制你的第一个 Rational Robot VU 脚本,那你非常有必要阅读一下IBM developerWorks 上的文章,题目是 "Reading HTTP VU scripts"。
|
当你录制客户端或服务器的会话时,Rational Robot会产生一个虚拟用户(VU)脚本。你要么将产生的这个脚本进行回放,要么以某种特定的方式编辑这个脚本使它更好地适应你的需求。比如,你可以为主机服务器的名字定义参数,这样你也可以将同样的脚本应用到若干台主机上。在VU录制过程中,Rational Robot监控客户端/服务器的对话,并将原始的会话内容转换成一系列VU指令,储存到产生的脚本中。所有客户端的请求都被转换成一系列VU指令,因此,在网页上只需点一下鼠标就可以产生数千行VU代码。这使对它的理解以及随后对VU脚本编辑的过程变得更加复杂。
在接下来的例子中,我们将获得一个典型的请求/回复HTTP信息互换,然后我们将它与用Rational Robot产生的脚本联系起来。通常情况下,一个网站有一个服务器程序来监听TCP的80端口中(或者其它端口)来自客户端的连接请求。比如,在你的浏览器中输入 一个到 http://www.ibm.com/rational.html 页面的请求,接下来发生在屏幕之后事件的顺序如下:
- 浏览器解析这个输入的地址。
- 浏览器向DNS寻找这个主机的IP地址(在这个例子中是www.ibm.com)。
- DNS回复主机的IP地址。
- 浏览器利用返回的IP地址与Web服务器的端口80构成一个TCP连接。
- 浏览器为发起一个HTTP标题(header)的请求,接下来就是URL的文档。这个请求利用了一个get命令来向服务器请求一个回复,从而得到rational.html文件。
- 服务器回复时在HTTP标题中带有HTTP代码(如果没有错误发生的话,这个代码是 200),它后面紧跟着就是被请求的 HTML 文档。
- 释放TCP连接。
- 浏览器解析HTML并展现网页。
- 对于接收到的任何一个内嵌在HTML里的请求 —— 对于静态的内容,比如GIF、CSS 或者JS文件 ―― 浏览器都会建立一个新的到服务器的TCP连接,并以类似的方式重新找回文档。
因此,网页中的每个内嵌图片都意味着必须有一个单独的TCP连接,并且重复着同样的过程。既然你明白了这个基本概念,Rational Robot 脚本中产生的冗长的VU代码勿庸置疑是有意义的。
Rational Robot VU 脚本是由代表这些步骤的重复代码块组合起来的。这些代码模块都独立的由客户程序执行 HTTP get
和 post
请求来建立TCP连接。图1 是被录制 Rational Robot VU脚本的样子:
图1. Rational Robot VU 脚本
|
下面是这些步骤是如何与Rational Robot产生的相应的VU脚本代码语句进行关联的:
www_ibm_com = http_request ["Rational~001"] "www.ibm.com:80"
TCP与www_ibm_com的连接是激活的,这样打开一个从客户机器到HTTP服务器的网络套接字来发送http_request "Rational~001"
。
Set Server_connection = www_ibm_com;
连接是与响应变量 Server_connection 关联在一起的。
http_header_recv ["Rational~002"] 200; /* OK */
从HTTP服务器发送的HTTP 标题被接收。
http_nrecv ["Rational~003"] 100 %%; /* 20608 bytes */
HTTP回复被接收
http_disconnect(www_ibm_com);
连接关闭.
这个被录制的VU脚本将有很多设置服务器连接的语句,它们随后将在脚本结束之前关闭。自动化工程师们可能选择编辑这些脚本来定义参数,从而实现自定义的逻辑,或者增加或删除一些无效的HTTP请求。然而,如果你编辑这些脚本,注意这些 http_request
和 http_disconnect
命令是十分重要的,这两种命令分配和释放客户端或者Rational Test Agent 上的系统资源,因此你必须将它们成对使用它们,否则你的脚本可能导致连接漏洞,甚至也可能最后耗尽系统资源。那就是为什么在你每次使用一个脚本中的http_request
语句来打开HTTP连接时,需要一个相应的http_disconnect
语句来关闭这个连接,这是十分重要的。
|
将打开的HTTP连接留在VU脚本中,会导致每个VU占用较大的内存空间,因此会消耗TestManager 和 Test Agent 机器上很大的内存。关闭每一个HTTP连接可以使内存有效被利用,也因此可以在现有的资源上执行更多的VU。图2和图3 ,包含了对我们使用 IBM® Rational® TestManager 和 IBM® Rational® Test Agent 负载的观测所显示的效果。下面是一个Rational Test Agent上由Windows Performance Monitor得到的一些关于rtsvui程序的截图。
图2. 如果存在未关闭的HTTP连接,VU 脚本占用内存的情况
图3. 所有HTTP连接完全关闭的情况下,虚拟用户占用内存的情况
注意:18和8MB的数字可能会随着不同的情况基而变化,这依赖于自动化的脚本和操作
Rational TestManager 和 Rational Test Agent 也会在同时打开的连接数量上施加一个上限,默认的上限是256。如果由于脚本编辑的不好以导致你在测试期间的任何时刻能达到这个上限,你可以看到不正常的VU终止,并且在 VU data tab 中附带下面的信息: "Failed to connect to "9.182.230.90:80" after 100 attempts: [24.7.5.4] Maximum number of allowed open connections (256) exceeded"
如果一个HTTP服务器上打开的HTTP连接数量达到了连接上限,你很可能看到连接断开。当然,那也将导致你的测试过早地终止。
|
现在你已经明白了IBM Rational Robot是如何控制HTTP连接的,你也知道了在编辑VU脚本时应该注意哪些事项来避免连接中断和断开。观察这些失败的现象也可以帮助你识别你的IBM Rational Robot VU 脚本中的 HTTP 连接漏洞。
文章来源于领测软件测试网 https://www.ltesting.net/