对软件测试入门者来说,测试用例是第一位的。有了好的测试用例,你就能发现别人没有发现的BUG,只有当你具有良好的,开放型的测试思维,你才能得到优秀的测试用例。功能测试,加油ING~~ ----只要认准自己的方向,做自己喜欢并擅长的事情并持之以恒就一定会有所成!

发布新日志

  • 学习loadrunner之一_事务(转)

    2008-11-24 13:31:57

    Loadrunner是一款负载测试工具,它有三个核心组件分别是Virtual User GeneratorControllerAnalysisVirtual User Generator 可以通过录制脚本准确的记录下来用户的每一步操作并且可以进行集合点设置、事务设置、参数化等操作从而为在Controller中执行特定的场景做准备。Controller顾名思义,它可以控制脚本的执行,通过把脚本放置在一个特定的场景中,模拟一批真实用户的操作过程,这些模拟的真实用户就叫做虚拟用户。通过这些虚拟用户可以对系统进行负载测试。Analysis应该是测试人员极为关注的一个组件,通过Controller执行完某一个场景之后,Analysis可以自动生成测试结果并通过图形的形式显示出来,测试人员只有借助这些图表才能准确分析出系统的瓶颈并且确定性能是否达到要求。

    下面介绍一下如何进行集合点、检查点以及参数化的设置:

    对于集合点、检查点的设置有两种方法,一种是在录制完脚本以后,手工在脚本中添加相关的关键字例如lr_start_transaction等,这种方法对脚本语言的理解能力要求较高。另一种是直接在录制的过程中添加集合点、检查点,这样lr就会自动把集合点、检查点的关键字添加到脚本中。

    事务:就是用户某一步或者某几步操作的集合。当我们需要通过某一步或是某几步操作从而衡量服务器的性能的时候,这时我们就把这些操作设置成一个事务,当事务开始执行的时候lr就开始计时当事务运行结束计时停止,执行事务的时间会在在最后的结果中显示出来。

    实例:登录sina网站,把点击“天气”设置成一个事务,衡量服务器处理处理该事务的性能。

    1,点击红色的录制按钮,输入URL开始录制。弹出sina的首页,点击 <!--[if !vml]--><!--[endif]-->设置事物的开始位置,这时弹出事务开始对话框要求输入事务的名称,一般来讲我们都会把事务名称命名为容理解的名字,此处我们命名为“天气”

    点击OK完成事务的开始点设置。

    2,在sina页面上点击“天气”的连接,出现天气页面

    3,点击 <!--[if !vml]--><!--[endif]-->设置事务的结束点,这时弹出事务结束对话框

    lr根据匹配原则已经自动把事务名字一栏填入“天气”,我们只需要选择事务的状态。状态有三种LR_AUTO LR_PASS LR_FAIL LR_STOP

    LR_AUTO:事物的状态被自动设置,如果事务执行成功,状态设置为PASS,如果执行失败,状态设置为FAIL,如果由于异常中断,状态被设置成STOP.

    LR_PASS:事务如果执行成功,代码的返回状态就是PASS

    LR_FAIL:事务如果执行失败,代码的返回状态就是FAIL

    一般我们选择LR_AUTO 那么我们会有疑问什么时候我们选择PASS或者是FAIL呢?

    Lr的帮助文档中有一条例子,可以很好的帮助我们理解

    lr.start_transaction("GetStocks");51Testing软件测试网`D6nA&ilBn!N
    try {

    String stocks[];
    (Od,yc+c x/U222458stocks = orStockServer1.getStockList();51Testing软件测试网fX)cQ&M
    if (stocks.length == 0)

                  throw new Exception("No stocks returned/available");51Testing软件测试网M8Z)E4I0c}`
    lr.end_transaction("GetStocks", lr.PASS);
    |u/a:d/B c.j222458}

    catch (Exception e1) {

           lr.end_transaction("GetStocks", lr.FAIL);

           lr.message(" An exception occurred : " + e1.toString() );

           }

    代码说明:这时一个得到stock list的例子,程序中设置了异常检查来确保getStockList()方法返回非零的长度。

     

    同时我也进行了如下的脚本修改

    ………………

    lr_start_transaction("天气");

        lr_think_time( 3 );

        web_add_cookie("mysinal=ai_erica; DOMAIN=weather.news.sina.com.cn");

        web_add_cookie("SINAGLOBAL=221.219.31.58.924471172571904604; DOMAIN=weather.news.sina.com.cn");

    ………………

    lr_end_transaction("天气", LR_FAIL);

    在最后我把该事物的结束状态设置为FAIL,然后运行该脚本,其实该事物的运行是没有任何错误的,完全可以运行成功,只是在最后我把事务的状态手工设置为FAIL。当脚本执行完后,查看Ececution Log看到这样一条log语句:

    Action.c(297): Notify: Transaction "天气" ended with "Fail" status (Duration: 5.1436).

    那么这样做的意义是什么呢?为什么要设置事务结束状态呢?原因就是在Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是失败的。如果语句是这样:

    Action.c(297): Notify: Transaction "天气" ended with "Pass" status (Duration: 5.1436).

    Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是成功的。

    设置事务结束状态的用途就在这里。试想Lr为什么能自动生成结果图表?无非就是Analysis通过一些定义好的API获取执行脚本过程中的返回值,从而显示出事务执行的正确还是错误,或是显示出响应时间等信息,然后调用GUI使我们很直观的看到测试结果

  • 如何在脚本中做关联(在网络上搜到的)

    2008-11-24 09:20:16

    如何在 LoadRunner 脚本中做关联 (Correlation) 51Testing软件测试网.Q)X0ZlC.Ud#F
    当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。 51Testing软件测试网9hbD$c+j s{

    ~2B @wb;^a222458当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
    q[mFV/n ? S222458所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。 51Testing软件测试网jt)Eyfhr,K&w
    何谓关联(correlation)?
    ;Y$w#Acl.\222458所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。
    n`(Q3nS`222458举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。 (比如饭票,当月使用可以,下月使用就过期了,食堂和用户手里都有这个饭票)51Testing软件测试网Z'L.{-O2l#aCP
    下面的图示说明了这样的情形: 51Testing软件测试网{,Y(M8{'z[m'r$kf
    当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
    k/^]&S eAGH222458在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。
    'q+s;\q([ HrX1K222458
    $yXm!ek1aD qq222458要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。 51Testing软件测试网 v8}4qd%jO
    哪些错误代表着我应该做关联(correlation)? 51Testing软件测试网,vpD/P2FP
    假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。 51Testing软件测试网`0nI] S8oJX{+p
    要如何做关联(correlation)? 51Testing软件测试网)jZ-e;LVM-~q^ v
    关联(correlation)函数
    S`!M YA8Hw oR222458关联(correlation)会用到下列的函数: 51Testing软件测试网n3F6\V.V9[
    • web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。
    :K'BK(T"P222458语法: 51Testing软件测试网9Q~`X(l"hxi
    web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST ); 51Testing软件测试网bi,{#x!i,P-p_ ]
    • web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。建议使用 web_reg_save_param 函数。
    8@&~/o;?5|4?\7b"m&t L222458详细用法请参考使用手册。在VuGen中点选【Help】>【Function reference】>【Contexts】>【Web and Wireless Vuser Functions】>【Correlation Functions】。 51Testing软件测试网 c}5~1p)X nZ
    如何找出要关联(correlation)数据
    0g8`4kw't[G8j222458简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。 51Testing软件测试网 N q&q3M4T/b@(P
    VuGen提供二种方式帮助您找出需要做关联(correlation)的值:
    $m M^Z?|V ^"n[O%`2224581. 自动关联
    Y_5QH`"|2224582. 手动关联
    7qZ;rIy2~2yW*?222458自动关联 51Testing软件测试网2lB_-JA1f*C/i.\"D
    VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。 51Testing软件测试网-TV3p,k|@0D
    自动关联提供下列二种机制:
    e8Iod8aJ o222458• Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。规则来源有两种:
    E#{3w1Nm`222458o 内建(Built-in Correlation):
    `;@dh7g+Y}222458VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。 51Testing软件测试网k5o"cp WA N
    您也可以在【Recording Options】>【Internet Protocol】>【Correlation】检视每个关联规则的定义。
    IM!DG"f1n-w+B6j222458o 使用者自订(User-defined Rules Correlation):
    "YX^#u Cg-ch222458除了内建的关联规则之外,使用者也可以自订关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】建立新的关联规则。
    b [rc&m2tc D222458• Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    @|G#{K2jl222458Rule Correlation 51Testing软件测试网HHfy j+B0k
    请依照以下步骤使用Rule Correlation: 51Testing软件测试网] @0[#Q'@-i4{/A
    1. 启用auto-correlation 51Testing软件测试网?oO-_Rrm
    1. 点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。
    r0jIY3BE9[2224582. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。
    qxi)X V%l1bHd2224583. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。 51Testing软件测试网fhM.Gv
    4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:
    r)KM-Q(M2M222458 【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。
    8M`!CJ7_"v:E222458 【Perform correlation in sceipt】:直接自动建立关联
    /[_s$r*n_ v W2224582. 录制脚本 51Testing软件测试网 cys'L2TrQ/P(]a
    开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。 51Testing软件测试网VEQ+Fub)l^
    51Testing软件测试网U e3I,qJy
    3. 执行脚本验证关联是OK的。
    *A YL2ic222458Correlation Studio
    J ib7y%{(W222458当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。
    C e hH#vt8a222458Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    8`gs/F8o rtVf222458使用Correlation Studio的步骤如下:
    %A,X!V*n0}RD_7N*Z2224581. 录制脚本并执行 51Testing软件测试网+ok Go-U
    2. 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。
    5R H4g~g+WY22245851Testing软件测试网#J^;dVA/e
    3. 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。 51Testing软件测试网"Lc0dPzs"^
    51Testing软件测试网*oX W)WN0{
    4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。 51Testing软件测试网#Qp2f Gw\Z&w
    注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。 51Testing软件测试网ma NNUhe5Ll/B
    5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。 51Testing软件测试网cGhb c)Rf m
    有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。 51Testing软件测试网4f0mD p%yC
    手动关联
    )hv}wbX5V4J8W\222458手动关联的执行过程大致如下:
    %r-y5N^-T'dl2224581. 使用相同的业务流程与数据,录制二份脚本
    x%Q_"_Pt$hB,f2224582. 使用WinDiff工具协助找出需要关联的数据
    Vk6G2ne8~-B2224583. 使用web_reg_save_param函数手动建立关联
    UY4l&PzA/?N6@3W1n2224584. 将脚本中有用到关联的数据,以参数取代
    ;cS:pX[l6b~222458接下来将详细的说明如何执行每个步骤 51Testing软件测试网R1Rk;S+\ }FX
    使用相同的业务流程与数据,录制二份脚本 51Testing软件测试网 _M9u} z
    1. 先录制一份脚本并存档。
    %},N OZ/n2224582. 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。
    Sb @5q ydTq222458有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。
    d9u4e;T x\+U:x222458使用WinDiff工具协助找出需要关联的数据
    jlc{N#av:O%G2224581. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
    L,WHIE?2224582. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。 51Testing软件测试网q!df{P
    3. 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。 51Testing软件测试网HZ Bh'JC
    在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。
    8S0yD!S9[222458注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。
    4E6I.~.y-IqEm222458
    $I| [Fw2224584. 接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。将鼠标光标点到Recording Log的第一行开头,按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。
    G:Q3~6]u3ya2} bQ222458
    Wb?7xXm&z&z t|v222458结果会有二种: 51Testing软件测试网3L5O8_E+v9b
    o 在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。
    2g%c3v jq `{RzW222458o 在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。
    8p&H*B.N_222458您要找的标头格式如下: 51Testing软件测试网)QR0Pr} o#w
    *** [tid=b9 Action1 2] Receiving response from host astra.merc-int.com:80 ( 25/11/2002 12:04:00 )
    \5W${e x N1\222458
    @'ze7u'y'V2224585. 现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。
    E~7q,?IQQ'm222458使用web_reg_save_param函数手动建立关联
    8i:xx:po"L$A222458在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。 51Testing软件测试网(W#]{ wq9Gvt d,?
    1. 要在哪里使用web_reg_save_param函数?
    DaC*z)v}EY{4G222458在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。
    M3P `\v|,S222458
    J5M]x^Kzj+P222458不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。
    $A%THv0~2224581. 在VuGen中点选【Vuser】>【Run-Time Settings】。 51Testing软件测试网7mn,{wx1A4P|
    2. 点选【General】>【Log】。
    3y a#]yE2224583. 勾选【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。
    9h.u4t&mLX/}2224584. 按下【OK】就可以执行脚本了。
    T0A4QQ5lm:R222458执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第7行。
    np5d'A,Er)K DZZ222458在脚本的第7行前插入一行空白行,然后输入 51Testing软件测试网8@mI5qJ{5g/x.z;C
    web_reg_save_param(“UserSession”, 51Testing软件测试网\-O+gyA,e
    “UserSession” 这个 “UserSession” 就是到时要使用的参数名称,建议给个有意义的名字。
    ^u\dJ,k222458注意:到这里整个web_reg_save_param函数还没完成。 51Testing软件测试网 nu3[E;x^Zo
    51Testing软件测试网"\s#a1fu ye
    2. 找出web_reg_save_param中要用到的边界
    "_ Q"y9ix I@9OK-@222458web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。 51Testing软件测试网B)C b&uz;M e
    找出左边界字符串
    u1n#z5R2o222458再回到Execution Log中,选取动态数据前的字符串并且复制它。 51Testing软件测试网C I a{y h!p
    这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含到特殊字符。 51Testing软件测试网EQ&NT1fE[0`
    在这边我们选取「input type=hidden name=userSession value=」字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所以我们在Execution Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。 51Testing软件测试网i.z J8f.H,g }M.`
    将这个边界字符串加到未完成的web_reg_save_param函数中: 51Testing软件测试网O'e%SZ+L!J`
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,
    1T\ O&hvW ['J222458找出右边界字符串 51Testing软件测试网5JRp J2c,{/HW
    接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。 51Testing软件测试网zg,M6D`hs
    以这个例子来看,就是「>」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。 51Testing软件测试网(];MZu#t{ xE!v*xq
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=>”, LAST); 51Testing软件测试网qs^)R ncB5|
    51Testing软件测试网C'Q+WORn i
    将脚本中有用到关联的数据,以参数取代
    r9[ Q0N(`222458当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。 51Testing软件测试网$p O+v0IU/V#pQ e
    范例:
    Z\&z,e6H5JG222458
    @V _Ncy;VY222458“Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM, 51Testing软件测试网?jR&E$s8d&t2Zf
    换成 51Testing软件测试网WN8p'S(wY'w!U
    “Name=userSession”, “Value={UserSession}”, ENDITEM,
    /T6bg$AWBI22245851Testing软件测试网_4RbQ,n3nX3} `
    到这里您已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。
    0F z1TW E$t222458关于 web_reg_save_param 函数 51Testing软件测试网0BS!v!FIJDfL q
    对于关联(correlation)来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,透过设定的边界字符串,找出特定的数据并将其储存在一个参数中,以供后续脚本使用。 51Testing软件测试网u)fB*i&m)@q9P _
    接下来将针对web_reg_save_param做比较详细的说明。
    Iq E*@QE222458Service and registration type function 51Testing软件测试网]*`3J9S4`
    web_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联、设定proxy、提供认证信息等,当其作用时,不会对网页的内容做任何的修改。 51Testing软件测试网"mq^ ]D/^&|X O
    web_reg_save_param同时也是一个registration type function (只要函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,则web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param找寻要做关联的动态数据并建立参数。 51Testing软件测试网/P#D Z]'{Jo
    所以要记住一点,要使用registration type function时,要注意其放置的位置必须在要作用的action function之前。 51Testing软件测试网%vC"QXX&bK9GZK
    语法 51Testing软件测试网3|uZ-D-uV,}
    int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST); 51Testing软件测试网b-di4z$ij
    参数说明 51Testing软件测试网[c:F8@)~i
    ParamName:存放动态数据的参数名称
    4E.Jk M1a a.^222458list of Attributes:其它属性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。属性值不分大小写,例如 Search=all。以下将详细说明每个属性值的意义: 51Testing软件测试网IF0gV Q;i:m!P D
    • Notfound:指定当找不到要找的动态数据时该怎么处置。 51Testing软件测试网9qT&b4[)k$vE*v
    o Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。
    /m D%T0{ Tr222458o Notfound=warning:当找不到动态数据时,不发出错误讯息,只发出警告,脚本也会继续执行下去不会中断。在对角本除错时,可以使用此属性值。 51Testing软件测试网\8j0}@R@
    • LB:动态数据的左边界字符串。此属性质是必须要有的,而且区分大小写。 51Testing软件测试网}Q sMC
    • RB:动态数据的右边界字符串。此属性质是必须要有的,而且区分大小写。 51Testing软件测试网,x/C rzy8q7w
    • RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性质可以是All或是数字,而且可有可无。
    9C\ k(E(JA222458• Search:搜寻的范围。可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值)。此属性质可有可无。 51Testing软件测试网 rm"[rR `$]
    • ORD:指明从第几次出现的左边界开始才是要撷取的数据。此属性质可有可无,默认值是1。假如值为All,则所有找到符合的数据会储存在数组中。 51Testing软件测试网*a+u%|:w.PF d*SrJ4j0?"n
    • SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始储存到参数中。此属性质不可为负数,其默认值为0。 51Testing软件测试网4IP0u Bsu _9s
    • Convert:可能的值有二种: 51Testing软件测试网`$pri I'V6F4D }
    o HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式 51Testing软件测试网'i$n U3g+KUZ.t Q
    o HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式
    u B2o#g'W n222458• SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此参数可有可无,默认值是-1,表示储存到结尾整个字符串。
    ]X"c7ftIvP;y222458范例
    v%OeF*I rkK222458web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner会搜寻网页中所有以 「<a href=」 开头,且以 「’>」结束,当中包含的字符串,并且储存在「A」参数中。 51Testing软件测试网1T(D"V8{I7t
    Tips and Tricks
    k:{| Ioj)^222458以下提供一些关联的常见问题:
    O%Ac8jhd222458• 如何打印出参数值?
    v/X]"r,\,v/`+n222458lr_output_message这二个函数来做到。例如:
    y.w.A5s \'oCw4IL,m222458lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));
    ypV E6S Sh222458lr_eval_string与lr_output_message函数的使用说明请参考LoadRunner Online Function Reference。 51Testing软件测试网7P ZtZY Z c_AY
    • 在脚本的data目录下找不到路制时的快照(snapshot)
    :JIp+[7[{222458造成在脚本的data目录下找不到路制时的快照(snapshot)的可能原因如下:
    7t^{$]h/Hy'l.j3v222458o 脚本是由VuGen 6.02或更早的版本所录制的 51Testing软件测试网0er2Za"iVla/e,S\
    o 汇入的Action不会包含快照(snapshot)的档案 51Testing软件测试网 HN7]&~4u M[m
    o 脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot) 51Testing软件测试网VdM0W2Z0jU
    o 某些步骤并不会产生快照(snapshot),如浏览某个资源 51Testing软件测试网HW q:`}5r
    o 快照(snapshot)功能被取消 51Testing软件测试网.WQdN(z1vo[
    【Tools】>【General options】>【Correlation】tab >【Save correlation information during replay】 51Testing软件测试网Knq?6HS }C
    • 开启WinDiff时出现「File no longer available」的错误讯息
    yVF/n7x&[ cz0nI222458WinDiff这个工具有些限制,无法开启包含空格符的目录或是脚本,所以建议命名时不要使用空格符,并且尽可能将名称取短一点。
    ;B;Q&HH4t)SHr222458• 录制时突然跳出【Correlation warning】对话窗口 51Testing软件测试网4{t0f,p"Une\/@
    当你有勾选自动关联的【Issue a popup message and let me decide online】选项,当VuGen发现有可能要做关联的数据时,就会跳出【Correlation warning】的窗口,询问你要做关联(Correlation in scrīpt)还是要忽略(Ignore)。 51Testing软件测试网0K3E| o ` N3Ow9a
    另外你也可以勾选【Perform correlation in scrīpt】,让VuGen自动作关联,不会再跳出询问窗口。 51Testing软件测试网(M1TmHKxV3c?t)U
    或是勾选【Disable correlation engine】,关闭自动关联的功能。 51Testing软件测试网"T}\ K [u

    #U-MrM h p#`i~!}222458• 如何手动启动「Scan action for correlation」的功能 51Testing软件测试网pO/\r"C#^d
    要手动启动「Scan action for correlation」的功能,请先执行脚本一次后,点选【Vuser】>【Scan Action for Correlation】。
    &}5D IliYa h D22245851Testing软件测试网!\.o#n@'R$t
    • 执行完脚本后并未出现【Scan Action for Correlation】窗口
    }&a0mr*@ vYr222458要启用【Scan Action for Correlation】功能,请点选【Tools】>【General options】>【Correlation】tab,勾选【Show Scan for correlation popup after replay of Vuser】选项。
  • LR在安装和卸载问题上的一点总结(转帖)

    2008-11-22 23:01:08

    LR在安装和卸载问题上的一点总结(转帖)

    在安装 Loaderunnner 过程中也许你经常遇到,提示无法安装的情况,我也遇到过相关问题,于是查阅了相关资料,总结了一下,好东西不敢独享,拿出来和同行一起交流
    (一) 提示:" the link file .... may be corrupted or has illegated link string "的,提示重复多次均无法安装。
    原因 :你的 Loaderunner 的安装文件夹名写成中文了,造成 Lr 的安装教本无法识别路径,最终导致不断有这样的错误提示。
    解决方案:把安装文件的目录名改为非中文就可以了。
    (二)  没法完全卸载
    要想把 LR 的老版本完全卸载,正确的步骤是:
    1.  停止所有的运行的 LR 的进程和服务( including the Controller, VuGen, Analysis , or the LoadRunner Agent Process/Service )
    2.  备份已有的脚本,你的脚本有可能在你的默认安装路径下
    3.  在控制面板的添加删除程序中,删除 LR ,并重启机器
    4.  手动删除所有 LR 的文件夹,包括您的开始菜单里的 LR 快捷方式
    5.  如果你的版本是 6.0 系列的,删除 Borland 文件夹(通常在 C:\Borland or C:\BDE  目录下)
    6.  搜索    wlrun.* 、    vugen.* ,除了安装文件夹中的文件,其他的都删除
    7.  打开注册表,找到
    如果只安装了 MI 公司的 LoadRunner 这一个产品,请删除:
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
    HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive
    否则请删除:
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive\LoadRunner
    HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive\LoadRunner
    删除所有和 LR 有关的数值,除了你的 License2 或 License。
    8.  清空回收站
    实现以上步骤后,即可放心安装了,切记在重装后,一定要重启机器,因为一些必要信息要写入注册表。
    (三)  卸载后 , 执行安装过程时出现" license security violation.Operation is not allowed "提示信息 , 安装失败
    解决方案:
    1.  进入一台 Loadrunner 运行正常的电脑(安装路径要和你的相同)进入注册表,导出以下两个目录:
    HKEY_CURRENT_USER\Software\Mercury Interactive
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
    2.  回到刚才安装不成功的电脑 , 进入注册表导入刚才这两个文件。
    3.  再次执行安装。
    建议:如果有用 Ghost 提前做 Ghost,或者为系统设置还原点。
  • LR中全局变量与局部变量——我写的example

    2008-11-22 09:55:29

    globals.h文件

    //包含头文件
    #include "lrun.h"
    #include "web_api.h"
    #include "lrw_custom_body.h"

    //包含全局变量

    char *p;

    vuser_init中脚本

    #include "web_api.h"
    #include "lrw_custom_body.h"


    vuser_init()
    {
     p=(char *) malloc (10*sizeof(char));
        memset(p,'0',9);
        memset(p+9,'/0',1);
    }

    Action中脚本

    Action()
    {  
        lr_output_message("%s",p)
     
    }

    vuser_end中脚本

    vuser_end()
    {
      lr_output_message("%s",p);
         free(p);
         return 0;
    }

    第二次脚本写成这样,可以运行。

    我想问下,第一次globals.h文件中我写成这样,不能运行,为什么?还有我在输入这行memset(p+9,'/0',1);脚本时,'/0'为什么总是人民币'$0'那个符号,而且还可以运行?有懂的朋友给解释下喽~

    globals.h文件

    #ifndef _GLOBALS_H

    #define _GLOBALS_H

    //包含头文件
    #include "lrun.h"
    #include "web_api.h"
    #include "lrw_custom_body.h"

    //包含全局变量

    char *p;

    #endif //_GLOBALS_H

  • LR8.0破解文件及破解方法

    2008-11-20 23:54:30

     

    1、下载:lm70.rar,mlr5lprg.rar这两个文件

    2、这两个文件复制并粘贴到LR8.1安装目录下的bin文件夹下;

    3、打开license管理器,点击添加new license,将老license复制进去,OK,验证通过!

    4、license有:

    AEAMAUIK-YAFEKEKJJKEEA-BCJGI

     AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

    5、新建两个new license 然后close.

    6、再次重启,如没有提示,则破解成功

  • 性能测试常见术语

    2008-11-20 09:42:32

    性能测试常见的术语主要有并发、并发用户数量、请求响应时间、吞吐量、吞吐率、TPS、点击率、资源利用率等

     

    并发

    狭义的并发一般分两种情况。一种是严格意义上的并发,即所有用户在同一时刻做同一件事情或操作,这种操作一般针对同一类型的业务。

    另一种并发是广义的并发。这种并发与狭义的并发的区别是尽管多个用户对系统发出了请求或进行了操作,但是这些请求或操作可以是相同的,也可以是不同的。对整体系统而言,任然有很多用户同时对系统进行操作,因此,仍然属于并发的范畴。

    可以看出,广义的并发是包含狭义的并发的,而且广义的并发更接近用户的实际使用情况,因为对大多数系统而言,只有数量很少的用户进行“严格意义上的并发”。对于性能测试而言,这两种并发一般都需要进行测试,通常的做法是先进行严格意义上的并发测试。严格意义上的并发一般发生在使用比较频繁的模块中,尽管发生的概率不是特别高,但是一旦发生性能问题,后果很可能是致命的。严格意义上的并发测试往往和功能测试关联起来,因为只要并发功能遇到异常通常都是程序的问题,这种测试也是健壮性和稳定性测试的一部分。

     

    并发用户数量

    关于并发用户数量,有两种常见的错误观点。一种错误观点是把并发用户数量理解为使用系统的全部用户的数量,理由是这些用户可能同时使用系统;还有一种比较接近正确的观点是把用户在线数量理解为并发用户数量。实际上,在线用户不一定会和其他用户发生并发,例如正在浏览网页信息的用户,对服务器是没有任何影响的。但是,用户在线数量是统计并发用户数量的主要依据之一。

    并发主要针对服务器而言,是否并发的关键是看用户的操作是否对服务器产生了影响。因此,并发用户数量的正确理解是,在同一时刻与服务器进行交互的在线用户数量。这些用户的最大特征是和服务器发生了交互,这种交互既可以是单向传送数据的,也可以是双向传送数据的。

    并发用户数量的统计方法目前还没有准确的公式,因为不同的系统会有不同的并发特点。例如OA系统统计并发用户的经验公式为:使用系统的用户数量*5%~20%)。对于这个公式,没有必要拘泥于计算出的结果,因为为了保证系统的扩展空间,测试时的并发用户数量就会稍稍大一些,除非要测试系统能承受的最大并发用户数量。举例说明:如果一个OA系统的期望用户为1000个,只要测试出系统能支持200个并发用户就可以了。

     

    请求响应时间

    请求响应时间是指从客户端发出请求到得到响应的整个过程的时间。这个过程从客户端发出一个请求开始计时,到客户端接收到从服务器端返回的响应结果计时结束。在某些工具中,请求响应时间通常会被称为"TTLB",即"Time to last byte",意思是从发送一个请求开始,到客户端接收到最后一个字节的响应为止所耗费的时间。请求响应时间的单位一般为“秒”或“毫秒”。

     

    事物响应时间

    事物可能由一系列请求组成,事物的响应时间主要针对用户而言,属于宏观上的概念,是为了向用户说明业务响应时间而提出来的。例如:跨行取款食物的响应时间就是由一系列的请求组成的。事物响应时间和业务吞吐率都是直接衡量系统性能的参数。

     

    吞吐量

    指在一次性能测试过程中网络上传输的数据量的总和。吞吐量/传输时间,就是吞吐率。

     

    吞吐率(Throughput

    通常用来指单位时间内网络上传输的数据量,也可以指单位时间内处理的客户端请求数量。是衡量网络性能的重要指标。

    但是从用户或业务角度来看,吞吐率也可以用“请求数/秒”或“页面数/秒”、“业务数/小时或天”、“访问人数/天”、“页面访问量/天”来衡量。例如在银行卡审批系统中,可以用“千件/每小时”来衡量系统的业务处理能力。

     

    TPSTransaction Per Second

    每秒钟系统能够处理的交易或事物的数量。它是衡量系统处理能力的重要指标。TPSLoadRunner中重要的性能参数指标。

     

    点击率(Hit Per Second

    每秒钟用户向Web服务器提交的HTTP请求书。这个指标是Web应用特有的一个指标:Web应用是“请求-响应”模式,用户发出一次申请,服务器就要处理一次,所以“点击”是Web应用能够处理交易的最小单位。如果把每次点击定义为一次交易,点击率和TPS就是一个概念。不难看出,点击率越大,对服务器的压力也越大。点击率只是一个性能参考指标,重要的是分析点击时产生的影响。

    需要注意的是,这里的点击不是指鼠标的一次“单击”操作,而是在一次“单击”操作中,客户端可能向服务器发出多个HTTP请求。

     

    资源利用率

    资源利用率指的是对不同系统资源的使用程度,例如服务器的CPU利用率、磁盘利用率等。资源利用率是分析系统性能指标而改善性能的主要依据,因此,它是Web性能测试工作的重点。

    资源利用率主要针对Web服务器、操作系统、数据库服务器、网络等,是测试和分析瓶颈的主要参数。在性能测试中,要根据需求采集具体的资源利用率参数来进行分析。

  • LoadRunner终于安装成功了

    2008-11-19 23:29:40

        LoadRunner终于安装成功了,8.0版本。安装了两次.第一次安装时,用户名,密码没改,搞的我重启机器以后,系统都进不去了。(它默认新建了个MI-管理员,不知道密码)第二次,改了用户名,密码又从网上下了个安装包,终于可以了。功夫不负有心人~本来想把我下到的那个压缩包放到这里的,可传不上去,估计是太大,下载网址也忘了,大家就在google里搜吧,很多的,呵呵!

       最近两个月主攻性能测试LoadRunner,这个先入了门再学其它。给自己加油!

       日子过得还算充实,可不知怎么还是想念那个张开双臂久违了的拥抱……

Open Toolbar