-
常用的网站功能测试方法(已更新)和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的安装方法)