发布新日志

  • LoadRunner函数中文翻译系列之二--Check

    2009-06-04 19:11:43

    web_find

     语法:
     int web_find (const char *StepName, <Attributes and Specifications list>, char *searchstring, LAST );

    参数:
     1、StepName:步骤名称,在Tree视图中出现。

    2、Attributes and Specifications list:

    支持的属性有:

    Frame:在多Frame的情况下,定义要查找Frame的范围。

    Expect:定义在什么情况下函数检查成功:找到了指定的搜索标准或者没有找到。例如说,可以检查指定的错误信息是否出现在web页面中。合法的值有2个:found和notfound。默认值是“found”。

    Matchcase:指定搜索是否区分大小写。

    Repeat:指定当第一次发现要查找的字符串时,搜索是否继续。当一个web页面中包含多个被查找的字符串时,此参数是非常有用的。合法的值有2个:yes,no。默认值是“yes”。

    Report:指定在什么情况下,VuGen在执行日志中显示此函数的检查结果。合法的值有:success,failure,always。默认值是“always”。

    Onfailure:此参数决定在函数检查失败后,Vuser是否中断。参数值是abort。如果指定了Onfailure=abort,当函数检查失败时,不论在运行时设置中的error-handling是什么,脚本都会中断。

    如果没有指定Onfailure=abort,那么运行时设置中error-handling将会起作用。

    支持的特性有:RightOf, LeftOf (不支持7.x及更高版本)。

    RightOf:要查找的字符串右边的内容。

    LeftOf:要查找的字符串左边的内容。

    3、Searchstring:需要查找的字符串,格式为“What=stringxyz”。此搜索不区分大小写。

    4、LAST:属性列表结束符。

    返回值
     整型。 成功时返回LR_PASS(0),失败时返回LR_FAIL (1)。

    说明
     此函数的作用是在HTML页面中查找指定的字符串。

    此函数只能在基于HTML录制的脚本中使用。当指定的HTML请求全部完成以后,开始执行搜索过程,比web_reg_find要慢。

    web_find函数在C语言的脚本中已经被web_reg_find所替代,web_reg_find运行速度比较快,而且在HTML-based和URL-based的录制方式中都可以使用。 在C语言脚本中,web_find是向后兼容的。Java和Visual Basic脚本中不再支持它。

    运行在HTTP模式下的WAP用户都和运行在WSP回放模式下的WAP用户都不支持此函数。

    web_global_verification

     语法:
     int web_global_verification (<List of Attributes>, LAST );

    参数:
     List of Attributes:

    1、Text:此属性是一个非空的,以NULL结尾的字符串,表示要查找的内容。语法是”Text=string”。还可以使用text flags自定义字符串。

    2、TextPfx:没有指定Text的情况下使用此属性。要查找的字符串的前缀。语法是” TextPfx =string”。还可以使用text flags自定义字符串。

    3、TextSfx:没有指定Text的情况下使用此属性。要查找的字符串的后缀。语法是” TextSfx =string”。还可以使用text flags自定义字符串。

    4、Search:可选项,在哪里查找字符串。可选的值是:Headers,Body,NORESOURCE或All。默认值是NORESOURCE。语法是“Search=value”。

    5、Fail:当字符串找不到时的处理选项:Found (默认值)或NotFound。Found表示当找到对应的字符串时发生了错误(例如“Error”)。NotFound表示当找不到字符串时发生了错误。语法是“Fail=value“。

    6、ID:在日志文件中标识当前函数。

    LAST:属性列表结束符。

    注:text flags:/IC表示忽略大小写;/BIN表示指定的是二进制数据。

    返回值
     整型。 成功时返回LR_PASS(0),失败时返回LR_FAIL (1)。

    说明
     web_global_verification属于注册函数,注册一个在web页面中搜索文本字符串的请求,与web_reg_find只在下一个Action函数中执行搜索不同的是,它是在之后所有的Action类函数中执行搜索的。可以搜索页面的body,headers,html代码或者是整个页面。

    在检测一些应用程序级别(不通过http状态码来表现)的错误时,web_global_verification是非常有用的。如果要定位通过HTTP状态码表现的错误时,使用web_get_int_property。

    查找范围:all:这个HTML页面;Headers:页面的头;body:页面的体,包含所有的资源但不包含头;NORESOURCE(默认选项):仅仅包含页面的体,把包括头和资源。

    如果不知道要查找的精确的文本,或者要查找的多个文本不是完全相同的,可以使用前缀和后缀来表示。这时需要用到TextPfx和TextSfx属性。这2个属性必须同时指定,一旦指定了其中一个,就不能指定Text属性了。

    注意:web_global_verification在WAP协议下不能运行。

    web_image_check

     语法:
     int web_image_check(const char *CheckName, <List of Attributes>, <"Alt=alt"|| "Src=src">, LAST );

    参数:
     1、CheckName:名称,在Tree视图中出现。

    2、List of Attributes:

    支持的属性有:Frame(在多Frame的情况下,定义要查找Frame的范围)。

    支持的选项有:expect, matchcase, repeat, report, onfailure。

    Tip:选项跟属性的区别,大部分选项都只允许设置预定义的值,其他的值都是无效的。

    3、Alt:检查图象的ALT标记。不允许空值。

    4、Src:检查图象的SRC标记。不允许空值。

    5、LAST:参数列表结束的指示符。

    返回值
     整型。

    说明
     web_image_check检查指定的图象是否在HTML页面中出现。

    Alt或者Src两者必须有一个在参数列表中出现。如果两项都通过,那么检查成功。

    此函数仅仅支持基于HTML的脚本。

     web_reg_add_cookie

     语法:
     int web_reg_add_cookie(const char * cookie, const char * searchstring, LAST );

    参数:
     1、Cookie:定义需要增加或修改的Cookie。

    Cookie的参数格式为:<name>=VALUE; (required);domain=DOMAIN_NAME;(required);expires=DATE;path=PATH;(default path is "/");secure。

    此参数中的cookie元素和HTTP响应头中的Set-Cookie是相同的。例如“Session=1234;domain=sanditon.com”,在这里,“Session”是cookie的名称。

    2、Searchstring:要查找的文本字符串。字符串不能为空,以null结尾。格式为“Text=string”。

    3、LAST:属性列表的结束符。

    返回值
     整型。 成功时返回LR_PASS(0),失败时返回LR_FAIL (1)。

    说明
     web_reg_add_cookie是注册类型的函数。它首先注册一个搜索文本字符串的请求。检查动作在后续的Action函数之后进行。如果字符串被找到,就添加到cookie中。

    需要注意,尽管web_reg_add_cookie在功能上跟HTTP Set_Cookie头相似,它们还是有个明显的区别。 根据HTTP标准,domain属性在Set-Cookie头中是可选的。如果没有指定,默认的domain的值是产生cookie的服务器的host name。当使用web_reg_add_cookie函数时,服务器的hostname对于压力测试的机器来说是不可用的,所以domain属性是必选项。

    此函数在HTML-based 和URL-based的脚本中都可以使用。(参照录制选项的录制标签页)。此函数是在服务器内容到达客户端之前注册搜索请求的,所以当所请求的内容一到就会执行搜索操作,脚本会比较高性。

    web_reg_add_cookie是用户手动添加的,无法录制。

    web_reg_find

     语法:
     int web_reg_find (const char *attribute_list, LAST);

    参数:
     1、attribute_list:

    通过Name=Value对来传递参数。例如“Text=string”。Text,TextPfx,TextSfx三个必须有一个出现。其他的属性是可选的。

    a) Text:要搜索的字符串,字符串必须非空,以NULL结尾。可以使用text flags自定义搜索字符串。

    b) TextPfx:要搜索的字符串的直接前缀。

    c) TextSfx:要搜索的字符串的直接后缀。

    d) Search:搜索的范围。可选的值是:Headers 、Body(在请求体中搜索)、Noresource (仅仅在HTML请求体中搜索,不包括头和资源)、ALL (在请求体、头和资源中搜索),默认值是“BODY”。

    e) SaveCount:匹配的个数。

    f) Fail:设置函数检查在什么状态下失败。

    g) ID:日志文件中标识此函数的一个字符串。

    h) RelFrameId:相关联的FrameId。注意:此参数在GUI级别的脚本中不受支持。

    2、LAST:属性列表结束的标记符。

    返回值
     整型。 成功时返回LR_PASS(0),失败时返回LR_FAIL (1)。

    说明
     web_reg_find属于注册函数,注册一个在web页面中搜索文本字符串的请求,在接下来的Action(象web_url)类函数中执行搜索。

    通过查找期望的字符是否存在来验证是否返回了期望的页面。例如,通过查找“Welcome”来检查主页是否完全打开了。也可以查找“Error”检查浏览器是否发生错误。还可以使用此函数注册一个请求来统计特定字符串出现的次数。

    如果检查失败,在接下来的Action类的函数中会报告错误。此函数仅仅注册请求,并不执行。函数的返回值只表明注册是否成功,并不表示检查的结果。

    此函数不仅能够查找text,还能查找到围绕着text的strings。不要同时指定text和前缀后缀。

    Fail,处理选项,可以是“Found或“NotFound”。默认是“NotFound”。

    “Fail=Found” 指示当对应的字符找到时,函数检查失败。例如,查找单词“Error”,如果找到了,说名web请求没有成功,你想把函数检查设置为失败。

    “Fail=NotFound”指示当对应的字符找不到时,函数检查失败。如果查找的是web请求成功时出现的字符串时,需要使用NotFound。

    SaveCount参数指示保存到参数中的匹配的字符串的个数。使用这个属性,需要指定“SaveCount=param”。检查操作被执行后,param 的值是null结尾的数字类型的值。

    如果指定了SaveCount,且没有使用Fail参数,检查不会失败,无论需要查找的字符串是否找到。通过检查SaveCount的值确定字符串是否被找到。 如果param是0,说明没有找到对应的字符串。

    如果同时指定了SaveCount和Fail,指定的错误处理选项和SaveCount协同工作。 handling option specified works together with the SaveCount. Thus,如果指定了SaveCount且指定了“Fail=NotFound” ,但是字符串被找到,SaveCount被赋值为字符串出现的次数,检查成功。如果字符串找不到,SaveCount被赋值为0,检查失败(注意,参数的0值只在运行时设置中Continue on error 选中时才有意义)。

    此函数在HTML-based和URL-based的脚本中都可以使用。此函数是在所请求内容到达之前注册搜索请求的,所以当所请求内容一到达后就会执行搜索,产生的脚本比较高效。

  • loadrunner录制下载文件

    2009-06-04 19:06:53

    loadrunner录制下载文件,文件如何保存,如何获得服务器返回的文件名,保存文件时如何随机生成文件名

    在录制脚本的过程中,我们把下载文件的请求单独放到一个action中,我们先简单的分析一下录制下载文件的脚本,在脚本中只能看到这样一个下载的请求: web_url(”download.php”,
    “URL=http://211.147.208.141/cn/resources/download.php?id=386″,
    “Resource=1″,
    “RecContentType=application/force-download”,
    “Referer=”,
    LAST);

    对于如何保存到本地,loadrunner是无法记录的,执行脚本时客户端发出这个请求,服务器端响应后,loadrunner接收到了服务器响应的文件内容(我们可以在日志中看到文件的内容,不过是乱码),既然loadrunner可以接收到文件内容,那么我们完全可以使用关联函数来获得该内容,在通过C语言的文件函数把获得的内容写在本地。

    那现在遇到这样一个问题,使用关联函数如何定义获得服务器响应内容的左右边界呢?因为我们把这个请求写在了一个单独的action中,所以在这里我们只要把服务器响应的所有内容均获取下来写到本地,也就完成了下载文件的保存。

    下面看代码:

    Action()
    {
    int flen; //定义一个整型变量保存获得文件的大小
    long filedes; //保存文件句柄
    char file[256]=”\0″; //保存文件路径及文件名

    web_set_max_html_param_len(”2000000″);//设置页面接收最大的字节数,该设置应大于下载文件的大小

    web_concurrent_start(NULL);

    web_reg_save_param(”filecontent”,
    “LB=”,
    “RB=”,
    “Search=BODY”,
    LAST);

    //使用关联函数获取下载文件的内容,在这里不定义左右边界,获得服务器响应的所有内容 web_reg_save_param(”file”,
    “LB=filename=\”",
    “RB=\”",
    “Search=all”,
    LAST);

    //使用关联函数在服务器响应的头文件中获取下载文件名
    web_url(”download.php”,
    “URL=http://211.147.208.141/cn/resources/download.php?id=386″,
    “Resource=1″,
    “RecContentType=application/force-download”,
    “Referer=”,
    LAST);

    //发出下载请求 web_concurrent_end(NULL);

    strcat(file,”c:\\”); //将“c:\\”这个路径保存到file中
    strcat(file,lr_eval_string(”{file}”));//将获得的文件名拼接在file这个变量字符串之后

    flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); //获得文件大小

    if(flen > 0)
    {
    if((filedes = fopen(file, “wb”)) == NULL)
    {
    lr_output_message(”Open File Failed!”, lr_eval_string(”{filecontent}”));
    return -1;
    }
    fwrite( lr_eval_string(”{filecontent}”),flen,1,filedes );
    fclose( filedes );
    }

    return 0;
    }

    好了,运行这段脚本完成文件下载并写到本地的操作

    如果我们需要重复保存这个文件到本地,如何解决重名问题呢,下面这段代码可以随机生成文件名 char file[256]=”\0″;
    char * chNumber

    chNumber=lr_eval_string(”{Random}”); //生成随机数

    strcat(file,”c:\\test”);
    strcat(file,chNumber);
    strcat(file,”.rar”);

    此时file中保存着一个随机生成的文件名,然后使用文件函数以该文件名保存文件

  • LoadRunner函数中文翻译系列之一--Action

    2009-06-04 19:06:53

    web_url

     语法:
     Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTRARES,<Lists of Resource Attributes>,LAST)

    返回值
     成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。

    参数:
     Name:VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。

    url:页面url地址。

    List of Attributes

    EXTRARES:分隔符,标记下一个参数是资源属性的列表了。

    List of Resource Attributes

    LAST:属性列表结束的标记符。

    说明
     Web_url根据函数中的URL属性加载对应的URL,不需要上下文。

    只有VuGen处于URL-based或者HTML-based(此时A script. containing explicit URLs only选项被选中时)的录制模式时,web_url才会被录制到。

    可以使用web_url 模拟从FTP服务器上下载文件。web_url 函数会使FTP服务器执行文件被真实下载时的操作。除非手工指定了"FtpAscii=1",下载会以二进制模式完成。

    在录制选项中,Toos—Recording Option下,Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源,只有选择了“Record within the current script. step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。

    通过修改HTTP头可以传递给服务器一些附加的请求信息。使用HTTP头允许请求中包含其他的内容类型(Content_type),象压缩文件一样。还可以只请求特定状态下的web页面。

    所有的Web Vusers ,HTTP模式下的WAP Vusers或者回放模式下的Wireless Session Protocol(WSP),都支持web_url函数。

    web_image

     语法:
     Int web_image (const char *StepName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );

    返回值
     成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。

    参数:
     StepName:VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。

    List of Attributes(服务器端和客户端映射的图片):SRC属性是一定会被录制到的,其他的ALT、Frame、TargetFrame、Ordinal则是有的话会被录制到。

    1、ALT:描述图象的元素。用鼠标指向图象时,所浮出来的文字提示。

    2、SRC:描述图象的元素,可以是图象的文件名. 如: button.gif。也可以使用SRC/SFX来指定图象路径的后缀。所有拥有相同此后缀的字符串都会被匹配到。

    3、Frame:录制操作时所在的Frame的名称。

    4、TargetFrame:见List of Attributes的同名参数。

    5、Ordinal:参见Web_link的同名参数。

    List of Attributes(客户端映射的图片):

    1、AreaAlt:鼠标单击区域的ALT属性。

    2、AreaOrdinal:鼠标单击区域的顺序号。

    3、MapName:图象的映射名。

    List of Attributes(服务器端映射的图片):尽管点击坐标不属于属性,但还是以属性的格式来使用。

    1、Xcoord:点击图象时的X坐标。

    2、Ycoord:点击图象时的Y坐标。

    EXTRARES:分隔符,标记下一个参数是资源属性的列表了。

    List of Resource Attributes:参见List of Resource Attributes一节。

    LAST:属性列表结束的标记符。

    说明
    web_image模拟鼠标在指定图片上的单击动作。此函数必须在有前置操作的上下文中使用。

    在Toos—Recording Option,如果录制级别设为基于HMTL的录制方式时,web_image才会被录制到。

    web_image支持客户端(client-side)和服务器端server-side的图片映射。

    在录制选项中,Toos—Recording Option下,Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源,只有选择了“Record within the current script. step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。

    通过修改HTTP头可以传递给服务器一些请求附加信息。使用HTTP头允许请求中包含内容,如同压缩文件一样。还可以只请求特定状态的web页面。

    web_image支持Web虚拟用户,不支持WAP虚拟用户。

    例子
     下面的例子模拟用户单击Home图标以回到主页(黑体部分):

    web_url("my_home", "URL=http://my_home/", LAST);

    web_link("Employees", "Text=Employees", LAST);

    web_image("Home.gif", "SRC=../gifs/Buttons/Home.gif", LAST);

    web_link("Library", "Text=Library", LAST);

    web_image("Home.gif", "SRC=../../gifs/buttons/Home.gif", LAST);

    下面的例子模拟用户在客户端映射的图片上单击:

    web_image("dpt_house.gif",

    "Src=../gifs/dpt_house.gif",

    "MapName=dpt_house",

    "AreaOrdinal=4",

    LAST);

    下面的例子模拟用户在服务端映射的图片上单击:

    web_image("The Web Developer's Virtual Library",

    "Alt=The Web Developer's Virtual Library",

    "Ordinal=1",

    "XCoord=91",

    "YCoord=17",

    LAST);

    下面是一个使用文件名后缀的例子:它指定了dpt_house.gif作为后缀,所以象../gifs/dpt_house.gif、/gifs/dpt_house.gif、gifs/dpt_house.gif、/dpt_house.gif等都会匹配到。

    web_image("dpt_house.gif","Src/sfx=dpt_house.gif", LAST);

    web_link
     语法:
     Int web_link (const char *StepName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );

    返回值
     成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。

    参数:
     StepName:VuGen中树形视图中显示的名称,在自动事务设置中也被用做事务名称。

    List of Attributes:支持下列的属性:

    1. Text:超链接中的文字,必须精确匹配。

    2. Frame:录制操作时所在的Frame的名称。

    3. TargetFrame、ResourceByteLimit:见List of Attributes一节。

    4. Ordinal:如果用给出的属性(Attributes)筛选出的元素不唯一,那么VuGen使用此属性来指定其中的一个。例如:“SRC=abc.gif”,“Ordinal=3”标记的是SRC的值是“abc.gif”的第3张图片。

    EXTRARES:表明下面的参数将会是list of resource attributes了。

    LAST:结尾标示符。

    说明
     模拟鼠标在由若干个属性集合描述的链接上进行单击。此函数必须在前置动作的上下文中才可以执行。

    web_link 仅仅在基于HTML的录制方式中才会被VuGen捕捉到。

    非HTML生成的资源的例子有.gif 和.jpg图像。对于List of Resource Attributes参数来说,仅仅当Recording Options--Recording --HTML-based script-- Record within the current script. step选项被选中时,它们才会被插入到代码中。

    可以通过改变HTTP头信息给服务器传递一些附加信息。使用HTTP头信息可以,允许响应体中包含其他的内容类型(Content-Type),例如压缩文件,或者只有满足了特定的状态才去请求web页。

    此函数值支持Web虚拟用户,不支持WAP虚拟用户。

    web_submmit_form

     语法:
     Int web_submit_form. (const char *StepName, <List of Attributes>, <List of Hidden Fields>, ITEMDATA, <List of Data Fields>, [ EXTRARES, <List of Resource Attributes>,] LAST );

    返回值
     成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。

    参数:
     StepName:Form的名字。VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。

    List of Attributes:支持以下属性:

    1. Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL。也可以使用“Action/sfx” 表示使用此后缀的所有Action。

    2. Frame:录制操作时所在的Frame的名称。

    3. TargetFrame、ResourceByteLimit:见List of Attributes的同名参数。

    4. Ordinal:参见Web_link的同名参数。

    VuGen通过记录数据域唯一的标识每个Form。如果这样不足以识别Form,VuGen会记录Action 属性。如果还不足以识别,则会记录Ordinal 属性,这种情况下不会记录Action属性。

    List of Hidden Fields:补充属性(Serves)。 通过此属性可以使用一串隐含域来标识Form。使用下面的格式:

    STARTHIDDENS,

    "name=n1", "value=v1", ENDITEM,

    "name=n2", "value=v2", ENDITEM,

    ENDHIDDENS,

    List of Data Fields

    Data项用来标识form。Form是通过属性和数据来共同识别的。

    使用下面的格式来表示数据域列表

    "name=n1", "value=v1", ENDITEM,

    "name=n2", "value=v2", ENDITEM,

    ITEMDATA:Form中数据和属性的分隔符。

    EXTRARES:一个分隔符,标记下一个参数是资源属性的列表了。

    List of Resource Attributes:参见List of Resource Attributes一节。

    LAST:属性列表结束的标记符。

    说明
     web_submit_form. 函数用来提交表单。此函数可能必须在前一个操作的上下文中执行。在Toos—Recording Option,只有录制级别设为基于HMTL的录制方式,web_image才会被录制到。

    在录制选项中,Toos—Recording Option下,Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源,只有选择了“Record within the current script. step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。

    通常情况下,如果录制了web_submit_form. 函数,VuGen会把“name”和“value”一起录制到ITEMDATA属性中。如果不想在脚本中以明文显示“value”,可以对它进行加密。把“Value”改为“EncryptedValue”,然后把录制到的值改为加密后的值。

    例如:可以把 "Name=grpType", "Value=radRoundtrip", ENDITEM

    改为:"Name=grpType", EncryptedValue=409e41ebf102f3036b0549c799be3609", ENDITEM

    如果你完整的安装了LoadRunner,那么打开开始菜单--Mercury LoadRunner—Tools--Password Encoder,这个小工具是用来加密字符串的。把需要加密的值粘贴到Password一栏,再点Generate按钮。加密后的字符串会出现在Encoded string框中。接着点Copy按钮,然后把它粘贴到脚本中,覆盖原来显示的“Value”。

    加密的另一种方法时使用lr_decrypt函数。方法:选择整个字符串,例如“Value=radRoundtrip”(注意不要选择引号),右击鼠标,选择Encrypt string选现,脚本会变为:

    "Name=grpType", lr_decrypt("40d176c46f3cf2f5fbfaa806bd1bcee65f0371858163"), ENDITEM,

    web_submit_form支持Web虚拟用户,不支持WAP虚拟用户。

    例子:
     下面的例子中,web_submit_form. 函数的名字是“employee.exe”。此函数提交了一个请求,此请求包含雇员信息John Green。此函数没有使用属性(Attributes)是因为通过数据项已经能唯一的标识这个Form了。

    web_submit_form("employee.exe",

    ITEMDATA,

    "name=persons", "value=John Green - John", ENDITEM,

    "name=go_page", "value=Go to Page", ENDITEM,

    LAST);

    web_submmit_data

     语法:
     Int web_submit_data ( const char *StepName, <List of Attributes>, ITEMDATA, <List of data>, [ EXTRARES, <List of Resource Attributes>,] LAST );

    返回值
     返回LR_PASS(0)代表成功,LR_FAIL(1)代表失败。

    参数:
     StepName:步骤名称,VuGen中树形视图显示的名称。

    List of Attributes:支持以下属性:

    1. Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL。

    2. Method:表单提交方法:POST或GET(默认是POST)。

    3. EncType:编码方式。

    4. EncodeAtSign:是否使用ASCII值对符号“@”编码。Yes或者 No。

    5. TargetFrame:包含当前链接或资源的Frame。参见List of Attributes的同名参数。

    6. Referer、Mode:参见List of Attributes的同名参数。

    ITEMDATA:数据域和属性的分隔符。

    List of Data:

    数据域列表定义了表单提交的内容。由于此请求是上下文无关的,因此数据域包含了所有的隐含域。使用Form的编码规则组织数据域。

    数据域列表可以使用下面任意一种格式:

    "name=n1", "value=v1", ENDITEM,

    "name=n2", "EncryptedValue=qwerty", ENDITEM,

    EXTRARES:分隔符,标记下一个参数将是资源属性的列表。

    List of Resource Attributes:参见List of Resource Attributes。

    LAST:结束标记符。

    说明
     web_submit_data函数处理无状态或者上下文无关的表单提交。它用来生成表单的GET或POST请求,这些请求与Form自动生成的请求是一样的。发送这些请求时不需要表单上下文。

    当VuGen设为基于URL的录制模式,或者基于HTML的录制方式但是Recording Options—HTML Advanced 下的A script. containing explicit URLs only 选项被选中时,web_submmit_data函数才会录制到。

    不论你采用URL查询的方式(GET),还是采用请求体发送(POST)的方式,此函数都指示出Form中的数据是如何发送到服务器的。

    如果VuGen处于HTTP录制模式下,此时记录Web进程时,会产生此函数。在提交Form时,如果无法生成web_submit_form函数,VuGen也会生成web_submit_data函数。

    在录制选项中,Toos—Recording Option下—Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源。只有选择了“Record within the current script. step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。

    EncType属性给出一个内容类型,指定其做为“Content-Type”请求头的值。它指示了根据参数生成HTTP请求时使用的编码类型(不是URL-encoding就是multi-part)可以是下面的格式:

    1. “EncType=application/x-www-form-urlencoded”

    2. “EncType=multipart/form-data” (任何的“; boundary=”都会被默认忽略掉)

    3. “EncType=” (空串,表明没有产生内容类型(“Content-Type”)请求头)

    任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函数,且“Method=POST”,“application/x-www-form-urlencoded”会做为默认值来使用。其他情况下,不会产生Content-Type请求头。

    ContentType:文件类型标识符,如果“EncType”是“multipart/form-data”用来上传文件时,需要用到“ContentType”。当在ITEMDATA中的Data子句中指定了“File=Yes”,且文件也在此子句中,ContentType才适用,此时它会作为同一个子句的值来传递。

    正常情况下,“Content-Type”根据所上传文件的扩展名自动生成。例如:

    7d025e2b16b064e\r\n Content-Disposition: form-data; name="uploaded_file"; filename="D:\\temp\\a.txt"\r\n Content-Type: text/plain\r\n \r\n

    无论如何,对于非浏览器的程序来说是特殊的,根据文件类型生成的“ContentType”不一定是正确的。这时,通过手工指定来覆盖默认的“ContentType”。如果指定了空值,那么“Content-Type”头将不包含在文件中。

    如果没有显示的指定“ContentType”的值,当上传的文件为空时,不管文件扩展名是什么,都默认使用“application/x-unknown-content-type”做为”ContentType”的值。

    VuGen不会检查指定的ContentType是否有效。

    通常情况下,如果录制了web_submit_data 函数,VuGen会把“name”和“value”一起录制到ITEMDATA一节中。如果不想在脚本中以明文显示“value”,可以对它进行加密。把“Value”改为“EncryptedValue”,然后把录制到的值改为加密后的值。请参考web_submit_form中相关的内容。

    所有的Web虚拟用户,运行在HTTP模式下的WAP用户,运行在WSP回放模式下的WAP用户都可以使用本函数。

    例子
     下面的例子中,web_submit_data函数使用POST方法提交了一个表单。

    web_submit_data("default.aspx",

    "Action=http://lazarus/flightnet/default.aspx",

    "Method=POST",

    "TargetFrame=",

    "RecContentType=text/html",

    "Referer=http://lazarus/flightnet/",

    "Snapshot=t7.inf",

    "Mode=HTML",

    ITEMDATA,

    "Name=grpType", "Value=radRoundtrip", ENDITEM,

    "Name=lstDepartingCity", "Value=DEN", ENDITEM,

    "Name=lstDestinationCity", "Value=LAX", ENDITEM,

    "Name=txtDepartureDate", "Value=8/19/2003", ENDITEM,

    "Name=txtReturnDate", "Value=8/19/2003", ENDITEM,

    "Name=txtQuantity", "Value=1", ENDITEM,

    "Name=radClass", "Value=1", ENDITEM,

    "Name=radSeat", "Value=1", ENDITEM,

    "Name=btnAvailableFlights", "Value=Next >", ENDITEM,

    LAST);

    下面的例子, web_submit_data函数使用POST方法提交了2个文件。

    web_submit_data("Attachments",

    "Action=http://barton.cottage@.Devonshire.uk/Attachments?YY=45434",

    "Method=POST",

    "EncType=multipart/form-data",

    "TargetFrame=",

    "RecContentType=text/html",

    "Referer=http:///barton.cottage@.Devonshire.uk/Compose?YY=20435",

    "Snapshot=t5.inf",

    "Mode=HTML",

    ITEMDATA, "Name=userFile0",

    "Value=E:\\sense_sensibility\\Elinor.txt",

    "File=yes",

    "ContentType=text/html", // 覆盖了文本文件默认的“text/plain” 值。

    ENDITEM,

    "Name=userFile1",

    "Value=E:\\sense_sensibility\\Marianne.jpg",

    "File=yes",

    ENDITEM,

    LAST);

    web_custom_request

     语法:
     Int web_custom_request (const char *RequestName, <List of Attributes>,

    [EXTRARES, <List of Resource Attributes>,] LAST );

    返回值
     返回LR_PASS(0)代表成功,LR_FAIL(1)代表失败。

    参数:
     RequestName:步骤的名称,VuGen中树形视图中显示的名称。

    List of Attribute:支持的属性有以下几种:

    1. URL:页面地址。

    2. Method :页面的提交方式,POST或GET。

    3. TargetFrame:包含当前链接或资源的frame的名称。参见List of Attributes的同名参数。

    4. EncType:编码类型。

    5. RecContentType:响应头的内容类型。参见List of Attributes的同名参数。

    6. Referer:参见List of Attributes的同名参数。

    7. Body:请求体。参见List of Attributes的同名参数。

    8. RAW BODY:参见List of Attributes的同名参数。

    9. BodyFilePath:作为请求体传送的文件的路径。它不能与下面的属性一起使用:Body,或者其他Body属性或Raw Body属性包括BodyBinary,BodyUnicode, RAW_BODY_START或Binary=1。

    10. Resource、ResourceByteLimit、Snapshot、Mode:参见List of Attributes的同名参数。

    11. ExtraResBaseDir:参见List of Attributes的同名参数。

    12. UserAgent:用户代理,它是一个HTTP头的名字,用来标识应用程序,通常是浏览器,它呈现的是用户和服务器的交互。

    例如:头信息“User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”识别的是Window NT下的IE浏览器6.0。其他的User-Agent的值用来描述其他的浏览器,或者非浏览器程序。通常,一个应用程序中所有的请求都使用相同的用户代理,录制者作为一个运行时参数来指定(Run-Time Setting—Browser Emulation—User Agent)。不管怎么说,即使是在一个简单的浏览器进程中,仍有可能会用到直接与服务器交互的非浏览器组件(例如ActiveX控件),通常他们有着不同于浏览器的用户代理属性。指定“UserAgent”表示这是一个非浏览器的请求。指定的字符串被HTTP头“User-Agent:” 使用,在某些情况下,它同时会影响回放脚本时的行为。例如,不使用浏览器缓存,假设指定的URL属于资源等等。

    LoadRunner本身不检查指定的字符串与浏览器本身的值是否相同。

    13. Binary:“Binary=1”表示页面请求体中的每一个以\\x##形式出现的值(在这里“##”代表2个十六进制数字),都会被替换为单字节的十六进制的值。

    如果“Binary=0”(默认值),所有的字符序列只是按照字面的值传递。

    需要注意双斜杠的用法。在C编译器中双斜杠被解释为单斜杠。如果不需要零字节,单斜杠可以在Binary不等于1的情况下使用(例如,使用\x20代替\\x20)。如果需要零字节,那么只能使用\\x00且设置 “Binary=1”,\x00在逻辑上会被截断。

    14. ContentEncoding

    指定请求体的使用指定的方式(gzip或者deflate)进行编码(例如,压缩),相应的“Content-Encoding:” HTTP头会和此请求一起发送。这个参数适用于web_custom_request和web_submit_data。

    EXTRARES:表明下面的参数将会是List Of Resource Attributes了。

    LAST :结尾的标示符。

    List of Attributes

     FtpAscii:“1”使用ASCII模式处理FTP操作;"0" 使用二进制模式。

    TargetFrame: 当前链接或资源所在Frame的名称。除了Frame的名字,还可以指定下面的参数:

    _BLANK:打开一个空窗口。

    _PARENT:把最新更改过的的Frame替换为它的上级。

    _SELF:替换最新更改过的的Frame。

    _TOP:替换整个页面。

    RecContentType:录制脚本时响应头的内容类型。例如text/html、 application/x-javascript等。当没有设置Resource属性时,用它来确定目标URL是否是可记录的资源。此属性包含主要的和次要的资源。最频繁使用的类型是 text、application、image。次要的类型根据资源不同变化很多。例如:"RecContentType=text/html":表示html文本。"RecContentType=application/msword":表示当前使用的是Msword。

    Referer: 当前页面关联的页面。如果已经显式指定了url的地址,此项可以省略。

    Resource:指示URL是否属于资源。1 是;0 不是。设置了这个参数后,RecContentType参数被忽略。“Resource=1”,意味着当前操作与所在脚本的成功与否关系不大。在下载资源时如果发生错误,是当作警告而不是错误来处理的;URL是否被下载受“Run-Time Setting—Browser Emulation--Download non-HTML resources” 这个选项的影响。此操作的响应信息是不做为HTML来解析的。“Resource=0”,表明此URL是重要的,不受发送请求(RTS)的影响,在需要时也会解析它。

    ResourceByteLimit:web页面下载资源的极限大小。当达到设置的极限后,无法下载其他资源。仅仅对需要下载的资源有效。

    下载过程:如果总计下载大小小于极限值,则正常开始下载。如果当下载时达到了设置的极限值,资源大小可知(在HTTP响应头中指定了Content-Length),这中情况下,如果只需要一个缓冲区,那么下载可以正常完成。如果需要的不止一个缓冲区,或者资源大小不可知,下载就会中断同时关闭当前连接。

    这个特性可以用来模拟用户不等待一个页面下载完成时导航到另一个页面的情况。

    ResourceByteLimit 在HTTP模式中无法使用,在Concurrent Groups(Vuser脚本中的一个区,此区中的所有函数并发执行)区中也无法使用。仅仅适用于Sockets的回放,WinInet也是不适用的。

    Snapshot:快照的文件名,关联时使用。

    Mode:两种录制级别HTML、HTTP。

    HTML级别:在当前Web界面上录制直观的HTML动作。以一步步的web_url、web_link、web_image、web_submit_form来录制这些动作。VuGen仅仅录制返回HTML页面的请求,不处理脚本和应用程序。

    HTTP级别:VuGen把所有的请求录制为web_url指令,不生成web_link、web_image、web_submit_form这些函数。这种方法更为灵活,但是生成的脚本不够直观。

    ExtraResBaseDir(目前仅适用与web_custom_request函数):根URL,放在EXTRARES组里。它是用来解析相对URL的(译者加:类似于Windows的相对路径和绝对路径)。

    URL可以是绝对路径(例如http://weather.abc.com/weather/forecast.jsp?locCode=LFPO),也可以是相对路径(例如“forecast.jsp?locCode=LFPO”)。

    真正的URL的下载是通过绝对路径进行的,所以相对URL路径必须使用根路径URL去解析。例如,使用http://weather.abc.com/weather/做为根路径来解析“forecast.jsp?locCode=LFPO”,最后的URL是:http://weather.abc.com/weather/forecast.jsp?locCode=LFPO。如果没有指定“ExtraResBaseDir”,默认的根URL是主页面的URL。

    Body(目前仅适用与web_custom_request函数):请求体。不同的应用中,请求体分别通过Body、BodyBinary或者BodyUnicode参数来传递。请求体可以只使用其中一个参数,也可以使用一连串的分开的参数组成多请求体。例如:

    web_custom_request(

    ……

    "BodyUnicode=REPRICE"

    "BodyBinary=\\x08\\x00\\xCC\\x02\\x00\\x00"

    "Body=.\r\n"

    "-dxjjtbw/(.tp?eg:ch/6--\r\n",

    LAST);

    在上面的代码中,使用了3个参数来划分请求体,一个是Unicode段,一个是二进制段,最后一个是常规的字符串。最终的请求体是这3个参数按照在函数中的顺序连接起来的值。

    还有一个很少用到的参数,Binary。它也能描述二进制请求体,但只允许函数中只有一个请求体参数。

    所有的请求体都是ASCII字符,以null结束。

    Body:表示规则的,可打印的字符串。无法表示空字节。所有的字符都以一个反斜杠表示。注意:在旧的脚本中,可以看见不可打印的字符在请求体中以16进制方式进行编码。(例如 “\\x5c”),在这种情况下,必须使用“Binary=1”来标识。空字节使用"\\00"来表示。 相反,新脚本则会把把请求体分开放在不同的参数中("Body=...", "BodyBinary=...", Body=...")。

    BodyBinary :表示二进制代码。不可打印的字符在请求体中以16进制方式\\xHH进行编码。在这里HH 表示十六进制值。空字节使用"\\00"来表示。

    BodyUnicode:美国英语, 特指拉丁 UTF-16LE(little-endian)编码。这种编码方式会在在每个字符末尾附加一个0字节,以便使字符更可读。但是在VuGen中实际的参数把所有的0字节都去掉的。但是在发送给Web 服务器之前, web_custom_request函数会重新添加0字节的。对于不可打印的字符,使用单反斜杠表示,无法表示空字节。

    注意:如果请求体大于100K,会使用一个变量来代替Body参数。变量是在 lrw_custom_body.h中定义的。

    Raw Body(目前仅适用与web_custom_request函数):请求体是作为指针传递的,此指针指向一串数据。 二进制的请求体可以使用BodyBinary 属性来发送(或者使用Body 属性来传递,前提是必须设置"Binary=1" )。无论如何,这种方法需要使用转义字符反斜杠把不可打印的字符转换为ASCII字符。为了能有一种更简便的表现原始数据的方式,Raw Body属性应运而生,可以传递指向二进制数据的指针。

    使用4个连续的参数集来表示指针,而且必须按照顺序排列:

    RAW_BODY_START

    指向数据缓冲区的指针

    (int) 长度

    RAW_BODY_END

    例子:

    char *abc= .../* a pointer to the raw data */

    web_custom_request("StepName",

    "URL=http://some.url ",

    "Method=POST",

    RAW_BODY_START,

    "abc",

    3,

    RAW_BODY_END,

    LAST);

    在应用中,即使设置了数据的长度为0,指针也必须有值,不能为空。

    在“Binary=1”时,不能使用上面的语法传递原始数据。

    数据缓冲区中的数据不能使用参数化。也就时说,缓冲区中的任何参数(例如 "{MyParam}")不能被正确的替代为相应的值,只会以字面值发送。

    List of Resource Attributes

     Web页面中的非HTML机制产生了资源列表,包含了Javascript, ActiveX, Java applets and Flash所请求的资源。VuGen's 的Recording 选项中,可以设置把这些资源录制在当前的操作中(默认是此设置)还是作为单独的步骤来录制。

    支持以下资源:

    URL
     要加载的web资源的url。

     Referer
     关联的url。

     ENDITEM
     每个资源的结束标记

    相对于把每个资源都录制为单独的步骤来说,不录制非HTML元素使脚本更加简短和可读,特别是在VuGen的Tree视图下更为突出。

    当VuGen录制过程中发现附加的资源(比如JS)时,会以列表的形式加到附加资源项中。回放脚本时,这些资源文件也是请求的一部分。可以对一些按规则变化的资源使用关联。

       

  • 软件测试模型汇总

    2009-05-19 21:41:01

    内容并非本人原创,只是为了方便学习和记忆。总结如下:

    1、V模型

      在软件测试方面,V模型是最广为人知的模型,尽管很多富有实际经验的测试人员还是不太熟悉V模型,或者其它的模型。V模型已存在了很长时间,和瀑布开发模型有着一些共同的特性,由此也和瀑布模型一样地受到了批评和质疑。V模型中的过程从左到右,描述了基本的开发过程和测试行为。V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系。局限性:把测试作为编码之后的最后一个活动,需求分析等前期产生的错误直到后期的验收测试才能发现.

              

      2、W模型

      V模型的局限性在于没有明确地说明早期的测试,无法体现“尽早地和不断地进行软件测试”的原则。在V模型中增加软件各开发阶段应同步进行的测试,演化为W 模型(如下图)。在模型中不难看出,开发是“V”,测试是与此并行的“V”。基于“尽早地和不断地进行软件测试”的原则,在软件的需求和设计阶段的测试活动应遵循IEEE1012-1998《软件验证与确认(V&V)》的原则。

      W模型由Evolutif公司提出,相对于V模型,W模型更科学。W模型是V模型的发展,强调的是测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。测试与开发是同步进行的,从而有利于尽早地发现问题。

      

      W模型也有局限性。W模型和V模型都把软件的开发视为需求、设计、编码等一系列串行的活动,无法支持迭代、自发性以及变更调整。

           
      3、X模型

      X模型也是对V模型的改进,X模型提出针对单独的程序片段进行相互分离的编码和测试,此后通过频繁的交接,通过集成最终合成为可执行的程序。

               

      X模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终成为可执行的程序,然后再对这些可执行程序进行测试。己通过集成测试的成品可以进行封装并提交给用户,也可以作为更大规模和范围内集成的一部分。多根并行的曲线表示变更可以在各个部分发生。由图中可见,X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。但这样可能对测试造成人力、物力和财力的浪费,对测试员的熟练程度要求比较高。

      4、H模型

      H模型中, 软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行,某个测试点准备就绪时,就可以从测试准备阶段进行到测试执行阶段。软件测试可以尽早的进行,并且可以根据被测物的不同而分层次进行。

              

      这个示意图演示了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其它流程可以是任意的开发流程,例如设计流程或者编码流程。也就是说, 只要测试条件成熟了,测试准备活动完成了,测试执行活动就可以进行了。

      H模型揭示了一个原理:软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行。H模型指出软件测试要尽早准备, 尽早执行。不同的测试活动可以是按照某个次序先后进行的,但也可能是反复的,只要某个测试达到准备就绪点,测试执行活动就可以开展

  • 用户名和密码的测试方法(测试用例)

    2009-04-15 14:43:57

    用户名和密码看似简单的输入框。可测试的内容还是很多的,并且引发的问题也有很多种类。下面就说一说他的测试方法。

    一、用户注册

    只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~

    以等价类划分和边界值法来分析

    1.填写符合要求的数据注册: 用户名字和密码都为最大长度(边界值分析,取上点)

    2.填写符合要求的数据注册 :用户名字和密码都为最小长度(边界值分析,取上点)

    3.填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)

    4.必填项分别为空注册

    5.用户名长度大于要求注册1位(边界值分析,取离点)

    6.用户名长度小于要求注册1位(边界值分析,取离点)

    7.密码长度大于要求注册1位(边界值分析,取离点)

    8.密码长度小于要求注册1位(边界值分析,取离点)

    9.用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)

    10.密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)

    11.两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)

    12.重新注册存在的用户

    13.改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)

    14.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号显示

    备注:边界值的上点、内点和离点大家应该都知道吧,呵呵,这里我就不细说了~~

    二、修改密码

    当然具体情况具体分析哈~不能一概而论~

    实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键。而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。

    1.不输入旧密码,直接改密码

    2.输入错误旧密码

    3.不输入确认新密码

    4.不输入新密码

    5.新密码和确认新密码不一致

    6.新密码中有空格

    7.新密码为空

    8.新密码为符合要求的最多字符

    9.新密码为符合要求的最少字符

    10.新密码为符合要求的非最多和最少字符

    11.新密码为最多字符-1

    12.新密码为最少字符+1

    13.新密码为最多字符+1

    14.新密码为最少字符-1

    15.新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)

    16.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号

    17.看密码是否区分大小写,新密码中英文小写,确认密码中英文大写

    18.新密码与旧密码一样能否修改成功

    另外一些其他的想法如下:

    1 要测试所有规约中约定可以输入的特殊字符,字母,和数字,要求都可以正常输入、显示正常和添加成功

    2 关注规约中的各种限制,比如长度,大否支持大小写。

    3 考 虑各种特殊情况,比如添加同名用户,系统是否正确校验给出提示信息,管理员帐户是否可以删除,因为有些系统管理员拥有最大权限,一旦删除管理员帐户,就不 能在前台添加,这给最终用户会带来很多麻烦。比较特殊的是,当用户名中包括了特殊字符,那么对这类用户名的添加同名,修改,删除,系统是否能够正确实现, 我就遇到了一个系统,添加同名用户时,如果以前的用户名没有特殊字符,系统可以给出提示信息,如果以前的用户名包含特殊字符,就不校验在插入数据库的时候 报错。后来查到原因了,原来是在java中拼SQL语句的时候,因为有"_",所以就调用了一个方法在“_”,前面加了一个转义字符,后来发现不该调用这 个方法。所以去掉就好了。所以对待输入框中的特殊字符要多关注。


    4 数值上的长度 之类的,包括出错信息是否合理
    5 特殊字符:比如。 / ' " \ </html> 这些是否会造成系统崩溃

    6 注入式bug:比如密码输入个or 1=1

    7 登录后是否会用明文传递参数

    8 访问控制(不知道这个算不算):登录后保存里面的链接,关了浏览器直接复制链接看能不能访问。
  • QTP与TD连接方法及常见问题解决方法

    2009-03-18 11:48:48

    连接方法:

    1、安装TD和QTP。
    2、TD安装插件:
        http://机器名/TDBIN/start_a.htm,点击add-ins page进入插件下载页面。下载TestDirector Connectivity 、TestDirector System Test Remote Agent和TestDirector Client Side Setup 三个插件并安装。
        在TD的addin in pages-more testdirector add-ins页面下载并安装QuickTest Professional.
    3、QTP设置:
       打开QTP-file-quality center connection页面:
       server url:输入http://机器名/tdbin。不能使用实际的http://机器名/TDBIN/default.htm。且选择reconnect to server on startup后点击connect.
       连接成功后输入project信息。Domain、project、username和password后点击connect连接成功即可。
       打开QTP,Tools-->Options-->Run-->选中"Allow other Mercury products to run test and components"-->Save

    常见问题及解决方法:

    在QTP中录制脚本,保存时关联到了TD中,然后打开执行机器上的remote agent工具,在TD中建立了测试集,并执行刚才保存记录(用例),执行时status一栏总显示:Cannot get RemoteAgent's ClassID for test type <QUICKTEST_TEST>

    在TD的addin in pages-more testdirector add-ins页面下载并安装QuickTest Professional.即可解决问题。

  • TestDirector安装常见问题解决方法

    2009-03-10 18:58:38

    TestDirector安装常见问题解决方法:

    1、安装时提示:

    Automation error
     
    The system cannot find the path specified creating virtual Directory failed.


    解决方法:重新安装IIS.

    2、安装过程中,使用正确的管理员密码,但是系统提示用户名或密码错误使得安装过程终止。

    解决方法:我的电脑-属性-高级-性能-设置-数据执行保护-选择:只为关键windows程序和服务启用数据

    执行保护-重启电脑-重新安装即可。

    3、安装完成后,网页无法打开。打开IIS信息服务管理器-网址-默认网站:点击启动时提示错误。因为

    TestDirector只能使用计算机的80端口,现因其他服务占用了80端口,所以出现此问题。


    解决方法:更改其他服务的端口, 确保TD使用80端口即可解决此问题。

  • LR 录制登陆失败的解决方法

    2009-03-04 10:26:14

    项目背景:

        开发语言:html   javascript  xml

     

        数据库:oracle9.0

     

    问题:

     

        使用 loadrunnervirtual user generaton

     

    制登陆界面时使用正户名和密码后不能

     

    陆,录制停止。

     

    解决方法:

     

        1Virtual User Generator设置Tool-

     

    >record options->advanced中将support charset

     

    选项选中,且选中UTF-8

     

     

     

        2non-resources页面的non-resources

     

    context types列表的选项置不选中状态。

     

    (text/html、text/xml等设置为不选中状态。)

     

     

  • 测试人员的量化管理

    2009-02-26 14:36:02

        在项目中,测试人员考核往往成为项目经理和测试经理的一个难题,项目组测试人员考核主要包括工作效率和工作质量两大块,工作效率用于考察活动,而工作质量用于考察产出物质量。按照传统测试周期,测试过程分为:测试计划、测试设计和测试执行三个方面进行。测试计划属于测试经理的范畴,测试人员主要是测试设计和测试执行,测试经理的考核可包含在测试人员的考核内,当然,这部分考核也可以纳入项目组中进行。考核指标如下:

    一 测试设计
    1、工作效率相关指标
    (1)文档产出率:这项指标值主要为测试用例文档页数除于编写文档的有效时间获得。用于考察测试人员测试用例文档的生产率大小。
    公式:∑测试用例文档页数(页) / ∑编写测试用例文档有效时间(小时)
    参考指标:根据项目汇总得出平均在 1.14 页 / 小时左右,高于此值为优,低于此值为差。
    (2)用例产出率:这项指标值主要为上述指标值的补充,用于考察测试人员测试用例产出率大小。测试文档页数可能包含的冗余信息较多,因此要查看文档中测试用例的多少。方法是测试用例文档中测试用例编号总和数除于编写文档的有效时间。
    公式:∑测试用例数(个) / ∑编写测试用例文档有效时间(小时)
    参考指标:平均 4.21 个用例 / 小时
     
    2、工作质量相关指标
    (1)需求覆盖率:计算测试用例总数之和除于与之一一对应的功能点数之和,主要查看是否有功能点遗漏测试的情况。
    公式:∑测试用例数(个) / ∑功能点(个)
    参考指标: 100 %。如果连功能指标都不能满足 100 %覆盖,起码说明测试不充分。这个指标收集起来相当困难,如果存在需求跟踪矩阵或者测试管理工具能把用例与需求一一对应就容易得多。
    (2)文档质量:测试用例进行评审和同行评审发现的缺陷数,或者将此缺陷数除于文档页数算出比率。此指标考察测试人员文档编写的质量如何。
    公式:∑缺陷数(评审和同行评审)(个)
    ∑缺陷数(评审和同行评审)(个) / ∑测试用例文档页数(页)
    参考指标:由于评审是发现的缺陷数是不固定的,因此,这个指标没有可供参考的数值。如果缺陷数大小不能直接用于比较就使用缺陷 / 页方式进行横向对比。
    (3)文档有效率:使用测试用例文档进行测试时发现的系统测试缺陷数除于此文档页数。用于考察文档是由有效的指导了测试工作。
    公式:∑缺陷数(系统测试)(个) / ∑测试用例文档页数(页)
    参考指标:平均 2.18 个缺陷 / 页
    注意:如果存在测试人员在测试时创建新文档用于辅助测试时应包含这一部分。
    (4)用例有效率:使用测试用例发现的全部缺陷除于测试用例数总和。这一指标是上一指标的补充指标,用于考察用例质量是否较高
    公式:∑缺陷数(系统测试)(个) / ∑测试用例数(个)
    参考指标:平均 0.59 个缺陷 / 用例,也就是说,每执行两个用例才得到 1 个缺陷,各工程有所不同,可以自己实践一下

    二 测试执行
    1、工作效率相关指标
    (1)执行效率:利用测试用例文档页数除于此次系统测试执行的时间总和(不包含用例文档编写时间)。补充指标方法是用例的个数除于此次系统测试的时间总和。用于获得工作中测试人员每小时执行测试的速度。
    公式:∑测试用例文档页数(页) / ∑执行系统测试的有效时间(小时)
    ∑测试用例数(个) / ∑执行系统测试的有效时间(小时)
    参考指标:平均 0.53 页 / 小时, 1.95 个用例 / 小时。即测试人员每小时执行半页测试用例或者每小时执行 2 个测试用例。通过横向比较,容易知道那位成员的执行效率较高。注意:执行效率高的不代表测试质量也高,甚至执行效率和测试质量成反比,所以后面工作质量的指标会补充这一部分的偏离。实际结果表明,用例执行效率高的成员,其缺陷发现率往往偏低,考核如果不将此纳入进来也可以将其作为测试改进的一项重要数据进行收集。
    (2)进度偏离度:检查计划时间和实际时间的进度,方法是计划时间差额减去实际时间差额除于实际工时总和,用于考察测试人员进度情况,监控测试是否按照日程进行,是否满足了工程的进度要求。
    公式:∑(计划开始时间 - 实际开始时间)+∑(计划结束时间 - 实际结束时间) / 总工时
    参考指标: 15 % 进度偏离是个相对的指标,可能偏离了 20 个工作日,但是对于一个长达半年时间的测试而言偏离天数比上整体测试所需天数不足 15 %,可能偏离了 3个工作日,但是对于一个只有 1 星期时间的测试已经超过了整个测试阶段所需天数的 60 %。
    (3)缺陷发现率:测试人员各自发现的缺陷数总和除于各自所花费的测试时间总和。由于执行效率不能足够代表测试人员是否认真工作,那么,每小时发现的缺陷数就是重要的考核指标,你的工作可以通过这项指标得到反馈。
    公式:∑缺陷数(系统测试)(个) / ∑执行系统测试的有效时间(小时)
    参考指标:平均 1.1 个缺陷 / 小时 假使有位测试人员没有达到 1 小时发现 1 个缺陷,那么,除非产品质量高、模块较小,否则,就是他的缺陷发现能力不如其他测试人员。当然,详细分类中可以根据发现重要缺陷的多少来定义缺陷发现能力。
    工作质量相关指标
    (4)有效缺陷率:被拒绝和删除的缺陷数总和,或者被拒绝和删除的缺陷数总和除于缺陷总数。这项指标用于考察测试人员发现的、被确认为缺陷的缺陷数高低或者百分比,数和比率越低测试质量越高。
    公式:∑缺陷数(系统测试中被拒绝和删除的)(个)
    ∑缺陷数(系统测试中被拒绝和删除的)(个) / ∑缺陷数(系统测试)(个)
    参考指标:平均 21.9 %(测试人员发现的每 100 个缺陷中平均有 22 个缺陷不被开发组确认、认为不是“缺陷”或者错误录入缺陷)。有效缺陷比率容易给出,但是有效缺陷数具体数据要根据项目情况,无法给出可参考的数值。 
    (5)严重缺陷率:这个比例用于弥补缺陷发现率的不足。主要是根据严重程度分类的缺陷数比全部缺陷或者有效缺陷数。一般而言,每个公司基本把缺陷严重程度分为严重、一般和微小,或者更细(通常等级数为奇数)。另外,可以对缺陷严重程度进行折算(严重:一般:微小 =1 : 3 : 5 )通过折算可以得出权重,然后在计算测试人员分值,在此不冗述
    公式:∑严重 / 一般 / 微小 / ∑缺陷数
    ∑严重 / 一般 / 微小 / ∑有效缺陷数
    参考指标:严重 ~10% 一般 ~70% 微小 ~20% 。当测试人员发现的缺陷中严重错误比率越高,说明测试质量相对就好,通常严重程度缺陷数的分布呈正态分布。
    (6)模块缺陷率:这个指标主要是根据一个单独测试模块的缺陷数除于模块本身功能点数得出来的。假使一个模块是单独测试的话,很容易可以和其他模块进行指标横向对比,参照对应的测试人员,得出所测试模块的缺陷数,可以考察测试人员测试水平,也为开发考核提供数据。
    公式:∑缺陷数(系统测试(个) / 功能点(个)
    ∑缺陷数(系统测试(个) / 子功能点(个)
    参考指标 平均 3.74 个缺陷 / 功能点 1 个缺陷 / 子功能点

    三 测试管理
    开头提到对测试经理的考核就复杂一些,除了测试经理参与测试设计和执行外,还要考察他的测试管理能力,即测试计划阶段工作,其中
    (1)计划质量:测试计划的评审缺陷数或比率,可以与其他同类型项目或数据库平均指标进行对比。
    公式:∑缺陷数(评审和同行评审)(个)
    ∑缺陷数(评审和同行评审)(个) / ∑测试计划文档页数(页)
    参考指标:无
    (2)成本质量:成本度量主要放在工作量这块。因为无论涉及工资还是奖金,都要和工作量挂上关系。成本质量主要是对测试活动的计划工作量总和比上实际的工作量数值总和。对测试人员考核的进度偏离已经考虑了进度因素,而工作量涉及的是成本因素。
    公式:∑测试活动计划工作量(估算人日) / ∑测试活动的实际工作量(人日)
    参考指标:原则上不能偏离计划的 ± 15 %~ ± 20 %。实际上,这个指标是对成本的一种度量。对于一个大的项目来说,估算值往往差距非常大,阶段统计时可能有± 500 %!!这时调整计划是很必要的,在最终阶段取考虑计算平均估算值。一个测试经理必须对完成任务的成本进行有效控制。

  • 测试用例应该具备的基本信息

    2009-01-16 11:14:21

    Test Case ID: 用来标记测试用例的编号,这个编号必须是唯一的

    测试描述: 用来描述你将要进行的测试是怎样实施的

    修订历史: 为了明确测试用例由谁创建或者修改,所以每个测试用例都应该有其修订历史

    功能模块: 测试功能模块的名字

    测试环境: 用来描述你的测试环境,当然包括硬件环境和软件环境

    测试准备: 测试之前除了你所测试的程序之外还应该准备的东西,如打印机,网络等等

    测试执行: 用来详细描述你的测试步骤

    期望结果: The descrīption of what you expect the function to do.描述该功能所要实现怎样的结果

    实际结果: 通过/失败

    如果成功——纪录实际运行的过程

    如果失败——描述你观察到的现象,这将有利于发现Bug的起源

905/5<12345
Open Toolbar