可不可不要这么样徘徊在目光内 / 你会察觉到我根本寂寞难耐 / 即使千多百个深夜曾在梦境内 / 我有吻过你这毕竟并没存在 / 人声车声开始消和逝 / 无声挣扎有个情感奴隶 / 是我多么的想她 / 但我偏偏只得无尽叹谓 / 其实每次见你我也着迷 / 无奈你我各有角色范围 / 就算在寂寞梦内超出好友关系 / 唯在暗里爱你暗里着迷 / 无谓要你惹上各种问题 / 共我道别吧别让空虚使我越轨 /

发布新日志

  • cookie介绍(转)

    2008-01-08 14:44:20

     

    因特网的Cookie技术极其简单,却有着旺盛的生命力。Cookie开始引起众人的注意是从2000年二月份随着网络隐私权的提出开始的,有关的辩论至今仍在继续。从另一方面来说,Cookie使得浏览网页更容易了。几乎所有的主要的网站设计者都使用了Cookie,因为他们想为浏览网站的人提供一个更好的浏览环境,同时也能更加准确地收集访客的信息。

      有家颇有影响的报纸上曾刊登了一篇很有深度的关于网络隐私的文章,上面对于Cookie的定义是这样的:

      “Cookie是Web网站放在您的硬盘上的程序。它守在您的电脑里,搜集您的信息以及您在因特网上所做的任何事情,当Web站点需要的时候它能够下载所有这些搜集到的信息。”

      像这样的定义在报刊中相当普遍。问题是,它的定义犯了很大的错误。Cookie不是程序,而且它不能像程序一样地运行,所以它无法为自己搜集任何信息。它也不能从您的电脑上取得您的任何个人资料。

      Cookie的比较确切的定义应该是这个样子:

      “Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片断以‘名/值’对(name-value pairs)的形式储存。”

      举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。

      如果您使用IE浏览器访问Web,您会看到所有保存在您的硬盘上的Cookie。它们最常存放的地方是:c:windowscookies(在Win 2000中则是Cocuments and Settings您的用户名Cookies——作者注)。在我的机器上共有165个文件。每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的Web站点的信息。

      在这个文件夹里的每个Cookie文件都是一个简单而又普通的文本文件。透过文件名,您可以看到是哪个Web站点在您的机器上放置了Cookie(当然站点信息在文件里也有保存)。您也能双击打开每一个Cookie文件。

    比如,我访问了goto.com,而且这个站点在我的电脑上放了个Cookie。goto.com的Cookie文件包含了这样的内容:

      UserID A9A3BECE0563982D
    www.goto.com/

      goto.com在我的电脑上存入了一个单一的“名/值”对。“名/值”对的“名”是UserID,“值”是A9A3BECE0563982D。在我第一次访问goto.com的时候,该网站为我分配了一个唯一的ID并存在我的电脑里。

      (注:除了上面举例的“名/值”对,可能会有其它的“名/值”对同时保存下来。那是浏览器的一些内部信息,一般用户不必多做了解。)


      Amazon.com在我的电脑上保存了稍稍多一些的信息。当我查看Amazon在我的电脑上建立的Cookie文件时,它包含以下内容:

      session-id-time 954242000 amazon.com/

      session-id 002-4135256-7625846 amazon.com/

      x-main eKQIfwnxuF7qtmX52x6VWAXh@Ih6Uo5H amazon.com/

      ubid-main 077-9263437-9645324 amazon.com/

      以上内容显示出Amazon存储了一个主用户ID ubid-main,一个标记每次任务的ID session-id及任务发生的时间session-id-time。还有一个x-main,不知道是什么。

      大多数的网站在您的电脑上只保存一条信息,即用户ID。但一个站点可以用Cookie存储的“名/值”对的最大数目没有任何限制。

      一个“名/值”对仅仅是一条命名的数据,它不是程序,也不能“做”任何事情。一个网站只能取得它放在您的电脑中的信息,它无法从其它的Cookie文件中取得信息,也无法得到您的电脑上的其它任何东西。

      Cookie数据仅仅是Web站点在浏览者硬盘上存储的“名/值”数据对。这就是Cookie的所有内容。Web站点保存了数据,随后又把它取回。一个Web站点只能取得它保存在你电脑上的内容,无法偷窥别的Cookie,更不要说电脑上其他的数据。
      
      Cookie数据的流动过程如下:
      
      ·如果在浏览器上键入了一个Web站点的URL,浏览器向Web站点请求读取网页。比如,您输入了:
    http://www.amazon.com
      
      浏览器将从Amazon的服务器读取它的主页。
      
      ·在做上面工作的同时,浏览器将从电脑上寻找Amazon网站设置的Cookie文件。如果找到了Amazon的Cookie文件,浏览器会把文件中的所有“名/值”对同先前的URL一同发给Amazon服务器。如果没有找到,就不发送Cookie数据。
      
      ·Amazon服务器接收Cookie数据和对网页的请求。如果存在“名/值”对,Amazon将使用它。
      
      ·如果没有收到“名/值”对,Amazon知道您在此之前没有访问过它的站点,服务器会为您创建一个新的ID放进Amazon的数据库中,然后把“名/值”对放在传回的网页的头信息里传给您。您的浏览器将在硬盘上保存“名/值”对。
      
      ·每当您再次访问网站时,网站服务器会改变“名/值”对或增加新的“名/值”对。
      
      另外,服务器会随着“名/值”对发送一些其他信息。其一是生存期(Expiration date);还有一个是路径(网站借此把不同的Cookie值与不同的网站部位关联起来)。
      
      您有权控制这个过程。您可以设置一个选项让浏览器在收到网站发来的“名/值”对时提醒您,由您决定是否接受。
  • LR高级技巧实战

    2007-12-26 16:43:54


    6.怎么样使多台产生vuser的测试机均匀地对被测试的系统施加压力?
    在测试的过程中,为了尽可能减少或者避免本身的测试机成为测试过程中的瓶颈,需要使用多台测试机产生vuser对被测试系统施加压力,下面对操作步骤做简单介绍:
            在默认模式下使用controller添加多台Generators机器时,不管你怎么加,最终能真正起作用的只有一台(10.19.180.2/3/4或localhost):

    为了让10.19.180.2/3/4机器同时能真正被添加进去,我们需要做以下几步工作:
    改变场景模式,将组模式()改变为百分比模式(percentage mode),具体做法是,选择Scenario菜单下的Convert Scenario to the Percentage Mode;

    然后,在已经添加好的Load Generators机器列表中同时选择你想选择的机器;

    最后,点OK按钮就可以得到我们所要的结果了。

    当然,如有必要我们还可以把场景模式改为Vuser Group Mode,具体做法如下:
    选择Scenario菜单下的Convert Scenario to the Vuser Group Mode;

    然后在弹出的对话框中,单击Yes按钮可以得到如下结果,

    到此为止,添加多台Load Generators测试机整个过程就完成了,其实很简单,关键是你发现了没有。

    7. 怎么样在关联时取列表的最后一个值(在测试重打发票取流水号时需要)?
    在压力测试脚本的关联过程中,我们有时可能需要关联最新的值(如最新的流水号,通常情况下,最新的流水号放在列表的最下方),所以找最新的流水号就是最列表最下方,如果保存在数组里,那就是找index值最大的那个元素。下面以重打发票(注:具体流程为先缴费,然后查询缴费历史,然后从缴费历史里找到最新的流水号,然后使用此流水号进行重打发票)为例对整个过程做详细的介绍:
    首先,在缴费历史里找到需要关联的流水号并关联之,具体做法如下,
    7.1以Tree View方式打开脚本并在对应事件的Page View里找到最新的流水号

            找到我们需要关联的流水号(这里为536dxwf0200051031000000)后,需要把它给关联,(因为返回的值是事后才知道的,且对于不同的电话号码,对应的返回值不同,所以对于这样的值是需要关联的。)具体做法是打开Server Response 页面并在Body里找到需要关联的流水号,然后选中此流水号并在右键弹出的菜单中使用Create Parameter关联之。

     


    7.2单击是(Y)按钮,对应的脚本中会增加如下内容。

            单击View scrīpt 图标以scrīpt模式查看关联情况。

    7.3到此为止脚本中多出如下代码段,下面对它做一定的分析:
    web_reg_find("Text=缴费历史查询",
    LAST);
    // [WCSPARAM WCSParam_Text1 23 536dxwf0200051031000000] Parameter {WCSParam_Text1} created by Correlation Studio
    web_reg_save_param("WCSParam_Text1",
    "LB=formnum=",
    "RB=\"",
    "Ord=8",
    "RelFrameId=1",
    "Search=Body",
    LAST);
    //后面的内容为注释部分,说明流水号536dxwf0200051031000000已经关联并保存到WCSParam_Text1参数中。
            web_reg_save_param()为LoadRunner的保存参数所用的函数,其作用是将返回流水号保存到WCSParam_Text1参数中,以便使用不同的号码进行缴费历史查询出来的流水号能随着时间的变化流水号也跟着变化,而不是录制脚本时的536dxwf0200051031000000,这样可以避免在重打发票时不会报诸如此流水号不存在等类似错误信息。然而现在的问题是怎么将此流水号对应到重打发票对应的地方。另一个问题是,不是所有的号码缴费后查询到的流水号数量都和录制脚本时查询到的流水号相同,事实上每做一笔除查询类的操作都会有一个流水号。而我们关注的是怎么取到最新的缴费的流水号,下面详细介绍相关步骤。

    5.1 修改web_reg_save_param()函数相关部分,很简单,把"Ord=8",改为"Ord=ALL",目的是找最TOP的那个参数值。

    5.2 光保存和取参数还不够,我们需要把参数能正确传递到重打发票对应的地方,为此我采取的做法如下:
            在缴费历史事件脚本最前面定义两个变量,目的是为了将流水号以字符串的形式保存在变量里(因为LoadRunner不支持在web_submit_data()函数里直接使用变量):具体做法是:
    char WCSParam_Text1Pram[50]; //保存取到的流水号
    char WCSParam_Text1PramVal[50]; //保存以"Value=流水号"取到的流水号。


            将关联好的流水号存到变量里,在此的做法是在对应的web_submit_data()函数后添加如下代码段:
    lr_message("WCSParam_text1:%s",lr_eval_string("{WCSParam_Text1}"));
    //打印出关联的参数WCSParam_Text1的值。
    sprintf(WCSParam_Text1Pram,"{WCSParam_Text1_%s}",lr_eval_string("{WCSParam_Text1_count}"));
    //把取到流水号保存到WCSParam_Text1Pram里,具体形式为
    sprintf(WCSParam_Text1PramVal,"Value=%s",lr_eval_string(WCSParam_Text1Pram));
    //组合流水号和”Value=”并保存到WCSParam_Text1PramVal变量中。
    lr_message("The value argument is : %s", WCSParam_Text1PramVal);
    //打印出字符串变量WCSParam_Text1PramVal的值。

     

    5.3 找到重打发票中响应的流水号,并把其中的"Value=536dxwf0200051031000000"替换成WCSParam_Text1PramVal,在这里总共有两处。

     

            到此为止,流水号的关联已经基本上处理完毕,下面我们执行脚本,来验证我们想要的是不是真的有效。(注,参数化的问题在本文中不做具体介绍)为了看到明显的效果,我们需要将日志的处理做简单设置。

            然后执行脚本,查看相关执行日志,可以得到类似下面得消息。

     

    8.使用LoadRunner一些常用的注意事项:
    Note1:VuGen仅能录制 Windows平台上的会话,但是,录制的Vuser脚本既可以在Windows 平台上运行,也可以在 UNIX 平台上运行。
    通用 Vuser 函数和特定于协议的函数,它们共同构成了 LoadRunner API,并使Vuser能够直接与服务器通信。

    Note2:用于运行Vuser脚本的C解释器仅支持ANSI C语言。它不支持 Microsoft对ANSI C的任何扩展。
    通常情况下,可以将登录到服务器的活动录制到vuser_init部分中、将客户端活动录制到Actions部分中,并将注销过程录制到vuser_end部分中。

    Note3:只能向Action部分(而不是init或end 部分)添加集合。
    Note:不要从事务内部发送消息,因为这可能使事务执行时间变长,并扭曲事务结果。

    Note4:如果使用日志运行时设置修改脚本的调试级别,则 lr_message、lr_output_message 和 lr_log_message 函数的行为将不会更改,它们将继续发送消息。

    Note5:录制 Java Vuser 脚本时, Vuser 脚本中将不生成 lr_think_time 语句。

    Note6:VuGen 新建参数,但不会自动替换任何在脚本中选定的字符串。

    Note7:不要将参数命名为 unique,因为该名已被 VuGen 使用。

    Note8:如果在常规运行时设置文件夹中将“错误处理”设置为“出现错误时仍继续”,则错误消息仍将被发送到输出窗口。

    Note9:因为生成的服务器消息很长,而且日志记录会降低系统的运行速度,所以请仅为脚本中特定的代码块激活服务器消息日志记录功能。

    Note10:启用“出现错误时仍继续”功能时,将覆盖 0 严重级别;即使发生数据库错误,也将继续执行脚本。然而,如果禁用了“出现错误时仍继续”功能,但将严重级别指定为 1,则当发生数据库错误时仍将继续执行脚本。

    Note11:下列协议不是线程安全协议:Sybase-Ctlib、Sybase-Dblib、Informix、Tuxedo 和 PeopleSoft-Tuxedo。

    Note12:对于支持树视图的协议(如“视图”菜单所示),在树视图中运行 Vuser脚本时, VuGen 将从 Vuser 脚本中的第一个图标开始运行该脚本。

    Note13:要显示运行时查看器,必须安装 Microsoft Internet Explorer 4.0 或更高版本。
    Note:Vuser 生成“结果摘要”报告时,事务时间可能会增加。Vuser 可以仅在从 VuGen 运行时才生成“结果摘要”报告。使用 Controller 运行 Web Vuser 脚本时, Vuser 不能生成报告。

    Note14:当使用 Javascrīpt 和 VBscrīpt Vuser 时,在脚本中用到的 COM 对象必须完全的兼容。这使下列情况成为了可能:一个应用程序操纵另一个应用程序中的对象,或者公开对象以便操纵它们。

    9.性能参数解析:
    WEB资源参数

            每秒点击次数:中Vuser每秒向Web服务器提交的HTTP请求数,依据点击次数来评估Vuser产生的负载量。

            吞吐量:案运行过程中服务器上每秒的吞吐量。吞吐量的度量单位是字节,表示Vuser在任何给定的某一秒上从服务器获得的数据量,依据服务器吞吐量来评估Vuser产生的负载量。

            每秒HTTP响应数:中每秒从Web服务器返回的HTTP状态代码号(表示HTTP请求的状态,例如“the request was successful”、“the page was not found”)

            每秒下载页面数:每秒钟从服务器下载的网页数,依据下载的页面数来评估Vuser产生的负载量。

            每秒重试次数:中每秒钟内服务器尝试的连接次数,在下列情况下将重试服务器连接:初始连接未经授权、要求代理服务器身份验证、服务器关闭了初始连接、初始连接无法连接到服务器或者服务器最初无法解析负载生成者的IP地址。

            连接数:每个时间点上打开的TCP/IP连接数。

            每秒SSL连接数:每秒打开的新的以及重新使用的SSL连接数。当对安全服务器打开TCP/IP连接后,浏览器将打开SSL连接,因为新建SSL连接需要消耗大量的资源,所以应该尽量少地打开新的SSL连接。

    网页细分图
            注意:由于要从客户端测定服务器时间,因此,如果发送初始HTTP请求到发送第一次缓冲这一段时间内网络性能发生变化,则网络时间可能会影响此测定。因此,所显示的服务器时间是一个估计值,可能不太精确。
    DNS解析:显示使用最近的DNS服务器将DNS名称解析为IP地址所需的时间。“DNS 查找”度量是指示DNS解析问题或DNS服务器问题的一个很好的指示器。

            连接:显示与包含指定URL的Web服务器建立初始连接所需的时间。连接度量是一个很好的网络问题指示器。此外,它还可表明服务器是否对请求作出响应。

            第一次缓冲:显示从初始HTTP请求(通常为 GET)到成功收回来自Web服务器的第一次缓冲时为止所经过的时间。第一次缓冲度量是很好的Web服务器延迟和网络滞后指示器。注意:由于缓冲区大小最大为 8K,因此第一次缓冲时间可能也就是完成元素下载所需的时间。

            SSL握手:显示建立SSL连接(包括客户端 hello、服务器hello、客户端公用密钥传输、服务器证书传输和其他部分可选阶段)所用的时间,自此点之后,客户端与服务器之间的所有通信都将被加密。SSL握手度量仅适用于HTTPS通信。

            接收:显示从服务器收到最后一个字节并完成下载之前经过的时间。“接收”度量是很好的网络质量指示器(查看用来计算接收速率的时间/ 大小比率)。

            FTP验证:显示验证客户端所用的时间。如果使用FTP,则服务器在开始处理客户端命令之前,必须验证该客户端。“FTP 验证”度量仅适用于 FTP 协议通信。

            客户端时间:显示因浏览器思考时间或其他与客户端有关的延迟而使客户机上的请求发生延迟时,所经过的平均时间。

            错误时间:显示从发出HTTP请求到返回错误消息(仅限于HTTP错误)这期间经过的平均时间。

            系统资源(UNIX资源参数):
    CPU utilization :CPU的使用时间百分比
    Disk rate :磁盘传输速率
    Paging rate :每秒钟读入物理内存或写入页面文件中的页数
    Page-in rate :每秒钟读入到物理内存中的页数
    Page-out rate :每秒钟写入页面文件和从物理内存中删除的页数
    Collision rate :每秒钟在以太网上检测到的冲突数
    Context switches rate :每秒钟在进程或线程之间的切换次数
    Average load :上一分钟同时处于“就绪”状态的平均进程数
    Swap-in rate :正在交换的进程数
    System mode CPU utilization :在系统模式下使用CPU的时间百分比
    User mode CPU utilization :在用户模式下使用CPU的时间百分比

    网络监视参数

            网络延迟时间:源计算机与目标计算机(例如,数据库服务器和Vuser负载生成器)之间的整个路径的延迟。

            网络子路径时间:从源计算机到路径上每个节点的延迟。注意:从源计算机到每个节点的延迟是同时而又独立地度量的。因此,从源计算机到其中一个节点的延迟可能大于源计算机与目标计算机之间的整个路径上的延迟。

            网络段延:路径上每个段的延迟。

            验证网络是否是瓶颈:可以合并各种图来确定网络是否是瓶颈。例如,通过使用网络延迟时间图和运行Vuser图,可以确定Vuser的数量如何影响网络延迟。网络延迟时间图指示在方案运行期间的网络延迟。

    数据库服务器

            User Calls :在每次登录、解析或执行时, Oracle 会分配资源(Call State 对象)以记录相关的用户调用数据结构。在确定活动时,用户调用与RPI调用的比指明了,因用户发往Oracle的请求类型而生成的内部工作量

            Total file opens :由实例执行的文件打开总数。每个进程需要许多文件(控制文件、日志文件、数据库文件)以便针对数据库进行工作

            Opened cursors current :当前打开的光标总数

            DB block changes :由于与一致更改的关系非常密切,此统计计算对SGA中所有块执行的、作为更新或删除操作一部分的更改总数。这些更改将生成重做日志项,如果事务被提交,将是对数据库的永久性更改。此统计是一个全部数据库作业的粗略指示,并且指出(可能在每事务级上)弄脏缓冲区的速率。

    10.AIX操作系统机器性能瓶颈定义:
    瓶颈定义
    CPU bound : vmstat : when %user+%sys greater than 80%;
    Disk I/O bound : vmstat : when %iowait greater than 40%(AIX4.3.3 or later);
    Application disk bound :vmstat : when %tm_act greater than 70%;
    Paging space low : lsps -a : when used paging space greater than 70% active;
    Paging bound : iostat vmstat : paging logical volumes %tm_act greater than 30% of the I/O(iostat) and paging activity greater than 10* the number of CPUs(vmstat);
    Thrashing : vmstat sar :rising page outs, CPU wait and run queue;

    11.系统性能分析命令:
    cpu : vmstat,iostat,topas,nmon,ps,sar,time,timex,netpmon,trace,trcrpt;
    内存:vmstat,topas,nmon,ps,svmon,lsps,filemon,trace,trcrpt;
    磁盘:iostat,topas,nmon,lvmstat,iostat -d, lvmstat, lsps,filemon,lsattr,lsdev;
    网络:netstat,topas,nmon,entstat,nfsstat,ifconfig,iptrace,ipreport,trace,trcrpt;
    监视CPU使用情况:vmstat 2 ; iostat -t 2 6;sar -P ALL 2 3;
    监视内存使用情况: vmstat 2 10;ps aux;svmon -G;svmon -Pau 10;
    监视I/O使用情况: iostat 5;sar -d 3 3;
    监视网络使用情况: netstat -i ;netstat -m;netstat -v;

  • LR中脚本的调试(这是我在51testing发表过的主题)

    2007-08-27 15:06:39

     
    [原创]对脚本的建议(一.写给初涉LR的同仁们,关于调试)
    作者:wss123
    沉浮于LR很多天了,以前一直在WR分论坛漂。看到大家提出很多问题,不过发现大家的脚本大都已录制为主,而且经常有提出录制的脚本回放有问题,其实很多问题很好解决,LR提供了很多手段调试和优化我们的脚本。
    1.设置断点
    相信大家都不陌生,LR也是可以设置断点的,在需要设置断点的语句前按F9快
    捷键,断点就设置好了,程序运行到断点语句后会暂停,这时我们可以用F10单步
    调试程序.
    2.打开EXtended Log
    只是设置断点是不够的,我们还得知道具体发生了什么事情,Log告诉了我们一切,默认的Log是 standard Log,这时远远不够的.我们要extended log,打开路径
    为runtime settings-->log-->extended log.把parameter substitution和data returned by server和advanced trace大家根据需要勾选吧.
    3.注释掉多余的语句
    很多回放时出错的脚本都是因为多余的语句.因为LR在录制的时候,LR生成的语
    句很多不是我们想要的,这里结合几个网友的问题说说,曾有网友问:回放脚本的时
    候socket出错,提示: Error : socket0 - Address already in use. Error code
    : 10048.而且非常坚持说脚本不会有问题,因为脚本直接录制后回放,什么都没改,
    是不会出错的.拿到脚本一看,有一条语句lrs_create_socket,建立了socket0,但
    是之后没有任何socket0的语句,可以判断出 该语句是无效的,注释掉,问题解
    决。所以大家不要过分相信LR了 ,它生成的语句也是有很多BUG的。
    [原创]对脚本的建议(一.写给初涉LR的同仁们,关于调试) 【 续 】
    作者:wss123
    上次写了对LR脚本调试的建议,斑竹kernzhang给了很中肯的建议,告知对Log的叙述太潦草了。也许给朋友们理解带来了不便,这次冒昧地再说说Log吧,希望能够帮助初接触LR的朋友们。
    /*上篇文章链接地址:
    http://www.51testing.com/cgi-bin ... d=14087&fpage=1)*/
    经常有朋友们问到,log文件在哪看,特别是controll执行后,怎么看log。这里一一说明一下:
    (1)在vgen中,我们必须写输出函数输出信息,将我们所想要了解的信息用函数输出,主要有这么几个函数输出信息: lr_output_message,lr_error_message,lr_log_message。这些函数请参阅help-->function reference.
    其次,我们要在runtime settings中设置,勾选always send messages,具体的做法是:runtime settings--->log-->always send messages,这样我们才能写出Log,在我们的脚本所在的文件夹中,有两个文件很重要, mdrv.log.txt和output.txt文件,lr_log_message只会把信息输到mdrv.log文件中,而lr_output_message则会写进以上两个文件。
    (2)在controller中,很多朋友都会想知道多次迭代,参数是否正确的导入了呢,我们依旧查看log,我们在执行结束后,查看结果目录的Log文件夹,如果是负载生成器运行的话,则在tmp目录。 不过,还想提醒朋友们,在controller 我们也要设置runtime settings才行,而且每个用户组的runtime settings,设置的方法是:在controller的design标签页中,右下角的部分有runtime settings按钮,我们点击它,设置的方法与在vgen中一样的。
Open Toolbar