-
TestDirector8.0(TD8.0)管理定制手册
2008-07-10 13:11:45
目录
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时,选择了多种数据库时,这里就需要选择将您的项目建在哪个数据库上了。
-
QTP的基础代码
2008-07-10 13:09:22
1 生产随机数列
第一种方法randomize'更新反回的数据
funcation rand(k,n)
n="int((k-1)*rnd+1) rand=n
end funcation
第二种方法n="randomnumber.value(1,255)
2 当运行到表中的某一行,自动导出表中的所有数据row=datatable.getcurrentrow
if row="5" then
datatable.export("d:\data.xml")
end if
3 参数化密码
webedit("txtpass").setsecure"sdsdf...."
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现="false error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
if error_message<>(datatable.value("error_info"))then
msgbox(error_message)
end if
browser("web_name").dialog("diaglog_name").close
end if
这里我总结了两点技巧:
一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理5 datatable.value("num")只在global形式下的一种省略形式;完整形式是:
datatable.value("num",dtlocalsheet)
-----向某一列的单元格赋值:
datatable.value("column_name",dtlocalsheet)="nanjing"
-----取得某一行具体值:
datatable.setcurrentrow(n)
msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
或者kk=datatable.Rawvalue("column_name","action1")
----在run-time时,动态添加表格与数据
kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;
7 wintreeview一些操作
选择一个条目:wintreeview.select(item)'根是0
根的名称:wintreeview.getitem(0)8 数据库检查点模块:
sub database_check
set con="createobject(""adodb.connection")
con.open "Descrīption="IBM_ODBC;DRIVER=SQL" Server;SERVER="IBM;UID=sa;""&_
"PWD="123456;APP=Quick" Test Pro;WSID="IBM;DATABASE=IBM_table""
'access方式:con.open "DRIVER="{Microsoft" Access Driver (*.mdb)};DBQ="d:\test.mdb""
'Orocle方式:con.open "DRIVER="{Oracle" in OraHome92};SERVER="CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BA
M=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;""
set record="createobject(""adodb.recordset")
sql="select*from ibm_one_table"
record.open sql,con
DO
if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
num=num+1;
end if
record.movenext
loop until record.eof="true record.close
set record="nothing con.close
set con="nothing end sub9 换行符
vbcr----chr(13)回车符// vblf----chr(10)换行符
vbcrlf----chr(13)+chr(10)结合//type(chr(13)就相当于按了一上键盘上的enter
10 Run from step有两种方式:
在Keyword View模式会从本步骤运行到所有action结束
在expert view模式仅会将本action运行结束11 由于对象属性原因,无法识别对象
-----对于对象属性是变化的,可以参数化/或者用正则表达式
-----报匹配多个对象错误,可以spy查看对象,添加一个该对象另一个唯一标识属性
-----有时可以删除对象的变化的属性来解决识别问题
------对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性来识别
(index:按照程序源码,绘制对象的先后标识对象,所以与其它相同对象是相互依赖,当其它对象发生
变化后,原先的所有对象index属性要发生变化,开始是0;如index:="0; location:根据对象的位置进行确定,从上到下,从左到右;
CreateTime:按照对象被浏览器打开的先后标识对象)
------另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统本身特性去解决问题12 对系统文件的操作
-------从系统的文件中获取信息及删除文件
get_file_infor("c:\she.mpg")
function get_file_infor(url)
dim fso,f
set fso="createobject(""scrīpting.filesystemobject")
set f="fso.getfile(url)"
f.name:f.size:f.type:f.datacreated'///获取文件信息
fso.deletefile(url)'/////删除文件
end function
--------获取文件夹里所有文件信息
get_folder_infor("c:\kai")
function get_folder_infor(folder)
dim fso,f,f1,n
set fso="createobject(""scrīpting,filesystemobject")
set f="fso.getfolder(folder) set fc="f.files for each f1 in fc
select case f1.name
case"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件
end select
next
end function
13 等待某个对象出现方法y="......waitproperty(""visible",true,10000) -
Loadrunner 检查点函数总结
2008-07-10 13:06:35
Loadrunner 检查点函数总结
最近项目比较紧,一直没有写博客,再一个发现之前写的一些文章被其它网站任意使用,也不注明出处,实在心寒,也罢谁让当今社会就是这样呢!!!还是继续做我想做的事!
今天我来总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find()
这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:
一、web_find()函数
该函数的作用是“在页面中查找相应的内容”,常用参数及含义如下:
web_find("web_find", //定义该查找函数的名称51Testing软件测试网6bj(yX b C3B
"RightOf=a", //定义查找字符的右边界"LeftOf=b", //定义查找字符的左边界
"What=name", //定义查找内容
LAST);
使用该函数注意以下事项:
1、 位置
该函数在页面内容显示出来以后,在页面中进行查找,所以只能写在要查找内容之后
2、 录制模式
该函数只能在基于HTML模式录制的脚本中进行查找
3、 必须启用内容检查选项
在runtime setting->Preferences里面,把Enable image and text check选中,否则不执行该查找函数
4、 在VB和JAVA语法中不支持该函数
该函数有以下一个缺点:
1、 执行效率较低
2、 不返回查找结果情况,如想在执行该函数后根据查找结果做进一步操作时,没有返回值可以依据
例如:
在页面中查找“登录成功”的字符串,如果找到该字符串在日志中输出“登录成功”,如果找不到该字符串,则在日志中输出“登录失败”,此时使用该函数没有依据来做此判断,但使用web_reg_find()函数,使用它其中的SaveCount可以进行判断,具体方法我们下面介绍。
二、web_reg_find()函数
该函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:
web_reg_find("Search=Body", //定义查找范围
"SaveCount=ddd", //定义查找计数变量名称
"Text=aaaa", //定义查找内容
LAST);
使用该函数注意以下事项:
1、 位置
该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:
Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()
2、 使用技巧
在该函数的参数中有个“SaveCount”,该参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到,下面举个例子来说明:(引用LR的帮助中的例子)
// Run the Web Tours sample
"URL=http://localhost/MercuryWebTours/",
// Set up check for successful login by looking for "Welcome"
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=35", ENDITEM,
"Name=login.y", "Value=14", ENDITEM,
if (atoi(lr_eval_string("{Welcome_Count}")) > 0){ //判断如果Welcome字符串出现次数大于0
lr_output_message("Log on successful."); }//在日志中输出Log on successful
lr_error_message("Log on failed"); //在日志中输出Log on failed
我觉得这个方法非常有用,我们可以举一反三,应用到我们实际的项目中
三、插入函数的方法
1、 手工写入,在需要插入函数的位置手工写入该函数
2、 光标停留在要插入函数的位置,在INSERT菜单中,选择new step,在列表中选择或查找要插入的函数,根据提示填写必要的参数
3、 在tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择insert after或insert before,根据提示填写必要的参数
四、总结
1、 这两个函数函数类型不同,WEB_FIND是普通函数,WEB_REG_FIND是注册函数
2、 WEB_FIND使用时必须开启内容检查选项,而WEB_REG_FIND则不没有此限制
3、 WEB_FIND只能只用在基于HTML模式录制的脚本中,而WEB_REG_FIND没有此限制
4、 WEB_FIND是在返回的页面中进行内容查找,WEB_REG_FIND是在缓存中进行查找
5、 WEB_FIND在执行效率上不如WEB_REG_FIND
-
Loadrunner 检查点函数总结
2008-07-10 13:06:32
Loadrunner 检查点函数总结
最近项目比较紧,一直没有写博客,再一个发现之前写的一些文章被其它网站任意使用,也不注明出处,实在心寒,也罢谁让当今社会就是这样呢!!!还是继续做我想做的事!
今天我来总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find()
这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:
一、web_find()函数
该函数的作用是“在页面中查找相应的内容”,常用参数及含义如下:
web_find("web_find", //定义该查找函数的名称51Testing软件测试网6bj(yX b C3B
"RightOf=a", //定义查找字符的右边界"LeftOf=b", //定义查找字符的左边界
"What=name", //定义查找内容
LAST);
使用该函数注意以下事项:
1、 位置
该函数在页面内容显示出来以后,在页面中进行查找,所以只能写在要查找内容之后
2、 录制模式
该函数只能在基于HTML模式录制的脚本中进行查找
3、 必须启用内容检查选项
在runtime setting->Preferences里面,把Enable image and text check选中,否则不执行该查找函数
4、 在VB和JAVA语法中不支持该函数
该函数有以下一个缺点:
1、 执行效率较低
2、 不返回查找结果情况,如想在执行该函数后根据查找结果做进一步操作时,没有返回值可以依据
例如:
在页面中查找“登录成功”的字符串,如果找到该字符串在日志中输出“登录成功”,如果找不到该字符串,则在日志中输出“登录失败”,此时使用该函数没有依据来做此判断,但使用web_reg_find()函数,使用它其中的SaveCount可以进行判断,具体方法我们下面介绍。
二、web_reg_find()函数
该函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:
web_reg_find("Search=Body", //定义查找范围
"SaveCount=ddd", //定义查找计数变量名称
"Text=aaaa", //定义查找内容
LAST);
使用该函数注意以下事项:
1、 位置
该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:
Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()
2、 使用技巧
在该函数的参数中有个“SaveCount”,该参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到,下面举个例子来说明:(引用LR的帮助中的例子)
// Run the Web Tours sample
"URL=http://localhost/MercuryWebTours/",
// Set up check for successful login by looking for "Welcome"
"Name=username", "Value=jojo", ENDITEM,
"Name=password", "Value=bean", ENDITEM,
"Name=login.x", "Value=35", ENDITEM,
"Name=login.y", "Value=14", ENDITEM,
if (atoi(lr_eval_string("{Welcome_Count}")) > 0){ //判断如果Welcome字符串出现次数大于0
lr_output_message("Log on successful."); }//在日志中输出Log on successful
lr_error_message("Log on failed"); //在日志中输出Log on failed
我觉得这个方法非常有用,我们可以举一反三,应用到我们实际的项目中
三、插入函数的方法
1、 手工写入,在需要插入函数的位置手工写入该函数
2、 光标停留在要插入函数的位置,在INSERT菜单中,选择new step,在列表中选择或查找要插入的函数,根据提示填写必要的参数
3、 在tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择insert after或insert before,根据提示填写必要的参数
四、总结
1、 这两个函数函数类型不同,WEB_FIND是普通函数,WEB_REG_FIND是注册函数
2、 WEB_FIND使用时必须开启内容检查选项,而WEB_REG_FIND则不没有此限制
3、 WEB_FIND只能只用在基于HTML模式录制的脚本中,而WEB_REG_FIND没有此限制
4、 WEB_FIND是在返回的页面中进行内容查找,WEB_REG_FIND是在缓存中进行查找
5、 WEB_FIND在执行效率上不如WEB_REG_FIND
-
Bugzilla使用简介
2008-04-28 13:17:42
Bugzilla使用简介
1 、 用户登录及设置流程:
打开浏览器, 进入 Bugzilla 主页面。
进入主页面后,点击【新建帐号】,进入注册页面。
在注册页面中输入 E-Mail 和 真实姓名(为了统一,这里我们都使用计算机名) ,然后,点击【 Create Account 】,随后,你将收到一封包含初始密码的 E-Mail 。
在收到 E-Mail 之后,点击【登录】,在帐号栏输入注册时使用的 E-Mail 地址,在密码栏输入邮件里通知的初始密码,然后,点击【 Login 】。
如忘记密码,在登陆页面中输入注册用户名,点击【 Submit Request 】 , 根据收到的邮件进行重新设置密码。
成功登录后,点击【 Edit 属性】 -> 【帐号设置】,进行密码修改。
点击【 Edit 属性】 -> 【邮件设置】,进行邮件通知设置。
点击【 Edit 属性】 -> 【权限】,进行权限查询。
2 、 BUG 处理流程
• 测试人员或开发人员发现 bug 后,判断属于哪个模块的问题,填写 bug 报告后,系统会自动通过 Email 通知项目组长或直接通知开发者。
• 项目组长根据具体情况,重新 reassigned 分配给 bug 所属的开发者。
③ 开发者收到 Email 信息后,判断是否为自己的修改范围 .
1 ) 若不是 , 重新 reassigned 分配给项目组长或应该分配的开发者。
2 ) 若是,进行处理, resolved 并给出解决方法。(可创建补丁附件及补充说明)
④ 测试人员查询开发者已修改的 bug ,进行重新测试。(可创建 test case 附件)
1 ) 经验证无误后,修改状态为 VERIFIED 。待整个产品发布后,修改为 CLOSED 。
2 ) 还有问题, REOPENED ,状态重新变为“ New" ,并发邮件通知。
⑤ 如果这个 BUG 一周内一直没被处理过。 Bugzilla 就会一直用 email 骚扰它的属主,直到采取行 动。管理员可以设定最迟采取行动的期限,比如说 3 天,系统默认为 7 天。
3 、 Bug 的提交过程
点击 【新建】 —〉选择发现的 bug 所在的产品名称。
在选择的产品 bug 提交页面中,选择或者输入 bug 信息。
◎模块:点“模块”两个字,可以查看关于这个产品的模块的详细信息。
◎平台、操作系统:可以根据发现 bug 的实际情况来选择,如果确定这个 bug 可以发生在所有的平台,选择 all 好了!
◎优先级: P1 至 P5 优先级逐渐减弱。
◎严重级: blocker 到 enhancement 严重程度降低。
Blocker: 阻碍了项目开发或者测试的继续进行。
Critical: 冲突,数据丢失和严重的内存泄漏等问题。
Major: 较大的功能缺陷。
Minor: 较小的功能缺陷。
Trivial: 拼写、对齐类的错误。
Enhancement: 需要改进的。
◎初始状态:开发人员的默认状态为“ unconfirmed”( 这个要由管理员设置,参见管理员操作指南 ) ,测试人员或者管理员此处为可选状态: unconfirmed 和 new.
◎ Assigned to: 为空时默认为管理员指定的 owner, 也可手工制定。
◎ CC: 可为多人,需用 " , " 隔开。
◎ URL: bug 的定位(可选)。
◎注释:是对 bug 的概述(必须填写)。
◎ Desription 中要详细说明下列情况:
1 ) 发现问题的步骤
2 ) 执行上述步骤后出现的情况
3 ) 期望应出现的正确结果
◎关键字:单击“关键字”三个字,会显示管理员已经设定的关键字,选择其一,便于以查询。注意:此处不可以随意添加,必须使用已经存在的关键字才好。另外,如果管理员没有创建关键字的话,那么此项缺省。
◎依赖:直接输入与当前 bug 有依赖关系的 bug 的编号。简单地说,比如说这里输入“ 3 ”,那么就是说当前提交的 bug 有依赖关系,不是由于 3 导致了当前 bug ,就是当前 bug 导致了 bug3 。
确认无误后,“ commit”!
提交之后,系统会提示: bug 已经提交。在此页面的下半部分,会再次显示刚才提交的 bug 的详细信息,你可以在这里进行修改,重新 commit, 也可以在此增加新的附件或是附加说明来进一步说明 bug 。
4 、对于 Bug 的不同处理情况
4.1 Bug 的属主 (owner) 处理问题,提出解决意见及方法。
给出解决方法并填写附加说明( Additional Comments ),还可创建附件(如:更改提交单)。
填表提示:
FIXED 描述的问题已经修改, 该 bug 已经修复并检查过,源文件已经检入 CVS 库。
INVALID 描述的问题不是一个 bug ( 输入错误后,通过此项来取消 )
WONTFIX 描述的问题将永远不会被修复。
LATER 描述的问题将不会在产品的这个版本中解决。
DUPLICATE 描述的问题是一个存在的 bug 的复件。
WORKSFORME 所有要重新产生这个 bug 的企图是无效的。如果有更多的信息出现,请重新分配这个 bug ,而现在只把它归档。
4.2 项目组长或开发者重新指定 Bug 的属主。
① bug 不属于自己的范围,可置为 Assigned , 等待测试人员重新指定。
② bug 不属于自己的范围,但知道谁应该负责,在 Reassign bug to 的输入框中 直接输入被指定人的 Email 。
③操作结果:此时 bug 状态又变为 New ,此 bug 的 owner 变为被指定的人。
4.3 测试人员确认开发人员报告的 Bug 是否存在 .
查询状态为“ Unconfirmed" 的 Bug,
测试人员对开发人员提交的 Bug 进行确认,确认 Bug 存在。
具体操作:选中“ Confirm bug(change status to New)" 后,进行 commit.
操作结果:状态变为“ New".
4.4 测试人员验证已修改的 Bug
① 测试人员查询开发者已修改的 bug ,即 Status 为 "Resolved", Resolution 为 "Fixed". 进行重新测试。(可创建 test case 附件)
② 经验证无误后,修改 Resolution 为 VERIFIED 。待整个产品发布后,修改为 CLOSED 。
若测试之后发现还有问题, REOPENED ,状态重新变为“ New" ,并发邮件通知。
5 、查询
登录 Bugzilla 缺陷跟踪系统后,点击查询,可以按照指定的一个或者多个查询条件进行查询。
◎摘要 (Summary) : 下拉列表框选择查询规约。在其后的输入框中输入包含的信息,此信息的指定与提交bug时的注释信息相一致。
◎ 产品 (Product) :选择所要查找的 bugs 所在的产品。
◎ 模块 (Component) :选择 bugs 所在的模块。
◎ 版本 (Version) :选择 bugs 版本。
◎注释 (Comments) :可在下拉列表框中选择将要输入的包含信息的规约,其后指定包含的信息。此信息的指定根据提交 bugs 时所填写的描述信息。
◎ URL : 指定关于 bugs 所在的 URL 。
◎关键字 (Keywords) :指定包含或不包含该关键字的 bugs 。每个 bug 可以被指定关键字, bugs 报告人或者管理员可以编辑关键字。
◎ 状态 (Status) :选择 bugs 状态。
◎ 处理 (Resolution) :选择 bugs 处理的结果。
◎ 严重性 (Severity) :选择 bugs 的严重级别。
◎ 优先级 (Priority) :选择 bugs 的优先级别。
◎ 硬件 (Platform) :选择存在 bugs 程序运行的平台。 ◎操作系统