zz131的郑州二手车交易zz2sc方式有什么区别?

Mercury已于日正式发表LoadRunner&8.1,但是一直到最近才有机会试一下LoadRunner&8.1,发现LoadRunner&8.1比8.0多了一些新功能,像是说明文件、支持的protocol、monitor,其中我觉得改变最大的是整个VuGen的使用介面变得更为简单,而且透过工作流程精灵的方式,一步一步地引导使用者使用VuGen建立脚本,不仅是让初学者更容易上手,即使你已经很熟悉VuGen的使用,透过工作流程精灵更是可以让你在整个脚本建立过程中,减少出错的机会,并大大缩短建立脚本所需花费的时间。 线上说明文件 在说明文件部分,除了原本就有的Tutorial教学文件之外,Tutorial教学文件中使用到的范例档案(脚本、Scenario、分析结果)也可以在Tutorial目录下找到。 另外还多了一个20页的QuickStart文件,快速并且简单的说明如何使用LoadRunner。 除此之外,说明文件还提供了一份Troubleshooting&Guide的线上说明文件,内容清楚的解释了在Controller&output视窗或是VuGen&Execution&Log中出现的错误讯息,而更方便的是你可以直接选取错误讯息后,按下F1按键就会直接开啟该错误讯息的说明文件,省却另外再搜寻的时间。 支援的Protocol 在支援的protocol部分则是多了ADO.NET以及Oracle&10G的录製与播放。 支援的Monitor 在monitor部分多了SAP&Transaction&Breakdown(原本在LoadRunner&8.0就提供了J2EE,&.NET,&Oracle的Transaction&Breakdown)以及与SiteScope(Mercury的系统监控软体)整合。 VuGen 最后则是VuGen的部份,感觉上Mercury以「让使用者更容易使用」为目标,做了很大的改进,以下将逐一说明: 工作流程精灵(Workflow&Wizard) 首先是新版的VuGen加入了工作流程精灵(Workflow&Wizard)的引导模式,这种工作流程精灵的使用介面,其实在另一家压力Silk&Performer是早就已经提供的。 当你开啟一个新脚本,如Web脚本,首先你会看到以下的画面,在视窗的左边会出现一个显示工作流程的工作窗格,右边则是显示建立脚本的流程:Recording&→&Verification&→&Enhancements&→&Prepare&for&Load。 在工作流程的工作窗格上会列出建立虚拟使用者脚本的详细流程与工作,同时上面会有个红色的箭头,指示你目前是位于流程中哪一阶段的工作,同时在右边的画面,也会显示出此工作的相关操作与说明,引导你完成整个建立脚本的流程。当你完成某个工作之后,就可以按一下工作窗格下方的【Next】按钮,进入下一阶段的工作。 当你点一下左边工作窗格上的【Recording&Application】就会出现下面的画面,说明录製前的准备动作、什么是Action、设定Recording&Options,然后按下【Start&Recording】开始录製。 在右边画面中类似超连结的文字都是可以点选的,点选之后就会开啟相关的视窗或是说明文件。例如按下【Open&Recording&Options】会开啟【Recording&Options】的视窗。 当按下【Start&Recording】后,VuGen一样会开啟【Start&Recording】视窗,输入【URL&Address】后按下【OK】就会自动执行瀏览器并且开啟刚刚输入的URL。 同样的录製时也会有浮动工具列。 当录製完整个操作动作后,按下【Stop】,进入到下一个工作【Recording&Summary】,显示刚刚是以哪种Protocol录製脚本,并且录製在哪个Action中,假如有问题,还可以点【Recording&log】看看录製过程中倒底发生了哪些事件。当然假如录製的脚本不小心操作作错了,或是过程中有发生问题,你还可以按下【Record&Again】按钮再重录一遍。 在画面的最右边,你还可以看到录製过程中,VuGen擷取的缩图(Thumbnails),这也是VuGen新增加的功能支一,主要是方便你了解刚刚录製的操作,你可以更改缩图的名称或是加上註解,以便让其它人也可以知道你的脚本在做些什么。 录製完成之后,当然就是执行脚本,看看脚本能不能正确执行无误囉!所以就按一下【Verify&Replay】进入下一个工作Verification。在执行脚本前,可以根据需要,点一下【Run-Time&Settings】,开啟【Run-Time&Settings】视窗,做些设定,像是执行次数、log、think&time等。OK后就可以按下【Start&Replay】按钮,执行脚本了。 脚本执行完后,你会看到下面的画面,显示最新一次的执行结果,最主要是Replay&Status地方有没有出现Error的字样,没有的话,恭喜你,脚本执行是OK的。当然你也可以对照右边录製以及执行的缩图,看看业面对不对,来判断脚本执行有没有问题。假如脚本执行有问题,也提示你有可能是伺服器产生的动态资料(Dynamic&Server&Values)所造成的,这时就需要使用关联(Correlation)的技巧来解决。 脚本执行都没问题之后,进入下一工作Enhancement,加强脚本,例如加上交易(Transactions)、加上参数(Parameters)、加上内容检查(Content&Checks)等。 点一下左边的【Transactions】,就会出现交易编辑器(Transaction&Editor),这也是新版VuGen新增的功能。要加上一个交易,只需要简单的三个步骤。例如要加上一个Login的交易,先按下右边【New&Transaction】按钮后,滑鼠的游标会改变成Star_Transaction的图示,然后在登入的页面左边点一下,然后滑鼠游标便成End_Transaction图示后,在登入页面右边点一下,最后再输入交易名称「Login」,就完成建立一个交易的动作了。 除了建立之外,你也可以在交易编辑器管理并修改所有的交易。在编辑器的右边会出现脚本所有的交易,方便你选取任一个交易,并且执行更名以及删除的动作,当然也可以直接跳到脚本中交易的位置。在中间的画面,你更可以透过拖曳方式任意移动交易的起始结束点,并且做更名的动作。所以透过交易编辑器,对于所有交易的管理,是不是变得更容易了! 加完交易之后,点一下右边的【Parameterization】,进入参数化的工作。在这边你可以点选【switch&to&edit&mode】进入脚本的编辑模式进行参数化的动作,之后再点选【Parameter&list】开啟参数设定视窗,新增并修改参数值,以及设定参数的行为。 假如你不知道怎么做参数化,甚至不清楚什么是参数化,没关係,点选【Parameterization&Tutorial】会开啟参数化的说明文件,一步一步的教你,让你搞懂如何做参数化。 当然做完之后,记得要按一下【Replay&scrīpt】执行脚本,以确保参数化是正确的。 做完参数化之后,你还可以针对页面内容做检查点,例如在买完机票后,一定要在Invoice页面出现「Thank&you&for&booking&through&Mercury&Web&Tours.」的字串,你可以在【Content&Checks】这个阶段加上文字检查点。 到这边脚本基本上算是完成了,但是工作流程还是建议你,在真正执行压力测试之前,在做二个动作,以确保压力测试能够成功的执行。一个就是让脚本执行多个迴圈,另外就是让脚本执行少量的同时上线使用者。毕竟之前脚本的执行,都是在一个使用者的状态下执行一个迴圈而已,很难确保执行多次或是多个使用者同时执行的状况下,脚本还是能正确执行。例如参数化的资料没有考虑的唯一性,在之前的执行是不会发现的,只有在少量的同时上线使用者一起执行时,问题才会发生。 要让脚本执行多次迴圈,只要开啟【Run-Time&Setting】的【General】&【Run&Logic】设定执行的次数即可。 要让脚本模拟少量同时上线使用者一起执行,就需要开啟LoadRunner的Controller,选择Manual&Scenario,设定2~3个使用者,执行看看有没有错误讯息就可以了。 最后整个脚本的建立与验证,总算是大功告成,接下就就是使用Controller建立压力测试的Scenario囉! 以上大致把LoadRunner&8.1&的工作流程精灵的整个流程跑完一遍!! 除错功能(Debugging&Capabilities) 当你想要建立比较复杂的脚本时,就会需要透过写程式码的方式修改脚本,这时VuGen的除错功能就会变得很重要,在新版的VuGen提供了不输给一般IDE的除错功能,像是书籤(bookmark)、中断点(breakpoint)以及执行时期资料(Run&Time&Data)。书籤的目的是要让使用者可以方便的在脚本中快速切换位置。中断点则是方便使用者控制脚本要执行到某个步骤就停止,VuGen除了可以设置中断点之外,使用者还可以透过中断点编辑器(Breakpoint&editor),管理中断点的设置、停用与删除。 例如在上面中断点编辑器中显示脚本中有二个中断点,分别是在第14行以及第25行,打勾表示这二个中断点都是啟用的。假如你要禁用其中一个中断点,只要把打勾给取消掉就可以了,不用把中断点删除掉。 还有执行时期资料(Run&Time&Data),可以让你在VuGen执行脚本时,即时观察脚本中变数的值,这个功能在
;Recorded scrīpt. Editing may be required.&&&&&& ;modified by wuguiyun, 050121proc maininteger num&& string strHour&& string name&& transmit "PPPoA Test ------------------begin^M"&& transmit "atm operate vcc --add 0.8.81 aal5 1 llcencaps^M"&& transmit "wan config 0.8.81 1 bridge --encap llc^M"&& clear && name = "atm_add.cap"&& set capture file Name && capture on&& pause 2&& transmit "wan show^M"&& pause 6&& transmit "save^M"&& capture off&& transmit "reboot^M"&& pause 60&& transmit "^M"&& waitfor "Login name"&& transmit "netadmin^M"&& waitfor "Password"&& transmit "nimdaten^M"&& pause 3&& transmit "wan delete 0.8.81^M"&& transmit "atm operate --delete 0.8.81^M"&& clear && name = "atm_del.cap"&& set capture file Name && capture on&& pause 2&& transmit "wan show^M"&& pause 6&& transmit "save^M"&& capture off&& transmit "reboot^M"&& & endproc
;output current date time&func& &f_datetime:integer&string DateString, TimeString, temp&&&&& &; Time and date strings.& &&&&ltimestrs $LTIME DateString TimeString&&; Convert long time into date and time, in text form,; and display it on the status line.&&strfmt temp "current datime:%s& %s^M" DateString TimeString&&;strfmt temp "current datime:'n%s& %s^M" DateString TimeString&&transmit temp& &return 1& endfunc
这是从别的网上找来的,这些内容对我有很大的帮助,所以我就把它粘来了,以备不时之需。。
1.runaction 后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)?&&&&A:脚本中原有RunAction "testbase [case1]", oneIteration& & 把引号中的内容放到Global表中的第22行,然后将代码修改为:& & datatable.getsheet("Global") & & datatable.setcurrentrow(22)& & strLogin=DataTable("ActionName","Global") & & RunAction strLogin, oneIteration & && & help中也有相关帮助& & 如:& & Syntax & & RunAction ActionName, [IterationMode , IterationRange , Parameters]& & ActionName : String : The name of the action
2.QTP8.2 中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?&&A:程序开头加上ExecuteFile "..\..\..\project\DeVariable.vbs"
3.QTP 如何做回归测试(300多个TestCase,TD是否可以管理) ?&&A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本& & QTP8.2本身提供一个工具Test Batch Runner但是运行完没有报告。& & MI有另一个工具叫MTM(multitestmanager)
4.qtp 自动节图功能
A: 具体可参考此帖:
5.在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.& & 可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)& & (失败的提示信息是&&object not visible) &&A:1.延迟可用WAIT X(X单位是秒)& & 2.可以安装插件添加新的浏览器& && & SystemUtil.Run "file” "params" "dir" "op'' "mode"& && & QTP运行可执行文件的方法及其参数& &&&ps: 建议是用IE浏览器,或者IE内核浏览器做测试
6.checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?&&A:Text not displayed能解决问题& & 关于 Text Checkpoint 的总结。& & 1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text&Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。& & 2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。& & 3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。
7.WSH 的应用方法&&A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。
在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。  脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。
打开记事本编辑器,在上面编写如下内容:  Wscrīpt.Echo("走近 WSH")  将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。  这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:  dim objdir  set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")  for k=1 to 10  anewfolder="c:\chapter" & k  objdir.createfolder(anewfolder)  next
同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。& & 最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:  ' define a constant for stopped services  Const ADS_SERVICE_STOPPED = 1
' get an ADSI object for a computer  Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")
' get an object for a service  Set ōbjService = objComputer.GetObject("Service","MYSERVICE")
' check to see if the service is stopped  If (objService.Status = ADS_SERVICE_STOPPED) Then
' if the service is stopped, then start it  objService.Start
  End If
