本人状态,进行时~going on!!

发布新日志

  • 常用的网站功能测试方法(已更新)和GUI基本测试内容

    2008-09-18 10:01:07

    1、页面链接检查: 每一个链接是否都有对应的页面,并且页面之间切换工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,同时能够生成html格式的测试报告。

    2、相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确检查按钮的功能是否正确 如新建、编辑、删除、关闭、返回、保存、导入等功能是否正确。

    3、字符类型检查:在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。

    1)标点符号检查:输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。

    2)特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。

    3)字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。

    4、中文字符处理:在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

    检查信息的完整性 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。

    5、信息重复:在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。

    6、检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。

    7、检查添加和修改是否一致:检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型

    8、检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错

    9、重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统检查多次使用返回键的情况   在有返回键的地方,返回到原来页面,重复多次,看会否出错

    10、搜索检查:有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确。

    11、输入信息位置:注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。

    12、上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。

    13、必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

    14、快捷键检查:是否支持常用快捷键,如Ctrl+C、 Ctrl+V、 Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

    15、回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错。

    16、刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。   

    17、回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

    18、直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。

    19、空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

    20、输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

    21、密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

    22、用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。

    23、系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同。对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    24、系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。



                                                                      GUI基本测试内容


    图形用户界面( GUI )对软件测试提出了有趣的挑战,因为 GUI 开发环境有可复用的构件,开发用户界面更加省时而且更加精确。同时, GUI 的复杂性也增加了,从而加大了设计和执行测试用例的难度。因为现在 GUI 设计和实现有了越来越多的类似,所以也就产生了一系列的测试标准。下列问题可以作为常见 GUI 测试的指南:

    窗口:
    · 窗口是否基于相关的输入和菜单命令适当地打开?
    · 窗口能否改变大小、移动和滚动?
    · 窗口中的数据内容能否用鼠标、功能键、方向键和键盘访问?
    · 当被覆盖并重新调用后,窗口能否正确地再生?
    · 需要时能否使用所有窗口相关的功能?
    · 所有窗口相关的功能是可操作的吗?
    · 是否有相关的下拉式菜单、工具条、滚动条、对话框、按钮、图标和其他控制可为窗口使用,并适当地显示?
    · 显示多个窗口时,窗口的名称是否被适当地表示?
    · 活动窗口是否被适当地加亮?
    · 如果使用多任务,是否所有的窗口被实时更新?
    · 多次或不正确按鼠标是否会导致无法预料的副作用?
    · 窗口的声音和颜色提示和窗口的操作顺序是否符合需求?
    · 窗口是否正确地被关闭?

    下拉式菜单和鼠标操作:
    · 菜单条是否显示在合适的语境中?
    · 应用程序的菜单条是否显示系统相关的特性(如时钟显示)?
    · 下拉式操作能正确工作吗?
    · 菜单、调色板和工具条是否工作正确?
    · 是否适当地列出了所有的菜单功能和下拉式子功能?
    · 是否可以通过鼠标访问所有的菜单功能?
    · 文本字体、大小和格式是否正确?
    · 是否能够用其他的文本命令激活每个菜单功能?
    · 菜单功能是否随当前的窗口操作加亮或变灰?
    · 菜单功能是否正确执行?
    · 菜单功能的名字是否具有自解释性?
    · 菜单项是否有帮助,是否语境相关?
    · 在整个交互式语境中,是否可以识别鼠标操作?
    · 如果要求多次点击鼠标,是否能够在语境中正确识别?
    · 光标、处理指示器和识别指针是否随操作恰当地改变?

    数据项:
    · 字母数字数据项是否能够正确回显,并输入到系统中?
    · 图形模式的数据项(如滚动条)是否正常工作?
    · 是否能够识别非法数据?
    · 数据输入消息是否可理解?

  • Winrunner数据库连接及操作的常用函数介绍(转载)

    2008-09-12 11:19:38

    Winrunner中有一个非常好用的数据库检查点功能,它可以提供简洁的数据库连接和检查,只要对ODBC稍作了解即可简单几步就操作完成。但是如果你想对数据库进行更多更“个性化”的操作,则只有自己编写脚本语言来连接和操作了,下面简单介绍几个数据库连接和操作的常用函数,同样是以SQL Server中TD数据库的为例,涉及到的函数有:db_connect,db_execute_query,db_get_field_value,db_get_row,db_get_headers,split,db_disconnect

    例子(已经测试可以运行):


    #    db_connect连接数据库

    if(db_connect("query1","DSN=TD_DOG;Descrīption=TD_DOG;UID=td;PWD=tdtdtd;APP=WinRunner;WSID=TESTLAB2;DATABASE=gpt_gogs_db",30)!=0)
     report_msg("connect error");
    else
     report_msg("cnnnect ok");

    #    给查询语句赋值 
    sql = "select bg_bug_id,bg_status from bug where bg_status='closed'";

    #    执行查询,sql_result保存查询到几条记录,只是记录的行数而非记录内容
    db_execute_query("query1",sql,sql_result);
    report_msg(sql_result); 
     
    #    db_get_field_value返回指定行,指定列的单元格内容,注意参数中第一行为#0
    sql_record = db_get_field_value("query1","#0","bg_bug_id");
    report_msg(sql_record);

    #    db_get_row是返回指定行的查询内容,如果你一行中包含很多列,则这一行所有列的制都返回,第一行同样是以0表示

    db_get_row("query1",0,sql_row);
    report_msg(sql_row);

    #    split函数用来分割不同列的值,并保存在数组中(这里我保存在数组line_array里),函数的返回值是数组元素个数,数组第一个元素下标为1
    sql_row_num = split(sql_row,line_array);

    for(x=1;x<=sql_row_num;x++)    #    循环输出数组中的内容
     report_msg(line_array[x]);

    #    db_get_headers函数用来得到查询中的“列头”,在这里例子中我查询两列:bg_bug_id,bg_status 于是那就返回这两列的名字
    db_get_headers("query1",column_num,headers);
    report_msg(column_num);

    #    同样使用split函数把两列的名字存到数组中去
    sql_column_num = split(headers,header_array);
    for(x=1;x<=sql_column_num;x++)
     report_msg(header_array[x]);


    #    最后关闭数据库连接 
    db_disconnect("query1"); 

  • 读取oracled

    2008-09-11 16:49:05

    if (db_connect ("query1","DSN=oracle;UID=TEST001;PWD=123456;DBQ=TESTPC11_192.168.0.111;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;",30)==0)
    report_msg("ok");
    else
    report_msg("error");
    #数据库连接

    sql="select * from abc ";
    db_execute_query ("query1",sql,record_number);
    #查询需要的关键字
    for(i=1;i<6;i++)
    {


    # Shell_TrayWnd
     set_window ("Shell_TrayWnd", 5);
     toolbar_button_press ("ToolbarWindow32_0", "启动 Internet Explorer 浏览器"); # Button Number 0;

    # Browser Main Window
     set_window ("Browser Main Window", 4);
     edit_set ("browser_main_edit_location", "about:blank");
     edit_set_selection ("browser_main_edit_location", 0, 0, 0, 11);
     obj_type ("browser_main_edit_location","<kCtrl_L>");
     edit_set ("browser_main_edit_location", "www.baidu.com");
     obj_type ("browser_main_edit_location","<kReturn>");

    # 百度一下,你就知道
     set_window("百度一下,你就知道",117);
        pause("i= "&i);
    #db_get_row("query1",i,row_content);
    row_content = db_get_field_value ("query1","#1","wd");

            pause(row_content);
            edit_set("wd",row_content);
     

     button_press("百度一下");

    # Browser Main Window
     win_activate ("Browser Main Window");
     #票行天下 十六大影院电影通票专售58836800票行天下电影通票_订票电话:010-58836

    # 百度搜索_电影
     #set_window("百度搜索_电影",1);
     #web_obj_get_text("票行天下 十六大影院电影通票专售58836800票行天下电影通票_订票电话:010-58836800.票行天下十六大影院电影通票包含新东安,","#1","#1",text,"","",1);
       #小说原创门户--起点中文网提供玄幻、魔幻、武侠、军文小说创作和在线收费阅读,
    set_window("百度搜索_中文",1);

     

    wait(3);


    web_obj_get_text("小说原创门户--起点中文网提供玄幻、魔幻、武侠、军文小说创作和在线收费阅读,尤其以玄幻出名。 www.cmfu.com/ 94K 2008-","#1","#1",text,"","",1);

     
     #100,000,000
    set_window("百度搜索_中文_1",1);
    web_obj_get_text("把百度设为首页","#1","#2",text2,"相关网页约","篇",1);
      
     
     
     sql2="update abc set rn='"&text"',sl='"&text2"' where wd='"&row_content"'";
     
     
        db_execute_query ("query1",sql2,record_number);
     # db_execute_query ("query1",sql4,record_number);
    # Browser Main Window
     win_activate ("Browser Main Window");
     win_close ("Browser Main Window");
    }

    ddt_save (table);
    ddt_close(table);

  • TD的基本操作

    2008-09-11 15:13:53

    TestDirector8.0(TD8.0)管理定制手册

     目录

     1:创建项目project或域domain

    2:新建用户组(角色)和用户组(角色)授权

    3:创建新用户并赋权流程

    4:定制TD使用模块

    5:自定义缺陷字段。

    6:缺陷字段显示定制

    7:缺陷单汉化

    8:问题

    1:创建项目project或域domain

    当一个新的项目需要测试介入时,我们就需要在TD中建立该项目资料库。本节讲述TD中项目和域的创建过程。

    步骤一:打开TD。

    步骤二:点击左边的‘Site Administrator’

    步骤三:输入密码,进入Site Administrator页面。

    注:默认密码为空,可以点击change password修改密码。这个密码只针对这个页面。

    步骤四:选中default,右健,在弹出菜单中点击Create Project。

     







    步骤五:在project name 中输入项目名。并选择数据库。

    注:在安装TD时,选择了多种数据库时,这里就需要选择将您的项目建在哪个数据库上了。

     

    2:新建用户组(角色)和用户组(角色)授权

    TD8.0默认有Developer;Project Manager;QATester;TDAdmin;Viewer5个用户组(角色)。这5个用户组(角色)的权限是不可修改的,当我们对这些用户组(角色)的授权不能满足我们的要求时,我们需要自己创建用户组(角色)。

    创建过程如下:

    步骤一:登陆TD后,点击右上角的CUSTOMIZE,进入PROJECT CUSTOMIZE页面。

     

    步骤二:在PROJECT CUSTOMIZE页面点击Set Up Groups,系统弹出Set Up Groups窗口。


    步骤三:在Set Up Groups窗口点击New,弹出New Group窗口。

    步骤四:New Group窗口,在Name中输入用户组名。并选择一个用户组,这里选择用户组的目的在于,让你创建的这个用户组,初始的时候,即拥有和你所选择的用户组相同的权限。完成后点击OK,弹出确认提示框,点击YES。

    步骤五:这个用户组就创建成功了,下一步我们就要修改该用户组的权限了。

      选中需要修改权限的用户组,点击Permission域中的Chang。系统弹出Permission Settings面,在Permission Settings页面,我们就可以修改用户组的权限了。

     

    修改用户组权限说明:
       当勾选Add Defect/Delete Defect,表示该用户组具有添加/删除bug的权限。

    其中,选中Add Defect可在右边Visiable Fields In Add Defect Dialog窗口,勾选在bug提交单中的显示字段(勾选了就意味着你对这个字段具备修改其参数值的权限)。红色的为bug单中的必选字段。

     

    3:创建新用户并赋权流程

    新的开发人员或测试人员进入公司后,需要在TD中加入该用户,并赋予权限,操作过程如下:

    步骤一:打开TD,进入下图页面。


    步骤二:点击左边的‘Site Administrator’

    步骤三:输入密码,进入site Administrator页面

    步骤四:选择users页面卡,点击new.新增新员工的用户名,完成后logout。

    步骤五:点击页面右上角的CUSTOMIZE,弹出登陆窗口,输入管理员密码(默认为空)

      

    步骤六:点击页面左上角set up users

    步骤七:点击add user 选中新员工,再点击OK

    步骤八:在project users 下选中张三,再在‘properties of 张三’域中,选择对应的角色。默认角色为viewer。对该用户即授权完毕。

     

    4:定置TD使用模块

    定置用户组(角色)下用户进入TD后,所拥有的模块权限。

    步骤一:打开TD后,点击右上角的CUSTOMIZE,进入PROJECT CUSTOMIZE页面。

    步骤二:点击左上角Customize Module  Access。

    步骤三:定制模块入口:可定制各个角色登陆TD时,对TD所拥有的权限

    在Defects Modul上打勾,即意味着该角色下的所有成员登陆TD后,只有缺陷管理功能可用。

    在TestDirector上打勾即意味着,拥有对TD的所有功能(需求管理,测试计划,测试用例,缺陷管理等)区别见附图。

    附图1为TDAdmin(勾选testdirector)角色成员登陆TD后的画面;

    附图2为developer(勾选defects modul)角色成员登陆TD后的画面。

     

     

                                  

     

     

     

                              5:自定义缺陷字段。

    当您认为缺陷提交单中的字段不够详细时,可以自己增加缺陷字段到缺陷提交单中。

    例如,我要在缺陷提交单中添加一个模块名称字段,该项目有‘安全’,‘界面’,‘控制’,‘通讯’,‘网络’五个模块,该模块名称字段,用下拉列表从5个模块中选择缺陷所属的模块。

    步骤一:登陆TD后,点击右上角的CUSTOMIZE,进入PROJECT CUSTOMIZE页面。

    步骤二:点击Cutomize Project Lists,弹出下图窗口,新建list列表,点击New List…。输入list名subjiect1;OK后。开始新增5个列表项,点击New Item….(过程略)。

    在新增list列表完后,退回上一级PROJECT CUSTOMIZE页面。

    步骤三:点击Customize Project Entities,弹出下图窗口,输入Field Label:模块名称,由于模块名称字段为下拉列表框,所以Field Type选择Lookup List。在lookup list 中对应Cutomize Project Lists设置的subject1。

    注:勾选Required表示这个字段在bug单中是必需的

        勾选History表示将这个字段的变化记入历史记录,任何对这个字段的修改都将记录。

    OK即完成设置过程。效果如下图

     

    6:缺陷字段显示定置

        bug单中的字段都是固定的,当某些字段不适用于该项目的测试时,我们可以通过bug单字段定置来获得更好的效果。

    步骤一:登陆TD后,点击右上角的CUSTOMIZE,进入PROJECT CUSTOMIZE页面。

    步骤二:点击Set Up Workflow,TD弹出下图窗口。

    步骤三:点击scrīpt Generator-Defect Details Field Customization。弹出下图窗口。

       这里的Visible Fields中是在bug单中所显示的字段,被勾选的字段则是bug单中的必填字段。

    疑问:Available Fields中的字段有何用?

    步骤四:(作用同步骤三)点击Apply&View,系统弹出警告,点击‘Yes’,进入脚本编译器。部分脚本如下:

       ElseIf User.IsInGroup("QATester") Then

            SetFieldApp "BG_ACTUAL_FIX_TIME", True, True, 0, 0

            SetFieldApp "BG_BUG_ID", True, True, 0, 1

            SetFieldApp "BG_CLOSING_DATE", True, False, 0, 2

            SetFieldApp "BG_CLOSING_VERSION", True, False, 0, 3

            SetFieldApp "BG_DEscrīptION", True, True, 0, 4

            SetFieldApp "BG_DETECTED_BY", True, True, 0, 5

            。。。。。。。。。。

    这段脚本是指QATester用户组下的用户的bug单所显示的内容。

      SetFieldApp "BG_DEscrīptION", True, True, 0, 4

    这句脚本是指:QATester用户组下的用户bug单,描述(DEscrīptION)字段是可见的,必填的。

    当把第二个True改成Flase时,描述(DEscrīptION)字段可见,但是不是必填。

    当把第一个True改成Flase时,描述(DEscrīptION)字段在bug单中为不可见。

    脚本修改后,保存。关闭原来的TD窗口,重新打开,脚本修改即可生效。

     

    7:缺陷单汉化

    缺陷管理的最重要的部分是缺陷单的管理,将其汉化成中文,对于英语不是很熟悉的同事来说,能够提高工作效率。TD8.0提供了一个自己汉化的途径,可以根据各个公司通用的名称定义来汉化。

    步骤一:登陆TD后,点击右上角的CUSTOMIZE,进入PROJECT CUSTOMIZE页面。

    步骤二:点击Cutomize Project Entities窗口中,选择一个叶子节点,即出现如下窗口。将该节点的Field Label中的英文译成中文即可。

    注:1:勾选每个BUG属性的History(历史记录),则在BUG报告单中,将记录改属性的改变记录作为历史记录。

       2:勾选每个BUG属性的Required(必须的),则在报告单中,该BUG属性是必填的,不能为空。

    步骤三:点击Cutomize Project Lists窗口中,在Lists下拉列表框中选择一个属性,在ListItems中选择一个值,点击Rename Item,即可将属性的参数译成中文。

    注:只适用于值用下拉列表框显示的属性。

     

     

     

     

    问题

    1:在定制好工程项目后,用户使用过程中发现,修改缺陷状态时,报错‘not enough grants to….’。

           解答:原因在于,在修改用户组权限时,没有设置bug属性的状态转换。见下图。正确设置状态转换权限后,即可。

    2:怎样实现允许用户看到某个BUG的属性,而又不允许其修改该属性的参数值?

       解答:修改该用户所在的用户组的权限,即修改上图中MODIFY DEFECT的权限。

    例如,我希望测试组成员看到任务分派对象,但是不允许其修改任务分派对象。

    在MODIFY DEFECT下去掉对Bug属性‘分派给’的勾选即可。

    3:自定义的用户组下的用户,在bug报告单中出现了一些我们没有选择(或者不希望出现)的Bug属性。

    解答:原因:用户在系统定义的用户组中(如Viewer组),将用户从系统定义的组中移出来即可。

    4:我希望将TD使用人员查看到某个BUG的缺陷描述变更记录。如何实现?

      解答:在CUSTOMIZE—Customize Project Entities—DEFECT—System Fields中选中缺陷描述(Descrīption),勾选其右边的History(历史记录)

    5:我在查看BUG时,BUG报告单中中是有些不愿意出现的BUG属性(下图中红色圈中的),如何将这些BUG属性隐藏?

    解答:CUSTOMIZE—Set Up Groups—选中Groups(您所在的用户组)点击Change---Defects,点击页面下方的Defects Data—Hiding Filter在弹出窗口中,选中Visible Fields标签页,将你不希望看到的字段,去掉它们前面的勾勾即可。见下图

    疑惑:
    1:一些系统定义好的,在CUSTOMIZE(自定义)中不可以修改的BUG属性参数如何将其汉化(我试图从TD的参数数据库中汉化,未能成功。)?
    2:CUSTOMIZE中的SET UP WORK FLOW有何作用,脚本编译器有何作用?修改脚本对应的效果页面是哪里?

    3:BUG浏览页面的列过滤中,出现一些没有翻译的字段(自定义不需要的字段),怎样把这些字段从可用列中删除?

    我是美丽签名档
  • 从Winrunner里取出信息,做成EXLe表

    2008-09-11 13:58:56

    table = "e:\\同学通讯录.xls";                              #建立一个EXLE表
    rc = ddt_open(table, DDT_MODE_READ);                              
    if (rc!= E_OK && rc != E_FILE_OPEN)
     pause("Cannot open table.");
    ddt_get_row_count(table,table_RowCount);
    for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
    {
     ddt_set_row(table,table_Row);
          
    }

    ddt_close(table);


    rc = ddt_open(table, DDT_MODE_READWRITE);            #修改表的读 写权 限

    pause("同学通讯录.");                                        #显 示表名

    ddt_set_val(table,"姓名","");                           #写入表头“姓名”
    ddt_set_val(table,"性别","");                          #写入表头“性别 ”
    ddt_set_val(table,"出生日期","");                                
    ddt_set_val(table,"住址","");
    ddt_set_val(table,"邮编","");
    ddt_set_val(table,"EMAIL","");
    ddt_set_val(table,"电话","");

    a=create_input_dialog("请确定要录入的同学的人数!");                  #创 建输 入对 话 框

    for(i=1;i<=a;i++)                                                 #循环 语 句,可循环“输 入同学的人数”
    {
        
      b=create_input_dialog("请输入此同学的姓名");           #创 建一个输 入姓名的对 话 框
      ddt_get_row_count(table,table_RowCount);            #显 示出获 得的行数
      for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)

                                   #进 行循环 判断   如 : 第 3 次 与 前 两  次 比 较
         if(b==ddt_val_by_row(table,table_Row,"姓名"))                    

                                           #进 行判断,每 次输 入姓名与前几次是否一 样
        b=create_input_dialog("请t重新输入此同学的姓名");
     

      ddt_set_val_by_row (table,i,"姓名",b );  #在 为  姓名的列的 i 行 ,输  入 b 的值 

      c=create_input_dialog("请输入此同学的性别");
      ddt_set_val_by_row (table,i,"性别",c);

      d=create_input_dialog("请输入此同学的出生日期");
      ddt_set_val_by_row (table,i,"出生日期",d);

      e=create_input_dialog("请输入此同学的住址");
      ddt_set_val_by_row (table,i,"住址",e);
     
      f=create_input_dialog("请输入此同学的邮编");
      ddt_set_val_by_row (table,i,"邮编",f);

      g=create_input_dialog("请输入此同学的EMAIL");
      ddt_set_val_by_row (table,i,"EMAIL",g);

      h=create_input_dialog("请输入此同学的电话");
      ddt_set_val_by_row (table,i,"电话",h);

    }

        ddt_save(table);
        ddt_close(table);

    rc = ddt_open(table, DDT_MODE_READ);                                  

                                                    # 打 开 
    c=create_list_dialog("查询菜单","请选择查询类型","姓名,性别,出生日期")

    ;                                             # 创 建 列表对 话 框
    switch(c)                                                             

                                                    # 选 择  表单

    {              
            case "姓名":
        d=create_input_dialog("请输入此同学的姓名");
         ddt_get_row_count(table,table_RowCount);
            for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
              if(d==ddt_val_by_row(table,table_Row,"姓名"))
        {
        pause(ddt_val_by_row(table,table_Row,"姓名"));
        break;
        }
      break;
      
       case"性别":
        e=create_input_dialog("请输入此同学的性别");
            ddt_get_row_count(table,table_RowCount);
            for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
      if(e==ddt_val_by_row(table,table_Row,"性别"))
        {
      pause(ddt_val_by_row(table,table_Row,"性别"));
      break;
        }
      break;
      
       case"出生日期":
        f=create_input_dialog("请输入此同学的出生日期");
            ddt_get_row_count(table,table_RowCount);
            for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
         if(f==ddt_val_by_row(table,table_Row,"出生日期"))
        {
        pause(ddt_val_by_row(table,table_Row,"

    出生日期"));
      break;
        }
      break;
      
    }  
     ddt_close(table);  

     

     

  • winrunner的Exle的取出

    2008-09-10 15:05:36

    #判断数据库是否能够连接上
    if(db_connect ("query1","DSN=Flight32",30)!=0)
      
         report_msg("connect error");

    else

         report_msg("cnnnect ok");
     
    #加入循环,打开不同的订单      
       for(i=1;i<5;i++)
       {
       #查询出符合要求的数据
          sql = "select Customer_Name  from Orders where Order_Number >= 5 and Order_Number <=8 ";
       db_execute_query("query1",sql,sql_result);
       #下标从0开始
        db_get_row("query1",i-1,sql_row);
             pause(sql_row); # 调试信息,察看取出值的情况
     
    # Shell_TrayWnd
     set_window ("Shell_TrayWnd", 4);
     button_press ("开始");

    # 「开始」菜单
     set_window ("「开始」菜单", 1);
     list_select_item ("SysListView32_0", "Flight 4A");

     

    # Login
     set_window ("Login", 4);
     edit_set ("Agent Name:", "mercury");
     password_edit_set("Password:", "kzptnyoslzjsaz");
     button_press ("OK");

    # Flight Reservation
     set_window ("Flight Reservation", 8);
     menu_select_item ("File;Open Order...");
     

    # Open Order
     set_window ("Open Order", 2);
     button_set ("Customer Name", ON);
     
     # 使用取出的数据
     edit_set ("Edit_1", ""& sql_row);
     
     button_press ("OK");

    # Search Results
     set_window ("Search Results", 3);
     #list_select_item ("Customer", "John Doe                 1        AA         6232         1    1 104.000008/28/2008    Thursday  DEN                        Denver  10:24 AM  LAX                   Los Angeles  01:24 PM"); # Item Number 0;
     button_press ("OK");

    # Flight Reservation
     win_close ("Flight Reservation");
    }

  • winrunner的基本操作

    2008-09-09 18:01:25

    (1),先在Winrunner里建一个脚本(这里以http://www.newtours.demoaut.com的订购飞机票为例)

    (2),点击Record开始录制,

    for (i=1; i<5; i++)
     
    {
    # Shell_TrayWnd
     set_window ("Shell_TrayWnd", 3);
     toolbar_button_press ("ToolbarWindow32_0_1", "启动 Internet Explorer 浏览器"); # Button Number 0;

    # Browser Main Window
     set_window ("Browser Main Window", 29);
     list_select_item("browser_main_combo_location","http://www.newtours.demoaut.com");

    # Welcome: Mercury Tours
     set_window("Welcome: Mercury Tours",11);
     edit_set("userName","pc8");
     obj_type("userName","<kTab>");
     password_edit_set("password","ca7121aa614993e5");
     obj_type("password","<kReturn_E>");
     web_image_click("login", 35, -52);

    # Find a Flight: Mercury Tours:
     set_window("Find a Flight: Mercury Tours:",23);
     list_select_item("passCount",i);(把4改成变量i)
     web_image_click("findFlights", 55, 12);

    # Select a Flight: Mercury Tours
     set_window("Select a Flight: Mercury Tours",3);
     web_image_click("reserveFlights", 62, 13);
    switch (i) {
    case"1":
     # Book a Flight: Mercury Tours
     set_window("Book a Flight: Mercury Tours",5);
     edit_set("passFirst0","1");
     edit_set("passLast0","1");
     break;
     
     case"2":
     # Book a Flight: Mercury Tours
     set_window("Book a Flight: Mercury Tours",5);
     edit_set("passFirst0","1");
     edit_set("passLast0","1");
     edit_set("passFirst1","2");
     edit_set("passLast1","2");
     break;
     
        case"3":
     # Book a Flight: Mercury Tours
     set_window("Book a Flight: Mercury Tours",5);
     edit_set("passFirst0","1");
     edit_set("passLast0","1");
     edit_set("passFirst1","2");
     edit_set("passLast1","2");
     edit_set("passLast2","3");
     edit_set("passFirst2","3");
      break;
      
    case"4":
    # Book a Flight: Mercury Tours
     set_window("Book a Flight: Mercury Tours",5);
     edit_set("passFirst0","1");
     edit_set("passLast0","1");
     edit_set("passFirst1","2");
     edit_set("passLast1","2");
     edit_set("passLast2","3");
     edit_set("passFirst2","3");
     edit_set("passFirst3","4");
     edit_set("passLast3","4");
     edit_set("creditnumber","123456");
     web_image_click("buyFlights", 57, 8);
     break;
     }
    # Browser Main Window
     win_close ("Browser Main Window");
    }

     

    (3)加个for语句的变量,自动往下订购。

    for (i=1; i<5; i++)
     
    {
    # Shell_TrayWnd
     set_window ("Shell_TrayWnd", 3);
     toolbar_button_press ("ToolbarWindow32_0_1", "启动 Internet Explorer 浏览器"); # Button Number 0;

    # Browser Main Window
     set_window ("Browser Main Window", 29);
     list_select_item("browser_main_combo_location","http://www.newtours.demoaut.com");

    # Welcome: Mercury Tours
     set_window("Welcome: Mercury Tours",11);
     edit_set("userName","pc8");
     obj_type("userName","<kTab>");
     password_edit_set("password","ca7121aa614993e5");
     obj_type("password","<kReturn_E>");
     web_image_click("login", 35, -52);

    # Find a Flight: Mercury Tours:
     set_window("Find a Flight: Mercury Tours:",23);
     list_select_item("passCount",i);
     web_image_click("findFlights", 55, 12);

    # Select a Flight: Mercury Tours
     set_window("Select a Flight: Mercury Tours",3);
     web_image_click("reserveFlights", 62, 13);

    for (j=0; j<i; j++)

    {
     # Book a Flight: Mercury Tours
     set_window("Book a Flight: Mercury Tours",5);
     edit_set("passFirst"&j,"1"&j);
     edit_set("passLast"&j,"1"&j);
     edit_set("creditnumber","123456");
     web_image_click("buyFlights", 57, 8);

     }
    # Browser Main Window
     win_close ("Browser Main Window");
    }

  • Mysql安装指南

    2008-09-09 10:46:22

    Mysql的安装文件可以直接到 http://www.mysql.com 下载,获得for win32的.zip包,建议选择4.0.20d版本。这里不详细说明。

      下载获得Mysql的for win32安装包后,用winzip解压缩,直接运行setup.exe,需要注意的是选择一个安装路径,当然,安装路径可以任意,建议选择C:\MySQL目录。安装完成后MySQL也就完成了。默认的用户名是root,密码为空。

      Mysql安装完成后,请通过开始-程序-附件-命令提示符进入:
      录入cd C:\mysql\bin 并按下回车键,将目录切换为 cd C:\mysql\bin

      在 C:\mysql\bin> 命令提示符下录入 mysqld-nt -install 命令,然后按下回车,如果出现 Service successfully installed 的提示, 这表示你已成功的将 MySQL 安装成一项 Windows 的服务。

      点击 开始-程序-管理工具-服务 ,你可以看到Mysql已经成为众多服务项目中的一项,不过此时它还未被启动, 因此接下来我们就来启动它。

      启动 MySQL 服务的方法有以下三种,请自行选择其中一种来进行:

      重启机器时自动启动它
      在服务窗口中选取 MySQL 服务名称,然后按下启动按钮来启动它
      在“命令提示字符”窗口中输入 NET START MySQL 指令来启动它

      Mysql数据安装完成,系统会默认生成一个名为test的数据库。一般情况下,由于该数据需要用root用户进行访问,从安全性角度而言,我们建议你新建一个数据库,并给这个数据库分配一个新的用户来访问。

      由于Mysql数据库默认的客户端功能比较少,不支持数据库的建立和用户的新增。其他比如Mysql-front等工具带了这些功能,您可以去下载这些工具来使用,当然,你也可以通过以下介绍的命令行方式来新增用户与数据库。

      登录数据库
      “命令提示字符”窗口录入,
      录入cd C:\mysql\bin 并按下回车键,将目录切换为 cd C:\mysql\bin
      再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

      修改密码
      C:\mysql\bin提示符下录入:
      格式:mysqladmin –u用户名 -p旧密码 password 新密码
      例如:给root加个密码ab12。键入以下命令:
      mysqladmin -uroot password ab12

      建立数据库
      格式:create database 库名;
      例如:建立新数据库shopex
      在MYSQL的提示符下:mysql> 录入 create database shopex;

      显示数据库
      格式:show databases;
      注意是databases而不是database

      建立新用户
      格式:grant all privileges on 数据库.* to 用户名@登录主机 identified by "密码";
      例如:增加一个用户test密码为1234,让他只可以在localhost上登录,并可以对数据库Shopex进行所有的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),
      在MYSQL的提示符下:mysql> 录入grant all privileges on shopex.* to test@localhost identified by "1234";

      通过以上操作,你建立一个新的数据库 shopex,并增加了一个名为test对shopex数据库有所有操作权限。

      注意:以上仅仅是简单的Mysql操作命令,如果你需要了解更加详细的资料,请查阅Mysql相关操作说明文档。

      接下去的安装就要看你选择什么作为你的Web服务器了,建议直接使用IIS(参考: WinXP下PHP的安装方法)

我的存档

数据统计

  • 访问量: 4533
  • 日志数: 8
  • 建立时间: 2008-09-09
  • 更新时间: 2008-09-18

RSS订阅

Open Toolbar