-
LoadRunner参数化功能
2008-05-24 10:42:03
更新方式:
. Each Occurrence
每次遇到参数就进行更新。
多次使用同一参数,而且没有什么关联,例如随机数。
Each Iteration
每次迭代时发生更新。 如果参数出现几次,虚拟用户用同一个数值。
适用同一个关联的参数。
Once
所有的地方都用同一个数值,包括所以的迭代。
文件类型参数分派方法
Sequential
按照顺序访问。
例子:
没有足够的值,从第一行开始重新取值。
Random:每个虚拟用户开始运行时安排随机的数值。
Unique
The Unique method assigns a unique sequential value to the parameter for
each Vuser.
数据必须足够,例如20个虚拟用户,5次迭代,至少要有100个数据。
-
软件测试:loadrunner 小知识累积
2008-05-24 10:39:05
1. 在启动录制脚本操作的Start Recording对话框,去掉Record the application startup前的选择,可以不录制应用程序启动时的操作,而仅录制所需的特定操作。
2. 添加windows性能计数器时,必须先用管理员身份登录该台服务器,然后添加才可生效(注意先后顺序)。
3. 设置DB2数据库监视:在Monitored Server Machines中配置Machine Information机器信息,Name中要填写“主机名@实例名”,如“168.31.6.47@DB2”,其中实例名要填完整,包括节点名称。Platform选“N/A”。
4. 添加windows性能计数器时,必须先用管理员身份登录该台服务器,然后添加才可生效(注意先后顺序)。
5. web_reg_save_param是在web脚本中用于关联HTML语句的函数。只有在录制中的关联有效时(在录制选项中设置),web_reg_save_param才会被自动录制。6. 设置Internet首选项的其它选项
几个比较常用的:
由资源引起的步骤超时是警告(Step timeout caused by resources is a warning):如果由于资源未在超时间隔内加载而引起超时,将发出警告而不是错误。对于非资源,VuGen 总是发出错误。(默认情况下为 NO)
HTTP 请求连接超时(秒)(HTTP-request connect timeout(sec)):Vuser 终止之前在步骤内等待特定 HTTP 请求连接的时间(秒)。超时为服务器保持稳定并响应用户提供了机会。默认值为 120 秒。
HTTP 请求接收超时(秒)(HTTP-request receive timeout(sec)):Vuser 终止之前在步骤内等待接收特定 HTTP 请求的响应时间(秒)。超时为服务器保持稳定并响应用户提供了机会。默认值为 120 秒。
超时设置主要用于以下高级用户:这些用户已确定可接受的超时值应该随环境而异。大多数情况下,默认设置应该足够长。如果服务器在合理的时间内并未做出响应,请检查其他与连接相关的问题,不要设置太长的超时,否则可能会导致脚本不必要地等待。
网络缓冲区大小(Network buffer size):设置用于接收 HTTP 响应的缓冲区的最大大小。如果该数据的大小超过了指定的大小,则服务器将按块发送数据,从而增加了系统开销。从 Controller 中运行多个 Vuser 时,每个 Vuser 都使用自己的网络缓冲区。该设置主要用于以下高级用户:这些用户已确定网路缓冲区的大小可能影响其脚本的性能。默认值为 12K 字节。7. 在Analysis中,可以很方便地将各个分析图表拷贝出来。方法是:先切换到某个图表页(Graph),再使用EditCopy to Clipboard功能,便可将该图表的图、数据等复制到剪贴板,然后就可以粘贴到需要的地方(如软件测试报告)去。
8. 将参数设置为Unique时,要特别注意提供的参数列表是否足够,在Controller中分配值的选项(Allocate Vuser values in the Controller)默认设置为自动分配数据块(Automatically allocate block size),这样的设置在场景的执行过程中往往会出问题,报出“参数不够”的错误,可以修改为由人工分配(Allocate__values for each Vuser),为每个虚拟用户分配指定数目的参数,以便于控制。
9. LR在录制脚本时有时常会出现一些乱七八糟的字符,例如:
"Name=save_path", "Value=D:"
"\\x5C"
"resin-2.1.12"
"\\x5C"
"doc"
以上脚本片断中用红色标出的“x5C”部分就是录制下来的乱字符,该脚本原本是为了将附件上传到服务器端保存,可录制下来的保存路径却多了以上的乱字符,导致本应的保存路径D:\resin-2.1.12\doc\...,变为D:\x5Cresin-2.1.12\x5Cdoc\...。要特别注意,以避免产生不必要的错误首先要安装oracle客户端,完成相关配置,再添加oracle计数器就可以了。
-
qtp工作原理。。。??
2008-05-15 10:17:31
工作原理简单点说就是 通过把QTP安装到电脑上,然后用生成脚本,回放来回归测试
对象识别原理 获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用,不匹配则智能识别(重新启动识别过程,过滤出一些符合条件的,进行判断后找到唯一匹配项)
复杂点说: 把对象从被测软件ui中读取出主要特征,存入对象库,回放时在被测试软件中寻找指定对象,赋予对象一些方法,方法为windows win32或者web上的一些activex控件的通用方法(或者javascrīpt应用于一些未支持的事件,比如link.click), 微软控件对外的接口,把其中一些方法进行封装,成为qtp自己的方法,比如getroproperty=对象.object.value ,然后运用这些方法属性驱动被测试对象完成一些指定的动作。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。
此外还有数据驱动 xx驱动的,每种驱动方式都大同小异,瞎JB侃呗。。。怕啥的阿,反正谁都不明白。面试的人肯定也不明白啥,就是随便问问 -
关于qtp
2008-05-11 14:17:15
做测试工作马上就一年了,用QTP也有几个月了,在这里感谢一下小师父教了我这么多的知识,也把我的总结跟大家分享一下,有不对的地方希望大家指出我好修改,谢谢了!!
1、拆分语句split
例:取得当前日期后拆分
riqi=date()
my=split(riqi,"-")
riqi=my(1)&"月"&my(2)&"日"
datatable("riqi",DtGlobalSheet)=riqi
本地表:DataTable("a", dtLocalSheet)
riqi= year(date)& "-" & Right("0"& month(date),2) & "-"&Right("0"& Day(Date),2)
2、取得表格中某行某列的值GetCellData
例:飞机票取票价
shuA=Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebTable("New York to Zurich").GetCellData(3,3)
3、取距某年某月某日的天数datediff
例:计算距2008-08-08奥运天数
datediff("d",now,"2008-8-8")
4、描述性编程text:=
例:取得某页面上某文字的链接
Browser("").Page("").Link("text:=娱乐").Click
或
neirong="娱乐"
Browser("").Page("").Link("text:="&neirong).Click
5、网页中HTML编辑器的录制
功能:验证126邮箱的发信功能正确
操作步骤:
a.录制脚本,动作包括整个发信的过程。
b.修改脚本,在输入信件主题代码后加wait 10语句
c.回放脚本,观察在邮件正文中输入的内容,回放时QTP是否写入
d.重新修改脚本,保证回放时QTP在邮件正文中写入内容
英文解决方案:
Browser("网易126免费邮--你的专业电子邮局").Page("网易电子邮箱 - xueqinzhaoqing@126.co").Frame("indexFrame").WebEdit("subject").Click
wait 1
Setting.WebPackage( "ReplayType")=2 '配置使用浏览器事件或鼠标运行鼠标操作的'方式.1 - 使用浏览器事件运行鼠标操作,2 - 使用鼠标运行鼠标操作。
Set ōbj=createobject("wscrīpt.shell")
obj.sendkeys "{TAB}"
wait 2
obj.sendkeys "abc1111"
wait 1
Setting.WebPackage( "ReplayType")=1
中文解决方案
strCopy = "软件测试."
Set ōbjIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", strCopy
objIE.Quit
wait 1
Setting.WebPackage( "ReplayType")=2
Set ōbj=createobject("wscrīpt.shell")
obj.sendkeys "{TAB}"
wait 2
obj.sendkeys "^v"
wait 1
Setting.WebPackage( "ReplayType")=1
6.使用Multi Test Manager添加文件时可以直接往里拖的哦。
7.函数:新建记事本,改名为public.vbs例:
function ZHIRSS
ZHIRSS="RSS行业资讯分类维护"
end function
使用语句executefile "d:\zhaopin\case\denglu.vbs"或设置QTP test/settings/resources/+函数目录
8.设置动作循环:右击/actiong call properties/run on all rows
9.设置动作允许被调用:右击/action properties/general/reusable action打勾
10.QTP与MTM连接:Tools/option/run/allow other mercury products to run...
11.插入已存在的动作1)insert/call to copy of action...复制可修改
2)insert/call to existing of action...复制不可修改
12.QTP报告自动跳出设置:Options>Run>View results when run session ends
13.判断表格是否存在:
If Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").Exist then
reporter.ReportEvent 0,"pass","系统显示了所有的资讯列表!"
else
reporter.ReportEvent 1,"fail","系统没有显示资讯列表!"
end if
14.获取表格行数:Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").RowCount
15.注释脚本存在位置:qtp/dat/ActionTemplate.mst
16取本地文件名称Function ShowFileList(folderspec)
Dim fso, f, f1, fc, s
Set fso = CreateObject("scrīpting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
s = s & f1.name
s = s & " "
Next
ShowFileList = s
End Function
wenjian=ShowFileList("D:\下载\本地下载1\")
17.取本地文件删除:del= DeleFile("D:\下载\本地下载1\")
Function DeleFile(folderspec)
Dim fso, f, f1, fc, s
Set fso = CreateObject("scrīpting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
f1.delete
Next
End Function
18.sousuo2=Browser("Browser").Page("Page_4").Check (CheckPoint("2007-11-08 14:21"))
If (sousuo2)eqv(true) Then
reporter.ReportEvent 0,"",""
else
reporter.ReportEvent 1,"",""
End If
19.取参数化数据的行数,只在某几行进执行某些语句
row=datatable.GetSheet(3).getcurrentrow
If row = 3 Or row = 4 Then
20.单选框置灰zhihui=Browser("下载中心--新增下载文件").Page("下载中心--新增下载文件_4").WebRadioGroup("downloadType").GetROProperty("disabled")
If zhihui=1 Then
End If
29.取树结构
Set Desc=descrīption.create
Desc("micclass").value="WebTable"
Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
yuqi=List(0).GetROProperty("innertext")
msgbox yuqi
yuqi=split(yuqi," ")
msgbox yuqi(1)
30.关闭所有IE
SystemUtil.CloseProcessByName("iexplore.exe")
31.创建action template.
当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用action template
来实现最简单快捷。
方法:用记事本等文本编辑器,输入如下类似的内容:
'Company: xxxx
'Author: xxx
'Product: xxx
'Date: xx
然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。
32.启动IE的语句:SystemUtil.Run "iexplore.exe", "http://www.***.com"
关闭IE或其他程序的语句:SystemUtil.CloseProcessByName "app.exe"
or SystemUtil.CloseProcessByWndTitle "Some Title"
33.获取图片的名称
ObjectName = Browser(…).Page(…).Image("Find").GetProperty("Name")
34.检查某个对象是否存在,如果存在弹出对话框说明对象存在。
If Browser("Browser").Page("Page").Applet("login.html").JavaEdit("username").Exist Then
MsgBox("The object exists.")
End if
35.同步点
Browser("数商3.0制作平台").Dialog("Microsoft Internet Explorer").WaitProperty "visible", True, 120000
设置test/test settings/object synchronizationg timeout 一致
36.视图框显示为乱码时:调整原页面编码,在QTP/tools/change active screen
37.添加附件:
Browser("**").Page("**").WebFile("filePath").Click
Browser("**").Dialog("**").WinEdit("文件名(N):").Set "D:\**.jpg"
Browser("下载中心--新增下载文件").Dialog("选择文件").WinButton("打开(O)").Click
添加相应的对象
38.在图片上右击添加:tools/web event recording configuration/custom settings
webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
webdlement/event/add/onclick,onmousedown,onmouseup/listen always
39.数据执行保护
方法一、右击我的电脑/高级/性能/设置/数据执行保护/为除下列选定程序之外的所有程序和服务启用DEP/添加被保护的程序。
方法二、C:/BOOT.INT修改noexecute=alwaysoff
40.在图片上右击添加:tools/web event recording configuration/custom settings
webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
webdlement/event/add/onclick,onmousedown,onmouseup/listen always
41.去掉前后空格
If trim(mingcheng)=trim(yuqi) Then
42.分类树问题解决
Set Desc=descrīption.create
Desc("micclass").value="WebTable"
Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
yuqi=List(0).GetROProperty("innertext")
msgbox yuqi
yuqi=split(yuqi," ")
msgbox yuqi(1)
43.引用自定义环境变量
Environment.LoadFromFile "D:\询价\case\环境\huiyuan.xml"
44.环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))
例如:在桌面建立一个Var.xml,如下
-<Environment> //以这个开始的内部都是定义环境变量,直到以</Environment>结束
- <Variable> // 变量定义起始标识
<Name>aa</Name> // 变量名称
<Value>11</Value> // 变量值
</Variable> // 变量定义结束标识
- <Variable>
<Name>bb</Name>
<Value>22</Value>
</Variable>
- <Variable>
<Name>cc</Name>
<Value>33</Value>
</Variable>
</Environment>
然后导入本测试的环境变量文件中,在专家视图里编写下面的脚本代码:
Dim aParam3
aParam3=Environment.Value(“aa”) // 调用环境变量
msgbox aParam3
运行测试,会输出”11”
45.在HTML编辑器中写入数据
用低水平录制写入编辑器过程,增加编辑部器前的对象,加入click事件,再用TAB
例如:
Browser("广告管理").Page("广告管理").WebEdit("descrīption").Click
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type mictab
Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type "aaa"
46.Browser("creationtime:=1").close
两个页面title相同无法识别时使用描述必编辑
Browser("creationtime:=1").page(title:=****).WebEdit("name:=***").Set "***"
或Browser("creationtime:=1").page(index:=1).WebEdit("index:=0").Set "***"
47.场景恢复:
当某些提示框会在不定期时有提示时,如果自动点击确定或某些按钮
1、tools/recovery scenaril manager,制作相应的提示框和要点击的按钮,并保存
2、test/settings/recovery,添加刚保存的.qrs
48.输入验证码,先提示一个输入框,在输入框内输入验证码,点击[确定],把输入的验证码框
Dim a
a = InputBox("输入名字")
49.对象库中对象名称不分为_2,_3...设置:tool/options/web/page/fram options/
crate a new page test object for为different test object descrīptons
crest a new frame test object for为different test object descrīptions
50.验证测试输入框输入的最大允许字数功能的正确
QTP脚本代码中编写
Set aa=Browser("Browser").Page("Page").Frame("main").WebEdit("PayTypeName")
if konglen(aa,20) eqv true then
reporter.ReportEvent 0,"添加支付方式,支付方式输入框允许输入的最大字符功能正确",""
else
reporter.ReportEvent 1,"添加支付方式,支付方式输入框允许输入的最大字符功能错误",""
end if
此函数的功能为:验证测试输入框输入的最大允许字数功能的正确,函数可写在public.vbs中
Function konglen(duixiang,guifanshu)
duixiang.Click
wait 1
Setting.WebPackage( "ReplayType")=2
Set ōbj=createobject("wscrīpt.shell")
i=0
ōld="a"
xin="b"
while old<>xin
ōld=duixiang.GetROProperty("value")
i=i+1
wait 0,20
obj.sendkeys "1"
wait 0,20
xin=duixiang.GetROProperty("value")
wend
'msgbox i
If i-1=guifanshu Then
konglen=true
else
konglen=false
End If
Setting.WebPackage( "ReplayType")=1
End Function
51.超时设置:Setting("DefaultTimeout") =1000000
52.共享对象库:Set App = CreateObject("QuickTest.Application")
App.Test.Settings.Resources.ObjectRepositoryPath = "path"
53.取颜色 browser("b").page("p").Object.currentStyle“:.color
54.显示行号设置:Tools- --> Editor Options...-->General-->Show line number,
55.不同数据库检查点手动SQL写法
QTP插入数据库检查点,手动指定SQL语句的写法。
一、SQL Server格式(本地无需安装SQL Server)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER=SQL Server;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名
实例:
DRIVER=SQL Server;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名
实例:
DSN=LocalServer;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork
3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)
source(SQL语句):
SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM dcwork.dbo.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME
二、DB2格式:(本地至少安装DB2 Run-Time Client Lite)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER={IBM DB2 ODBC DRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;
实例:
DRIVER={IBM DB2 ODBC DRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;
实例:
DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
3.SQL语句实例
source:SQL语句
SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM DB2ADMIN.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME
三、Oracle格式:(本地需要安装Oracle ODBC DRIVER)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER={Oracle in OraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;
实例:
DRIVER={Oracle in OraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;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;
实例:
DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;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;
3.SQL语句实例
source:SQL语句
SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM DCWORK.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME
四, mysql
Set Conn = CreateObject("ADODB.Connection" )
str="DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.1.100;DATABASE=wp_blog;user id=zzz ; password=123456"
Conn.open str
Set Rs = CreateObject ("ADODB.Recordset" )
sql = "select * from `wp_blog`.`blg_webcategory` limit 0, 5000;"
Rs.open sql,conn,1,3
If (not Rs.eof) then
Rs.MoveFirst
MsgBox Rs(0)
MsgBox Rs(1)
MsgBox Rs(2)
MsgBox Rs(3)
end if
Rs.close
Set Rs = Nothing
Conn.close
Set Conn = Nothing
(转载于 http://bbs.51testing.com/thread-42921-1-1.html )
五. access
Set Conn = CreateObject("ADODB.Connection" )
str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/db1.mdb"
Conn.open str
Set Rs = CreateObject ("ADODB.Recordset" )
56.*.xml
Environment.LoadFromFile "D:\新建文件夹\a.xml"
Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set Environment("HuiYuanB")
57、类似时间控件,不能手到输入的文本档
1)手工添加对象,
2).object.value="2008-4-12"