将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。
其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。
此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。
8.从 EXCEL 中导出数据进行测试
datatable.AddSheet("51sheet")datatable.ImportSheet "f:\test.xls","testsheet","51sheet"Dim i,RowCount ' 定义两个变量 i=0RowCount=datatable.GetSheet("51sheet").GetRowCount ' 设置 RowCount 等于 51sheet 中的行数。 msgbox RowCountDo while i&rowcounti=i+1 ' 第一次进入循环,执行这句后, i=1'datatable.getsheet("51sheet").setcurrentrow(i)&& 这句话被我注释掉了,正确的写法应该是下面这样,分开写。 datatable.getsheet("51sheet") datatable.setcurrentrow(i)' 执行过上面两句后, CurrentRow 是第一行。 tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value& && && && && && &' 现在,我们调用 msgbox 看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢? ' 得到的是第二行的值么? msgbox "GetParameter-Name:"&tempData ' 这里弹出我们要看的值。 ' 下面我们用另外一种方法来得到。 msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value ' 这里我用 GetParameter(1) 去得到 sheet 中第一列的值。 loop
9.关于 dtGlobalsheet 与 dtLocalsheet
1) dtGlobalsheet 只有一个,它的 index 值比较特殊,它有两个 index 值,一个是 1 还有一个是内置的默认的 1000 。 你可以用 1 或者 1000 去引用它都是正确的。当然了,如果你用 dtGlobalsheet 来引用它也是正确的。这个 sheet 的 Name 叫做 "Global" 。注意: SheetName 是区分大小写的。 2) dtLocalsheet 可以用 index:1001 来引用,当然,也可以用 2 来引用。至于其它自定义的 sheet 嘛,你就只能用 index:3 来引用了。 它没有内置的默认的类似前两个那样的 index 值。 3) datatable 这个对象只有一个。就是所有 sheet 的集合。或许你把它理解为 excel 文件比较好。 dtsheet 呢?就是其中的每个 sheet 。所不同的就是 MI 为他们做了一些默认值。在我们的应用中,可能会有多个 action, 如: actiion1,actiion2,actiion3这些 action 也分别对应有各自默认的 LoaclSheet. 即: actiion1 , actiion2 , actiion3 。
如果每个 action 中,我们都只用到一个 sheet ,那就好办了,在每个 action 中都可以用 localsheet 来引用,但是如果我们有两个及两个以上的 sheet. 那么就比较容易乱套了。
10.移动当前位置的行
For i=1&&to 3datatable.getsheet("Global") datatable.setcurrentrow(i)DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。Next
11.如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)& &A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。& &&&2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!& && &&&其它就要手动输入了!
12.QTP 正则表达式的帮助& &A:见附件word文档:
( 18:32, 26.5 K)
13. 自动测试实施计划& &1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。& &2)制定实施的时机:也就是在什么阶段& &3)研究所要测试的功能 性能& &4)分析在测试中可能遇到的问题 和困难& &5)预估所需要的人时和相应的硬件& &7)确定负责人员和相关测试人员& &6)制定详细的测试计划 方案& &7)最后是执行计划
14. 一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)& &例如:& &-----------------------------------& &'Action_A&& & Public strURL& & & && &&&...... ......& & Function QueryList()& && &&&...... ......& && &&&...... ......&&& & End Function& &------------------------------------& &'Action_B& &'如何调用 QueryList函数和strURL& &A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件.& && && &
如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的.&  2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION
15.如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发,&请问如何管理源代码?)& &A: 一个是代码你可以通过vss,cvs等来进行管理& &&&一个是通过td或者qc的基于用例的代码管理& &&&
其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的& &&&角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。
16: 脚本不能回放,IE中的AtiveX设置有问题??& &A: TOOL---OPTIONS----Ative screen & &&&然后点开advanced..,把LOAD&&ACTIVEX CONTROLS打勾& &&&TOOL---OPTIONS----Ative screen & &&&然后点开advanced..,run scrīpts--&disabled!
17 .如何参数化link
Browser("Browser").Page("Page").SyncBrowser("Browser").Navigate "/cgi-bin/index.php"Browser("Browser").Page("51Testing 软件测试论坛---软件测试,软件质量工程师").SyncSet tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.linksDim i,j, arr()i=0For Each element in tags& & If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then& & & & & & & & & & & & ReDim Preserve arr(i+1)& & & & & & & && &&&arr(i)=element.InnerText& & i=i+1& & & & end ifNextFor j=0 to i& & & & & & & & & & & & Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)& && && && &Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click& & & & & & & & & & & & Browser("Browser").BackNext
这段代码先是打开一个空的页面,然后输入url.到达论坛首页。然后得到所有版面的名称,也就是link的名称。存到数组里面。然后使用SetTOProperty更换录制时候录下的link的属性。这时候再click
18. QTP 在Debug状态,在Export View 区域不能写入任何东西
A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行Window("Flight Reservation").WinEdit("Name:").Set "testing"
19 . 动态变化值如何获取
A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val
20 .如何一一获得Table中 某栏 link 的 text?
A:通过上面link 的学习. 我终于融会贯通,完成了我的问题: 与大家共享://////////////////////////////////////////////////////////////////////////////////////Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").ClickBrowser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus_2").ClickBrowser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").ClickBrowser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"Browser("Login").Page("Page").Frame("main").WebButton("查找").ClickBrowser("Login").Page("Page").SyncDim finded,findCode,Nowout'define a constrat for findfindCode = 110901& &finded = falseFunction MaxPage(pageString)& &'msgbox pageString& &Dim ilen,i,j& &ilen = len(pageString)& &i=ilen& &While i&0 & && &&&j = mid(pageString,i,1)& & & && & 'msgbox j& & & && & If instr("",j)&0 Then& && && &&&MaxPage = j& & & & & & & && & 'msgbox MaxPage& & & & & & & && & Exit function& & & && & End If& & & && & i=i-1& &WendEnd Function&&Dim trowcount,maxptrowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCountmsgbox "Rowcount: "&trowcountNowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)Nowout = trim(Nowout)maxp = MaxPage(Nowout)msgbox "max page: "& maxpDim nowPage,checkidFor nowPage = 1 to maxp& &If&&finded Then& & & && & Exit for& &End If&&' link to the 当前所需page&&If nowpage&1 Then& & Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"& & Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click& & Browser("Login").Page("Page").Sync& &end if&&' Get the rowcount of table in now page& &trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount& &msgbox "Rowcount: "&trowcount&&'link every record in the table of the page& &for i = 2 to trowcount&&- 2& & & & Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(i,2)& & & & 'msgbox i&": "&Nowout& & checkid = "dgCourse:_ctl" &(i+1)& ":_ctl0" & & Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").SetTOProperty "name",checkid& & Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").Set "ON"& & & & & & Browser("Login").Page("Page").Frame("main_8").Link("0901").SetTOProperty "Text",Nowout& & Browser("Login").Page("Page").Frame("main_8").Link("0901").Click& & Browser("开课设置详细信息").Page("开课设置详细信息").Sync& & & & 'wait(1)& & & & msgbox "begun"& & & & msgbox findCode& & & & msgbox Nowout& & & & msgbox "finished"& & & & If&&trim(findCode) = trim(Nowout) Then& && &&&finded = true& & & & & & & & msgbox "find is ok!"& & & & & & & & wait(2)& & & & & & & & Exit for& & & & End If& & Browser("开课设置详细信息").Close& & Browser("Login").Page("Page").Sync&&nextNext
21 .网页下拉框的选择
A:For i =1 to 10& & Randomize& & IndexNum=Int((10 - 5 + 1) * Rnd + 5)& & Browser("Mercury Tours").Page("Find Flights_2").WebList("arrive").Select "#"&IndexNum& & wait(3)Next
Sub ChildObjects_Example()'The following example uses the ChildObjects method to find all the'list objects on a Web page, and then to select an item in each list.Set ōDesc = Descrīption.Create()oDesc("micclass").Value = "WebList"Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)NumberOfLists = Lists.Count()For i = 0 To NumberOfLists - 1Lists(i).Select i + 1NextEnd Sub
22 .将测试数据单独拿出来
A: 取得一个Browser("Browser").Page("").WebList("fid").GetItem (1)取得全部Browser("Browser").Page("").WebList("fid").GetROProperty("all items")
以下可以在自带的例子中实现Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"a=window("Flight Reservation").wincombobox("Fly From:").GetItem(1)reporter.ReportEvent 2,"下拉列表的值",a
23 .和TD连接
A:在QTP中不是有个Quality Center Connection,选择服务器连接,服务器处输入类似,其中computer_name为服务器的名字,连接后在测试结果中添加defect就可以与TD相连了。
&&&&&&&&&&&在我们运行脚本前,有时候忘了清理环境.可能被测对象已经存在了,QTP再次运行时又重新打开了个相同的对象.导致后续步骤,由于QTP根据对象库中的对象匹配到了两个相同的对象,不知操作哪个对象了,于是报错.那我们有没有办法避免呢?答案当然是肯定的.我们可以在运行测试脚本前,先写段脚本来判断我们要测试的对象是否存在.如果存在可以先关闭,再执行重新打开的操作.接下去以QTP自带的Fight的登录框为例.
首先我们用QTP中的object spy来看一下这个窗口的属性,找到我们可以利用的属性
这边我想利用的就是这个窗口的名称属性及值,利用这个名称属性来告诉QTP该关闭哪个窗口属性.
代码如下:
Dim loginwinSet loginwin=descrīption.Create       '创建对象名为loginwin的对象loginwin( "regexpwndtitle").value="Login"    ',对象属性及值Set child=desktop.ChildObjects (loginwin)
Msgbox child.count,0,"打开登陆窗口的数量"       For i=1 to child.count&& child(i-1).close             '循环寻找这个对象,一次'关闭Next
&&& 需要更改的地方,我用蓝色表示了,大家也可以自己试试.不过有一点要注意就是,要执行关闭窗口的关系,这个也完全依照windows的特性来做.最上面的处在激活状态的先关,然后依次关闭其他的窗口.否则脚本会无法执行.可以把这段脚本放在脚本的最前面,实现测试环境的初始化
child(*),*一定是变量。
上接 QTP使用技巧(二)23:
24 处理Windows弹出窗口
A:IF Not Window("Flight Reservation").Exist(1) Then& & & & & & & & & & & & 'Calling&&open flight& && && && && &If& & not Dialog("Login").Exist(1)&&Then& & & & & & & & & & & & & & & & & & & & & & & && &&&Browser("管理系统").Dialog("Microsoft Internet Explorer").WinButton("确定").Click& & & & & & & & & & & & & & & & & & & &&&End If
25 .查询结果的比较
这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语句和判断条件。
[i]Set Conn = CreateObject("ADODB.Connection")Set Rs = CreateObject("ADODB.Recordset")Conn.Open "Descrīption=kml-DRIVER=SQL SSERVER=KML-IT;UID=PWD=APP=QuickTest PWSID=KML-MICHELLE;DATABASE=kml_db"sql="select distinct grn_no from grn_dtl where grn_no like '%"&grnNo&"%' order by grn_no DESC"Rs.open sql,Conn,1,3Dim i,j,cell& & & & i=1& & & & j=2 'j=2 的原因是因为页面上table是的数据是隔一行一条,不知& &道怎么回事,开发人员弄的怪把& & & & & & & & Do while not rs.eof& & & & & & & & & & & & If i=13 Then&&'13是每页显示出的最大行数,是个常数& & & & & & & & & & & & & & & & i=1& & & & & & & & & & & & & & & & j=2& & & & & & & & & & & & & & & &&&Browser("::").Page("::").Frame("mainFrm_5").Link("下一页").Click& & & & & & & & & & & & end if& & & & & & & & & & & & cell=Browser("::").Page("::").Frame("mainFrm_5").WebTable("收货单号").GetCellData(j,2)& & & & & & & & & & & & If cell&&rs("grn_no") Then& && && && && & Reporter.ReportEvent 1, "查询功能"&cell, "查询结果错误."& & & & & & & & & & & & & & & & Exit do& & & & & & & & & & & & else& & & & & & & & & & & & & & & & Reporter.ReportEvent 0, "查询功能"&cell, "查询结果正确."& & & & & & & & & & & & End If& & & & & & & & & & & & rs.movenext& & & & & & & & & & & & j=j+2& & & & & & & & & & & & i=i+1& & & & & & & & Looprs.closeconn.closeset conn=nothing[/i]
1.首先需要了解在QTP中怎么读取Excel中的单元格的脚本如何写?例子如下
Set xlApp= CreateObject("Excel.Application")Set wkBook= xlApp.Workbooks.Open("C:\test.xls")Set wkSheet= wkBook.Worksheets("Sheet1")j = 2For i = 1 To 4TestNumberOne=CStr(wkSheet.Cells(j, 1))TestNumberTwo= CStr(wkSheet.Cells(j, 2))Next
2.了解如何读取QTP中global表中的单元格的脚本。例子如下:
DataTable("str_ind_id", dtGlobalSheet)
&& global 是全局的数据表,local table只是某个动作的本地数据表. 选择global,global中有多少行数据,qtp就会执行多少次. local action 只是全局中的一个部分,当然只是执行一次了.若想local table 中的数据全班执行,就只能手动加循环语句了.&& 如果你设置整个脚本的运行次数,自然和Global 有关,&BR&如果你设置某个action的运行次数,自然和它对应的localsheet有关,
global 是全局的!有几行数据程序就要回放几次!!不能重新设置!!local 是局部的!有几行数据action 就要回放几次!!设置action的重复次数的操作:反击action,选择action call property,即可进行选择.下面有几种情况:1.当global 有不止一行的数据,action call property-&Run On all Rows 程序每次运行时,action中的每行都要执行2.当global 有不止一行的数据,action call property-&Run& one iteration only而且global的行数&action的行数,当action执行到最后一行后,不管此时global 的行数为几,下次回放时action都执行最后一行!如果global的行数&action的行数,action就执行不到最后一行3.action call property-&Run from rows to rows4.global的重复次数在test-&run中设置。&
代码:表的循环读取写数据
dim countNum countNum = DataTable.GetSheet("Global").GetRowCountfor i=0 to countNum-1DataTable.SetCurrentRow(i)Browser("Login Page").Page("Page_5").WebEdit("#form.name").set DataTable(("#form.name", dtLocalSheet)...............end
Dim i,currentValue & i = 1 & While i&= 3&&&&& Rem&&& To find the value, you dan apply& any& of&& the following& two& fuctions :&&&&& Rem&&&& DataTable.Value(ParameterID [, SheetID])&&&& or&&&& DataTable(ParameterID [, SheetID])
&&&&&& currentValue =& DataTable.Value("LProductInfo","Action1")&&&&&&&&& Rem currentValue =&& DataTable("LProductInfo","Action1")&&&&&&&&& &&&&&&&&&&& Browser("Login Page").Page("Page_3").Image("spacer").FireEvent "onmouseover"&&&&&&&&&&& Browser("Login Page").Page("Page_3").Image("spacer").Click&&&&&&&&&&& Browser("Login Page").Page("Page_4").WebButton("Create").Click&&&&&&&&&&& Browser("Login Page").Page("Page_5").WebEdit("#form.name").Set currentValue&&&&&&&&&&& Browser("Login Page").Page("Page_5").WebEdit("#form.productNo").Set currentValue&&&&&&&&&&& Browser("Login Page").Page("Page_5").WebEdit("#form.spec").Set currentValue&&&&&&&&&&& Browser("Login Page").Page("Page_5").WebEdit("#form.unit").Set currentValue&&&&&&&&&&& Browser("Login Page").Page("Page_5").WebButton("Save").Click&&&&&&&&&&& wait(2)&&&&&&&&&&&& DataTable.GetSheet("Action1").SetNextRow&&&&&&&&&&& i = i+1& Wend
QTP插入数据库检查点,手动指定SQL语句的写法。一、SQL Server格式(本地无需安装SQL Server)connectionstring(连接字符串):1.本地没有创建数据源的方式DRIVER=SQL SSERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名实例:DRIVER=SQL SSERVER=10.160.11.10;UID=PWD=APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork2.本地已创建数据源的方式DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名实例:DSN=LocalSUID=PWD=APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork3.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=db2PWD=db2MODE=SHARE;DBALIAS=DCWORK;2.本地已创建数据源的方式DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;实例:DSN=DWCORKDB2;UID=db2PWD=db2MODE=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=DFEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSMTS=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=DFEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSMTS=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=IfAllSMTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;实例:DSN=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=IfAllSMTS=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
35313/1813

我要回帖

更多关于 pos zz交易失败 的文章

 

随机推荐